Claude Codeの「ルーティン」機能で毎朝の定型作業を自動化した話
概要
今回はClaude Codeの「ルーティン」機能を使って、毎朝の定型作業をクラウド上でスケジュール自動実行する仕組みを組んだので紹介していきます。
普段Claude Codeにお願いしている定型作業があって、毎回「今日の分やって」と自分から声をかけないと動かないのが面倒でした(^^;
声をかけ忘れる日があると、そのままその日の分が抜け落ちてしまいます。
「毎日決まった時刻に勝手にやってくれたらいいのに」と思って調べたら、クラウド上でスケジュール実行できるルーティン機能があったので、これを使って自動化しました。
この記事では、その仕組みと実際の設定手順を、汎用的な例(毎朝AI関連ニュースを収集してまとめ、gitにコミットする)を交えて紹介します!
それではやっていきましょう!
目次
きっかけ
普段Claude Codeにお願いしている定型作業は、毎回自分から「今日の分やって」と話しかけて初めて動くタイプのものでした。
ただ声をかけ忘れた日はそのままその日の分が抜けるので、流石によろしくない運用になっていたんですよね。
本業が忙しくて出来ないこともよくありますし…
旅行とかで出来ないこともよくあります(- -
だったら決まった時刻に自動で動いてほしいわけで、そこで見つけたのが今回紹介するルーティン(Routines)機能です。
全体像
普通にClaude Codeを使うときは、自分のPC上でチャットしながら会話的に作業してもらいます。
今回使ったのはそれとは別の仕組みで、次のような形の「無人実行専用のClaude Code」を作る、というイメージです。
- 決まったスケジュール(cron)で
- 実行タイミングは5フィールドcron式で指定
- クラウド上の隔離された環境で
- PCの電源が入っていなくても決まった時刻になれば動く
- 指定したGitHubリポジトリをチェックアウトして
- 対象リポジトリはjob_configで指定
- プロンプトで指示した作業を自律的にこなし
- 会話の続きではなく、そのプロンプト単体で完結する内容にする必要がある
- 終わったら結果をcommit & pushする
- 最終的な成果物はリポジトリへの反映という形で残る
図にするとこんな流れです。
要はバッチ処理です(^^
使ったもの
Claude Codeの「ルーティン(Routines)」という機能です。
裏側はRemoteTriggerという仕組みで、名前・実行スケジュール・何をするかの中身を渡すとスケジュール実行ジョブを作れます(各項目の詳細は後述の「4. 実際の設定」でまとめて説明します)。
イメージとしては「毎朝9時にこのリポジトリを開いて、このプロンプト通りに作業して、終わったらpushして」という設定を1回作っておく感じです。
手順(例:「毎朝AIニュースを収集してまとめ、gitにコミットする」ルーティン)
ここでは例として、「毎朝AI関連ニュースをWeb検索で収集し、要約をMarkdownにまとめてnews/フォルダに書き出し、commit & pushする」ルーティンを作る想定で説明します。
(結構色々汎用が効くので、色々試してみるといいと思います!)
1. 目的を決める
毎朝自分でニュースサイトを巡回しなくても、起きたら「今日のAIニュースまとめ」が最新化されている状態にしたい
2. プロンプトを書く(ここが一番大事)
クラウド側のClaudeは会話の文脈をゼロから持ちません。
そのため、プロンプトは自己完結させる必要があります。
今回学んだコツは以下の3つです。
- 何を調べて、何を基準にまとめるかを明記する
- 検索キーワード・対象期間・取り上げる件数など
- 重複実行・誤生成を防ぐガードを入れる
- 「今日の分が既にあれば何もしない」といった判定
- やっていいことの範囲を明示的に区切る
- 「まとめの生成とpush以外はしない。他のファイルは触らない」など
例文(イメージ)です。
プロンプト例
1 | 毎朝のAIニュース収集をお願いします。手順は以下の通りです。 |
3. スケジュールを設定する(タイムゾーンに注意)
cronはUTC基準です。
日本時間で「毎朝8時」にしたい場合は、UTCでは前日23時になります(JST = UTC+9)。
UTC変換の例
1 | JST 08:00 → UTC 23:00(前日) |
4. 実際の設定(RemoteTriggerのcreateリクエスト例)
routine_create_request.json
1 | { |
各項目の意味は以下のとおりです。
- name
- ルーティン管理画面に表示される名前。複数のルーティンを見分けるためのラベル
- cron_expression
- 実行スケジュールを表す5フィールドのcron式(UTC基準)
- enabled
trueで有効化。falseにしておくと設定を残したまま一時停止できる
- job_config.ccr.environment_id
- どの実行環境で動かすかを指定するID。事前にクラウド側で作成しておいた環境を指す
- job_config.ccr.session_context.model
- 実行に使うモデル名
- job_config.ccr.session_context.sources
- チェックアウト対象のGitHubリポジトリ一覧。
git_repository.urlにリポジトリURLを指定する
- チェックアウト対象のGitHubリポジトリ一覧。
- job_config.ccr.session_context.allowed_tools
- クラウド側のClaudeに使わせるツールの許可リスト。ここに無いツールは実行時に使えない
- job_config.ccr.events
- セッション開始時に最初に投げるメッセージの配列
data.typeは"user"固定(ユーザー発話であることを示す)、data.message.contentに実際のプロンプト本文を入れるdata.uuidはイベントごとに発行するv4 UUID、data.session_idは新規セッションなので空文字、data.parent_tool_use_idはトップレベルのメッセージなのでnullにする
作成に成功するとnext_run_atに次回実行予定時刻(UTC)が返ってくるので、JSTに変換して意図通りか必ず確認します。
5. 結果の確認方法
クラウド実行はローカルPCとは別物なので、結果はGitHub側(Web・モバイルアプリ)で見に行きます。news/フォルダに毎朝新しいファイルが増え、commit履歴に自動生成コミットが積まれていればOKです。
ハマった・気をつけたポイント
- タイムゾーンはUTC基準
- JSTで考えたい時刻は必ず変換する(8:00 JST → 23:00 UTC前日)
- 最小実行間隔は1時間
- 数分〜数十分おきの高頻度実行はできない
- クラウド実行はGitHub上のリポジトリ状態しか見ない
- ローカルで作業中の未push分は存在しないものとして扱われるので、自動化を始める前に一度ローカルの変更をpushして同期させておく必要がある
- 二重実行・誤生成ガードは自分でプロンプトに書く
- 「既にファイルがあれば何もしない」のような判定を入れないと、実行のたびに重複生成される
- 情報収集系はソースの質にブレが出やすい
- 「信頼できそうな情報源を優先」くらいの緩い指示だけだと拾ってくる記事の質が揺れるので、必要なら対象ドメインを絞るなど条件を強めるとよい
- やっていい範囲を明示的に絞る
- 「このファイルだけ触っていい」「このアクションは絶対にしない」まで書いておくと、意図しない操作を防げる
実際の実行結果を反映する行為(今回で言う外部への発信など、外部に影響する最終アクション)は自動化の対象から意図的に外しました。
生成とpushまでを自動化し、最後の一手はレビューを挟んで人間が行う設計にしています。
品質管理はやっぱり人がやらないと今のAIだと厳しい印象です(^^
まとめ
今回はClaude Codeのクラウドルーティンを使って、毎回自分から頼まないと動かない定型作業をスケジュール実行に切り出す方法を紹介しました。
ポイントをおさらいすると以下のとおりです。
- プロンプトを自己完結させる
- 文脈をゼロから渡すつもりで書く
- 重複防止・範囲限定のガードを必ず入れる
- 「既にあれば何もしない」「このファイルだけ触る」を明記する
- UTC⇄JSTの変換を確認する
next_run_atが返ってきたらJSTに直して意図通りか見る
- 最終アクションは自動化に含めず、人間の確認ステップを残す
- 投稿・削除・通知送信など不可逆・対外的なものは対象外にする
この形なら、日々のちょっとした定型作業をいくつも無人化していけそうです。
完全無人とは行かなくても、色々遊べそうな機能ですよね!
以上となります。
claudeは3000円くらいでいっぱい遊べるので最高です(^^
それではお疲れさまでした。





