7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIを定期実行するベストプラクティス:Cron・launchd・/loop・GitHub Actions 徹底比較

7
Last updated at Posted at 2026-06-20

はじめに

「毎朝、今日のメールを要約してほしい」
「週次レポートを自動生成したい」
「リポジトリのコード品質を定期チェックしたい」

AIを活用する機会が増えた今、AIを定期実行したい場面も増えています。
しかし、定期実行の手段は複数あり、どれを選べばいいか迷う方も多いはずです。

本記事では、代表的な5つの手段を比較し、目的別の選び方と具体的な設定方法を解説します。

定期実行の方法

Cron / launchd

cron とは

cron は、指定した日時や定期的なスケジュールでプログラムやコマンドを自動実行するための常駐プログラムです。
crontab に記述したスケジュールに従い、指定したコマンドを自動実行します。

# 分 時 日 月 曜日 コマンド
0 9 * * 1-5 claude -p "今日のタスクをリストアップして"

シンプルな構文で設定でき、サーバーからローカルまで幅広い環境で動作します。

launchd とは

launchd は macOS のネイティブなプロセス管理・スケジューリングフレームワークです。
macOS では cron より launchd が推奨されており、plist ファイル(XML 形式)でスケジュールを定義します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.myapp.daily-ai-report</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/claude</string>
        <string>-p</string>
        <string>今日の GitHub Issue をまとめてください</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>9</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>StandardOutPath</key>
    <string>/tmp/ai-report.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ai-report-error.log</string>
</dict>
</plist>

cron と launchd の違い

cron launchd
対応 OS Linux / macOS / Unix macOS のみ
設定形式 crontab 記法(シンプル) plist XML(冗長)
スリープ復帰後の動作 実行されない場合がある 補完実行の設定が可能
ネットワーク待機 なし KeepAliveNetworkState サブキーで対応可
ログ管理 別途設定が必要 StandardOutPath 等で簡単

macOS で使うなら、スリープ復帰後の挙動や OS との統合を考慮して launchd を選ぶのが無難です。

設定方法

cron の設定

# crontab を編集
crontab -e
# 平日朝9時に Claude で日次レポート生成
0 9 * * 1-5 cd /path/to/project && claude -p "プロジェクトの状況を日本語でまとめて"

launchd の設定(macOS)

  1. plist ファイルを ~/Library/LaunchAgents/com.myapp.daily-ai.plist に保存
  2. launchctl でサービスを登録
# サービスを登録・開始(macOS 10.10+ の推奨コマンド)
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.myapp.daily-ai.plist

# 状態確認
launchctl list | grep com.myapp

# サービス停止
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.myapp.daily-ai.plist

Claude の /loop

/loop とは

/loop は Claude Code が自分でタイミングを判断しながら繰り返すモードです。

  • /loop(インターバルなし)→ ダイナミックモード:Claude が次の実行タイミングを自ら決定
  • /loop 30m のようにインターバルを明示することも可能
# 動的ループ:次のチェックタイミングを Claude が判断する
claude /loop "Slack の未読メッセージを確認して、重要なものがあれば知らせて"

内部的には ScheduleWakeup ツールが使われており、Claude は「次は○分後にチェックする」と自律的に判断します。
たとえば CI が走っている間は短いインターバル、深夜帯は長いインターバルを選ぶといった状況に応じた動作が可能です。

同じプロンプトが次回起動時にも渡されるため、会話の流れを引き継ぎながら繰り返せます。

向いているタスク

  • 対話的・探索的なタスク(「何か問題があれば教えて」系)
  • CI ビルドのリアルタイム監視(終わったら即通知)
  • 結果に応じてインターバルを変えたいタスク
  • PC を起動している間だけ動かせればよい処理

設定方法

特別な設定ファイルは不要です。Claude Code CLI を起動してコマンドを入力するだけです。

# ループの開始(動的モード)
claude /loop "毎時、プロジェクトの CI ステータスを確認して"

# インターバルを明示する場合
claude /loop 30m "GitHub の新しい Issue を確認して優先度をラベリングして"

GitHub Actions

GitHub Actions とは

GitHub Actions は、GitHub が提供する CI/CD プラットフォームです。
schedule トリガーに cron 記法を使うことで、定期実行ワークフローを作成できます。

クラウド上で実行されるため:

  • サーバーの管理が不要
  • チームでワークフローを共有・バージョン管理できる
  • GitHub Marketplace の豊富な Action と組み合わせ可能

GitHub Actions が向いているタスク

  • チームで共有する定期タスク(週次レポート、リリースノート生成)
  • コードリポジトリに関連する AI 処理(PR 要約、コードレビュー)
  • 複数システムとの連携(Slack 通知、Issue 自動作成)
  • 本番環境に近い定期処理(データ品質チェック、モニタリング)

設定方法

.github/workflows/ ディレクトリに YAML ファイルを作成します。

# .github/workflows/daily-ai-review.yml
name: Daily AI Code Review

on:
  schedule:
    # 毎平日 JST 9:00(GitHub Actions の cron は UTC)
    - cron: '0 0 * * 1-5'
  workflow_dispatch:  # 手動実行も許可

jobs:
  ai-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Claude Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          pip install anthropic
          python scripts/ai_review.py

      - name: Post result to Slack
        uses: slackapi/slack-github-action@v2
        with:
          payload: '{"text": "AI レビュー完了しました"}'
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

注意: GitHub Actions の cron は UTC です。JST 9:00 に実行したい場合は 0 0 * * *(UTC 0:00 = JST 9:00)と設定します。

claude-code-action を使う場合

Anthropic が公式提供する anthropics/claude-code-action を使えば、Claude Code をより簡単に組み込めます。

- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    prompt: |
      このリポジトリの先週のコミットを分析して、
      改善提案を日本語で Issue に投稿してください

まとめ

方法 特徴 こんな時に選ぶ
cron シンプル・汎用的 Linux / サーバーでのヘッドレス定期実行
launchd macOS ネイティブ・安定 macOS ローカルでの個人タスク
/loop AI が状況を見て自律判断 監視・探索・インターバル可変なタスク
GitHub Actions クラウド・チーム共有・連携豊富 チーム業務・リポジトリ連携タスク

選び方の指針:

  • 一人で使う・ローカル完結 → cron / launchd
  • macOS で使う → launchd(cron よりスリープ周りが安定)
  • AI が状況を判断しながら繰り返したい → /loop
  • チームで共有・GitHub と連携 → GitHub Actions

AI の定期実行は「どこで動かすか」「誰と共有するか」「どれくらい AI に判断を任せるか」の3軸で考えると選びやすくなります。
用途に合った手段を選んで、AI の定期実行を活用してみてください。


最後まで読んでくださってありがとうございます!

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?