Codex CLI 自動化ワークフロー3パターン|GitHub Actions・cron・CI統合¶
この記事の対象者
- CI/CD運用経験があり、Codex CLIの基本操作を理解している中級開発者
この記事のポイント¶
- GitHub ActionsでCodex CLIを自動実行(定期実行・PRトリガー)
- cronジョブでの夜間バッチ処理とログ管理
- CI/CDパイプラインへの統合と失敗時のリトライ設計
なぜこの問題が今重要か¶
Codex CLI利用者の多くが「設計原則」を超えた具体的な自動化統合パターンを求めている。本記事は既存の原則解説(codex-cli-best-practices.md)を補完し、実運用で即使えるワークフロー実装に特化。
解決ステップ概要¶
| ステップ | 内容 | 到達指標 |
|---|---|---|
| 1 | GitHub Actions統合(定期実行・PRトリガー) | ワークフローが実行される |
| 2 | cronジョブ統合(夜間バッチ・ログ管理) | crontabエントリ動作確認 |
| 3 | CI/CDパイプライン統合(失敗時リトライ) | ビルドステップ成功 |
ステップ1: GitHub Actions統合パターン¶
定期実行(毎日午前6時に自動タスク)¶
name: Codex Daily Automation
on:
schedule:
- cron: '0 21 * * *' # UTC 21:00 = JST 06:00
jobs:
auto-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Codex CLI
run: |
npm install -g @openai/codex-cli
codex --version
- name: Run Automated Task
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex --full-auto \
--log-file ./codex.log \
"Update dependencies and run tests" || echo "Task failed but continuing"
- name: Commit Changes
run: |
git config user.name "Codex Bot"
git config user.email "bot@example.com"
git add -A
git diff --staged --quiet || git commit -m "🤖 Automated update by Codex CLI"
git push
ポイント: - --full-autoで全操作を自動承認(セキュアなCI環境前提) - || echo "..." でエラー時もワークフローを継続(失敗通知は別ステップで処理) - コミット前にgit diff --staged --quietで空コミット防止
PRトリガー(レビュー自動化)¶
name: Codex PR Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Codex CLI
run: npm install -g @openai/codex-cli
- name: Auto Review PR
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
git diff origin/$GITHUB_BASE_REF...HEAD > diff.txt
codex --approval never --sandbox workspace-write \
"Review this PR diff and suggest improvements: $(cat diff.txt)" \
> review.md
- name: Post Review Comment
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: review
});
ステップ2: cronジョブ統合パターン¶
夜間バッチ処理(ログ管理付き)¶
# crontab -e
0 3 * * * /home/user/scripts/codex-nightly.sh >> /var/log/codex-nightly.log 2>&1
codex-nightly.sh 実装例:
#!/bin/bash
set -euo pipefail
LOG_DIR="/var/log/codex"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE="${LOG_DIR}/codex_${TIMESTAMP}.log"
mkdir -p "$LOG_DIR"
echo "$(date): Starting Codex nightly task" | tee -a "$LOG_FILE"
cd /path/to/project || exit 1
# 自動承認モードで実行(失敗時は3回リトライ)
for i in {1..3}; do
if codex --full-auto \
--log-file "$LOG_FILE" \
"Analyze codebase and update documentation"; then
echo "$(date): Success on attempt $i" | tee -a "$LOG_FILE"
break
else
echo "$(date): Attempt $i failed, retrying..." | tee -a "$LOG_FILE"
sleep 30
fi
done
# 7日以上前のログを削除
find "$LOG_DIR" -name "codex_*.log" -mtime +7 -delete
echo "$(date): Task completed" | tee -a "$LOG_FILE"
失敗時の通知(オプション):
# 失敗時にSlack通知
if ! codex ...; then
curl -X POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL \
-d '{"text":"Codex nightly task failed"}' || true
fi
ステップ3: CI/CDパイプライン統合パターン¶
GitLab CI例(テスト自動修正)¶
stages:
- test
- fix
run_tests:
stage: test
script:
- npm test
allow_failure: true
artifacts:
reports:
junit: test-results.xml
auto_fix:
stage: fix
when: on_failure
dependencies:
- run_tests
script:
- npm install -g @openai/codex-cli
- |
codex --approval never --sandbox workspace-write \
"Fix failing tests based on test-results.xml" || exit 0
- git add -A
- git diff --staged --quiet || git commit -m "🤖 Auto-fix by Codex"
- git push origin HEAD:$CI_COMMIT_REF_NAME
Jenkins Pipeline例(ビルド失敗時の自動調査)¶
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npm run build'
}
}
stage('Auto-Diagnose on Failure') {
when { expression { currentBuild.result == 'FAILURE' } }
steps {
sh '''
codex --full-auto \
"Analyze build failure logs and suggest fixes: $(cat build.log)" \
> diagnosis.txt
cat diagnosis.txt
'''
}
}
}
}
ステップ4: ノーコード/ローコードでの自動化(Skills & Automations)¶
スクリプトやCIを直接組む前段階として、Codex AppやCLIの機能を使った簡易自動化も強力な選択肢になります。
Skills(スキル)による定型作業のパッケージ化¶
よく繰り返す作業(ログ解析、リリースノート作成、定型レビューなど)は毎回プロンプトを書くのではなく、SKILL.md としてパッケージ化します。
$skill-creatorを使って対話的に作成- 個人のスキルは
$HOME/.agents/skillsに、チーム共有のスキルはリポジトリの.agents/skillsに配置 - ベストプラクティス: 1つのスキルは1つの仕事に特化させ、具体的な入力・出力・トリガーフレーズを定義する。
Automations(定期実行)¶
CLIで安定して動くようになったワークフロー(スキル含む)は、Codex Appの「Automations」タブでスケジュール実行できます。
- 利用例: 毎朝のスタンドアップサマリ作成、最新コミットの要約、定期的なバグ検出
- 独自のGit worktreeやローカル環境での実行が選択可能で、スクリプトを書かずに手軽なcronジョブとして機能します。
よくある落とし穴と対処¶
| 症状 | 原因 | 即時対処 |
|---|---|---|
| GitHub Actionsで権限エラー | トークンスコープ不足 | GITHUB_TOKEN に contents: write 権限を追加 |
| cronで実行されない | 環境変数未設定 | crontabに OPENAI_API_KEY=/path/to/key を明記 or シェルスクリプトで source ~/.bashrc |
| CI/CDで無限ループ | コミットがトリガーを再実行 | ワークフロー内コミットメッセージに [skip ci] を付与 |
| ログファイルが肥大化 | 古いログ未削除 | 上記シェルスクリプトの find ... -mtime +7 -delete を実装 |
詳細設定(高度最適化)
### 承認ポリシーの細かい制御# ファイル書き込みのみ自動承認(ネットワークは手動)
codex --approval never \
--sandbox workspace-write \
--allow-file-write \
"Task description"
# 特定ディレクトリ外へのアクセス禁止
codex --approval never \
--sandbox custom \
--allowed-paths ./src,./tests \
"Task description"
#!/bin/bash
TASKS=(
"Update package dependencies"
"Run security audit and fix"
"Update changelog"
)
for task in "${TASKS[@]}"; do
echo "Executing: $task"
codex --full-auto "$task" || {
echo "Failed: $task"
exit 1
}
done
# OpenAI APIの利用状況を定期チェック(要API key)
codex --approval never "Check current API usage" | \
grep -oP '(?<=tokens: )\d+' > usage.txt
次に読む¶
- Codex CLI ベストプラクティス — 設計原則・変更管理
- GitHub Actions連携ガイド — より詳細なGitHub Actions実装
- Claude Code Cron自動化ガイド — Claude Code版の類似パターン