背景:なぜ2回しか使えないのか
Claude Codeには、直近の利用実績に応じて一定時間ごとに利用可能量がリセットされる「5時間セッション枠」という仕組みがあります。
このセッション枠は、カレンダー上の時刻(例:9時、14時、19時…)で機械的に区切られているわけではありません。そのセッション枠内で最初にメッセージを送信した時刻を起点として、そこから5時間が1つの枠になる、というローリング方式です。
デザイナー時刻固定じゃなくて、使い始めた瞬間からカウントされるってこと?それなら毎日決まった時間に3回使えそうな気がするけど…。
エンジニアそこが落とし穴で、起点が「自分が最初に使った時刻」に引っ張られるので、業務時間の使い始め方次第で枠の数が減ってしまうんです。
たとえば、朝9時に出勤してすぐにClaude Codeを使い始めたとします。
- 1本目の枠:9:00〜13:00
- 昼休みを挟んで、2本目の枠:14:00〜18:00
これで定時(18時)を迎えると、9〜18時という9時間の業務時間の中で、セッション枠は実質2回しか回せません。1本目の枠が始まったのが9時なので、次の枠が使えるようになるのは13時以降であり、そこから昼休みを挟むと14時スタートになり、そのまま18時の定時で終わってしまうためです。
発想の転換:枠の起点を「始業前」にずらす
ポイントは、セッション枠の起点は「自分が最初に使った時刻」で決まるという点です。つまり、業務時間が始まる前に、ごく短時間・軽量な処理でこの枠を1本先に消費しておけば、その分だけ枠の境界線を前倒しできます。
そこで用意したのが、クラウド上で自動実行される「死活確認(ヘルスチェック)専用ルーティン」です。
- 実行時刻:平日(月〜金)の朝6時(JST)
- 処理内容:ルーティンが正常に起動・実行できるか、現在時刻(JST)を取得できるかを確認するだけ
- 外部への通知・投稿は一切行わない(成功時・失敗時ともに無言で終了)
出勤しない土日にまで枠を消費させても意味がないため、実行は平日限定にしています。このルーティンが6時に実行されることで、「6時始まりの5時間枠(6:00〜11:00)」が自動的に1本消費されます。人手を介さず、業務にも一切影響を与えません。
結果:業務時間内に3回のセッション枠が使えるようになる
このPingがある場合とない場合で、業務時間(9:00〜18:00)中に使えるセッション枠がどう変わるかを比較します。
| 1本目 | 2本目 | 3本目 | |
|---|---|---|---|
| Pingなし | 9:00〜13:00 | 14:00〜18:00 | (枠なし) |
| Pingあり(6時起点) | 9:00〜11:00(6時枠の残り) | 11:00〜16:00 | 16:00〜18:00 |
Pingがない場合、業務時間中に使えるセッション枠は実質2回です。
Pingを入れた場合、6時に開始した枠が9〜11時の間はそのまま使え、11時に枠が切れた直後から次の枠が始まり11〜16時、続けて16〜18時と、合計3回のセッション枠を業務時間内に収めることができます。
つまり、コストのかからない1回のヘルスチェックPingを始業前に仕込んでおくだけで、実質的に使えるセッション枠を1回分増やせるということです。
実装方法
Claude Codeの「ルーティン」機能(クラウド上でcronスケジュール実行されるエージェントセッション)を使い、以下の設定で死活確認専用のルーティンを1本作成します。
- スケジュール:平日(月〜金)のみ JST 6時(cron式ではUTC基準になるため
0 21 * * 0,1,2,3,4のように変換が必要。曜日もJSTとUTCでずれるため、UTC日〜木曜がJST月〜金曜に対応する点に注意) - 実行内容:ルーティンの起動確認と現在時刻(JST)の取得のみ
- 外部通知・投稿・MCP連携:すべて無効化(成功・失敗を問わず一切通知しない)
デザイナーあれ、JSTの6時なのにcronは21時になってる。なんで時刻がズレてるの?
エンジニアcronの時刻指定はUTC基準で保存される仕様なんです。JSTはUTC+9時間なので、JST6時を指定するには前日UTC21時にしないといけないんですよ。曜日も同じ理由で1日ズレます。
実行内容を最小限(Bashツールのみ許可)に絞ることで、コストを抑えつつ「枠を1本先に消費する」という目的だけを達成できます。
登録コマンド
このルーティンは、Claude Codeのチャットに以下をそのまま貼り付けるだけで登録できます。
/schedule
軽量Ping(死活確認)ルーティンを作成してください。
- スケジュール: 平日(月〜金)のみ、JST 6時(cron換算で UTC 日〜木曜21時 = 0 21 * * 0,1,2,3,4)
- リポジトリ: https://github.com/octocat/Hello-World
- モデル: claude-sonnet-5
- 許可ツール: Bash のみ
- MCP接続: なし
- プロンプト内容:
「これはルーチンの死活確認(生存確認)です。外部への通知・投稿は一切行わない。以下を確認するだけでよい:1. このルーチンが正常に起動・実行できたか 2. 現在時刻(JST)を取得できるか。確認後、何も投稿せず、何も通知せずに終了する。エラーが発生した場合も同様に、通知は行わずそのまま終了する。」
上記の内容で確認なしにそのまま作成してください。
コマンドの内容説明
- スケジュール:実行タイミングをcron形式で指定します。ルーティンのcronはUTC(協定世界時)基準で解釈されるため、JSTの時刻・曜日をそのまま書くと意図とズレます。JST 6時は前日UTC21時、JSTの月〜金は前日基準でUTCの日〜木曜に相当するため、変換した値を渡します。
- リポジトリ:ルーティン実行時に紐づけるGitリポジトリです。今回はファイル操作を一切行わないため、公開されている軽量な任意のリポジトリ(
octocat/Hello-World)を指定しています。 - モデル:実行に使用するClaudeのモデルです。死活確認のみの軽い処理なので、標準モデルの
claude-sonnet-5で十分です。 - 許可ツール:ルーティンに許可する操作範囲です。現在時刻の取得だけを行うため
Bashのみを許可し、ファイルの編集・書き込み系ツールは許可しません。 - MCP接続:Slack・Gmailなど外部サービスとの連携設定です。「通知・投稿を一切行わない」という目的のため、明示的に「なし」を指定し、意図しない外部連携が付与されるのを防ぎます。
- プロンプト内容:ルーティン実行時にClaudeへ渡す指示文です。「起動確認」「時刻取得」の2点のみを行い、成功・失敗にかかわらず通知や投稿を一切行わないことを明記しています。
デザイナーMCP接続を「なし」ってわざわざ指定してるのはなんで?デフォルトのままじゃダメなの?
エンジニア実は作成時にSlackやGmailの接続が自動で付与されてしまうことがあって、放置すると意図しない通知や投稿につながりかねないんです。だから明示的にクリアしておくのが安全なんですよ。
まとめ
- Claude Codeのセッション枠は、時刻固定ではなく「最初に使った時刻」起点のローリング制。
- 始業前に軽量なPingルーティンを1本仕込むことで、枠の起点を前倒しできる。
- 結果として、9〜18時の業務時間内に使えるセッション枠が2回から3回に増える。
- Pingの中身は起動確認と時刻取得のみで、通知・投稿は一切行わないため、業務にもセキュリティにも影響しない。