コンテンツにスキップ
use-cases / edit-crontab-from-phone / hero
CRON · PATCH · GATE 47B

空港のスマホから crontab を編集

搭乗アナウンスが流れます。日次レポートのジョブは UTC の 7 時に設定されていますが、受信者は東京にいて、時刻が合っていません。スマホで crontab URL を開き、行をタップし、2 フィールドを変更し、保存をタップします。PATCH が通ります。ジョブは新しいスケジュールで今夜実行されます。SSH も踏み台もノート PC も不要です。

cron ドキュメントを読む
use-cases / edit-crontab-from-phone / mechanism

スマホから 1 回の PATCH、スケジュール上の 1 エントリ

cron サービスは HTTPS 上の JSON を話します。スマホのブラウザは、新しい schedule フィールドを乗せて、エントリの UUID に対して PATCH を送ります。システムの crontab はサービスによって再注入されます。次回発火時刻はレスポンスボディに入ります。

patch.from-phone.sh
PATCH · 送信側
# 6 インチ画面での 2 行編集curl -X PATCH \\"https://cron.containers.hoody.com/users/me/entries/0a3c8" \\-H "Content-Type: application/json" \\-d ["schedule":"30 4 * * 1-5"]# 平日の 04:30 — 受信者がいる東京の現地時間
200 OK · cron.containers.hoody.com
GET · echo
HTTP/1.1 200 OK// エントリは新しいスケジュールと次回発火時刻つきで返ります{"id": "0a3c8","schedule": "30 4 * * 1-5","next_run": "2026-05-05T04:30:00+09:00","enabled": true}

PATCH は変更したフィールドだけを運びます。サービスは既存エントリへマージし、next_run を再計算し、行をシステム crontab に再注入します。SSH セッションも踏み台ホストもノート PC もありません。

use-cases / edit-crontab-from-phone / moves

アナウンスからゲートまで 3 タップ

編集の全体は、搭乗呼び出しと優先キューの間に収まります。URL を開く。フィールドを変える。機内へ歩く。

OPEN

crontab URL を開く

cron サービスには独自の URL があります。cron.containers.hoody.com/users/me/crontab です。同じページが、スマホのブラウザを含む任意のブラウザで開きます。認証は URL です。踏み台も AnyConnect プロンプトもノート PC の鍵の儀式もありません。

EDIT

行をタップして 1 フィールドを変える

各管理エントリは schedule、command、comment、enabled を持つ JSON オブジェクトです。行をタップすると schedule フィールドが編集可能になり、0 7 * * * を 30 4 * * 1-5 に置き換えます。他のフィールドには触れません。

SAVE

PATCH が通り、ゲートへ歩きます

保存すると /users/me/entries/[id] に対する PATCH が発火します。レスポンスは 200 OK と新しい next_run を返します。システム crontab は 1 秒以内に更新されます。タブを閉じて歩き出すだけです。

use-cases / edit-crontab-from-phone / facts

スマホから叩ける 4 つのルート

Hoody Cron は crontab に対して小さな CRUD を公開します。各管理エントリには UUID があり、各エントリは個別に PATCH できます。以下は、スマホがジョブを編集、ミュート、一覧、削除するために使う 4 つのエンドポイントです。

MANAGED ENTRIES · /users/me/entries
PER-USER ISOLATION
  • GET/users/me/entries現在のユーザーの管理エントリを一覧します。各行は id、schedule、command、comment、enabled、next_run を保持します。
  • PATCH/users/me/entries/[id]部分更新です。変更したフィールドだけを送ります。schedule、command、comment、enabled、expires_at はそれぞれ単独で PATCH できます。
  • POST/users/me/entriesJSON から新しい管理エントリを作成します。標準の 5 フィールドスケジュールに加え、マクロ (@hourly、@daily、@weekly、@monthly、@yearly) を受け付けます。
  • DELETE/users/me/entries/[id]エントリを削除します。サービスはそのエントリを除いてシステム crontab を再注入します。空港での編集が誤った修正で、当面ジョブを止めたいときに便利です。

Hoody Cron サービスのエンドポイントです。パスは https://PROJECT-CONTAINER-cron-1.SERVER.containers.hoody.com からの相対です。

use-cases / edit-crontab-from-phone / capacity

スマホ編集が与えてくれるもの

6 インチ画面を持ってゲートに立つ人にとって、本当に意味のある数字です。

  1. FIELDS PATCHABLE5

    schedule、command、comment、enabled、expires_at。それぞれ単独で送れます。他のフィールドは触れられないので、昨日 9 時に書いたコメントは空港での編集を生き延びます。

  2. ROUND-TRIP

    スマホからの PATCH が 1 回、新しい next_run を返す 200 レスポンスが 1 回。同じ呼び出しの中でサービスがシステム crontab を再注入します。2 度目のリクエストもポーリングも要りません。

  3. SHELL SESSIONS0

    SSH も踏み台も AnyConnect もありません。crontab は URL であり、認証は URL です。ノート PC のハードウェアキーはバッグの中で待機です。

use-cases / edit-crontab-from-phone / punchline

crontab が URL なら、その編集も URL です。

スケジュールがブラウザから届く場所になれば、自分が立っている場所が問題ではなくなります。搭乗ゲートは立派なオフィスです。スマホは立派なターミナルです。PATCH こそが変更そのものです。

BEFORE · LAPTOP-ONLY EDITssh prod-bastion → sudo crontab -eノート PC を開く · VPN · 踏み台 · vi
AFTER · ONE URLPATCH /users/me/entries/0a3c8行をタップ · フィールドを変える · ゲートへ歩く
  • SSH なし
  • ノート PC なし
  • 次回発火は今
cron API を読む
use-cases / edit-crontab-from-phone / replaces

これが置き換えるもの

ここに並ぶものの多くは、crontab がスマホから届かなかったから存在しているにすぎません。スケジュールが URL になれば、そこへたどり着くまでの儀式も一緒に消えます。

  • ノート PC からの SSH1 打鍵に意味が出るまでの 20 分の摩擦
  • ssh-bastion アクセス独自の認証情報とタイムアウトを持つ追加のホップ
  • 「家に帰ったらやる」ノート PC が別の時間帯にあるための 6 時間遅延
  • PagerDuty 経由の手動 cron 編集2 行のスケジュール変更のためにオンコールへページ
  • ハードウェアキー + 踏み台 + crontab の曲芸1 フィールドのために 3 つのシークレットと vi セッション
  • Slack でシニアエンジニアに頼むあなたが既に持っている URL を共有するために、別の人間を起こす
use-cases / edit-crontab-from-phone / cta

ゲートに立ったまま、今夜のジョブの発火時刻を変えました。

cron ドキュメントを読む
use-cases / edit-crontab-from-phone / related

他のユースケースを読む