GitHub ActionsとCodexでIssueドリブンな自動開発を行う
はじめに
ソフトウェア開発の効率化は常に重要な課題である。近年、AI 技術の進化により、コーディング作業の一部を自動化する試みが活発になっている。本記事では、GitHub Actions と OpenAI Codex を活用し、Issue の発行をトリガーとしてコード修正を行い、プルリクエスト(PR)の作成、さらには PR 内容の要約までを自動化する「Issue ドリブンな自動開発」の仕組みについて解説する。この仕組みの理想は、人間が新たな Issue を投げるだけで、開発が進んでいく状態を目指すものである。
Issue 発行から PR 作成までの自動化 (issue-to-pr.yaml
)
自動開発のトリガーとして Issue の作成から始まる。特定のラベル(この例では codex
)が付与された Issue が作成されると、GitHub Actions ワークフローがトリガーされるように作成した。
1name: Issue to PR with Codex
2
3on:
4 issues:
5 types: [labeled]
6
7jobs:
8 fix_with_codex:
9 runs-on: ubuntu-latest
10 if: github.event.label.name == 'codex' # 'codex'ラベルがついた時のみ実行
11
12 permissions:
13 contents: write
14 pull-requests: write
15 actions: write
16
17 steps:
18 - uses: actions/checkout@v4
19
20 - name: Set git user
21 run: |
22 git config user.name "github-actions[bot]"
23 git config user.email "github-actions[bot]@users.noreply.github.com"
24
25 - name: Setup Node.js
26 uses: actions/setup-node@v4
27 with:
28 node-version: "latest"
29
30 - name: Install Codex CLI
31 run: npm install -g @openai/codex
32
33 - name: Generate patch with Codex
34 env:
35 OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
36 run: |
37 BRANCH="codex/issue-${{ github.event.issue.number }}"
38 git switch -c "$BRANCH"
39
40 if [ -d "node_modules" ]; then
41 rm -rf node_modules
42 fi
43 if [ -f "package-lock.json" ]; then
44 rm package-lock.json
45 fi
46
47 PROMPT="$(printf '%s\\n\\n%s\\n%s\\n' "${{ github.event.issue.title }}" "${{ github.event.issue.body }}" "最後に\`npm ci && npm run build\`を実行してエラーが出ないことを確認してください。 .gitのような'.'から始まるファイル、フォルダの中身は絶対に変更しないでください。")"
48
49 codex -a full-auto --quiet "$PROMPT"
50
51 if [[ -n $(git status --porcelain) ]]; then
52 git add .
53 git commit -m "Fix: #${{ github.event.issue.number }} - ${{ github.event.issue.title }}"
54 fi
55
56 git push -u origin "$BRANCH"
57
58 - name: Create Pull Request
59 env:
60 GH_TOKEN: ${{ secrets.PAT_TOKEN || secrets.GITHUB_TOKEN }}
61 run: |
62 gh pr create \
63 --title "Fix: #${{ github.event.issue.number }} – ${{ github.event.issue.title }}" \
64 --body "Automated fix generated by Codex CLI." \
65 --base main \
66 --head "$BRANCH"
このワークフロー (.github/workflows/issue-to-pr.yaml
) の主なステップは以下の通りである。
- トリガー: Issue に
codex
ラベルが付与された際に起動する。 - 環境セットアップ:
- リポジトリのコードをチェックアウトする。
- Git のユーザー情報を設定する(ボットとしてコミットするため)。
- Node.js 環境をセットアップする。
- OpenAI Codex CLI をインストールする。
- Codex による修正とパッチ生成:
- Issue 番号に基づいた新しいブランチを作成する (
codex/issue-${{ github.event.issue.number }}
)。 - 既存の
node_modules
とpackage-lock.json
があれば削除し、クリーンな状態にする。 - Issue のタイトルと本文を連結し、Codex へのプロンプトを生成する。この際、「最後に
npm ci && npm run build
を実行してエラーが出ないことを確認してください。 .git のような'.'から始まるファイル、フォルダの中身は絶対に変更しないでください。」といった指示も追加している。 codex -a full-auto --quiet "$PROMPT"
コマンドを実行し、Codex にコードの自動修正とコミットを行わせる。- もし
codex
コマンドがコミットしなかった場合でも変更があれば、変更点をステージングし、コミットする。 - 作成したブランチをリモートリポジトリにプッシュする。
- Issue 番号に基づいた新しいブランチを作成する (
- プルリクエストの作成:
gh pr create
コマンドを使用し、修正内容を含むプルリクエストをmain
ブランチに向けて作成する。PR のタイトルと本文も自動生成される。
このワークフローにより、Issue の内容に基づいて Codex が自動的にコードを修正し、人間がレビュー可能なプルリクエストとして提出される。
PR 作成をトリガーとした PR 内容の自動要約 (pr-summary.yaml
)
コードの変更が行われ、プルリクエストが作成されると、次にその変更内容を把握するフェーズに入る。この手間を軽減するため、PR がオープンされたことをトリガーに、変更内容の要約を自動生成し、PR にコメントとしてのこすワークフローも作成した。
1name: PR summary by codex
2on:
3 pull_request_target:
4 types: [opened]
5
6jobs:
7 pr-summary-by-codex:
8 runs-on: ubuntu-latest
9 permissions:
10 contents: read
11 pull-requests: write
12 steps:
13 - name: Switch to head branch
14 uses: actions/checkout@v4
15 with:
16 ref: ${{ github.event.pull_request.head.sha }}
17
18 - name: Setup Node.js
19 uses: actions/setup-node@v4
20 with:
21 node-version: "latest"
22
23 - name: Summary and comment
24 run: |
25 npm install -g @openai/codex
26
27 gh pr diff ${PR_NUMBER} > pr-diff.txt
28
29 codex -m o4-mini -a auto-edit --quiet \
30 "pr-diff.txt から更新差分を日本語で要約して。変更があったファイルの内容を確認して。プルリクエストとして要約内容をcodex-summary.md に保存して。"
31
32 gh pr comment --body-file codex-summary.md "${PR_URL}"
33 env:
34 OPENAI_API_KEY: ${{secrets.OPENAI_API_KEY}}
35 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36 PR_URL: ${{ github.event.pull_request.html_url }}
37 PR_NUMBER: ${{ github.event.number }}
このワークフロー (.github/workflows/pr-summary.yaml
) の主なステップは以下の通りである。
- トリガー: プルリクエストがオープンされた際に起動する (
pull_request_target
イベントのopened
タイプ)。 - 環境セットアップ:
- PR の HEAD ブランチ(変更が含まれるブランチ)のコードをチェックアウトする。
- Node.js 環境をセットアップする。
- Codex による要約とコメント:
- OpenAI Codex CLI をインストールする。
gh pr diff ${PR_NUMBER} > pr-diff.txt
コマンドで PR の差分を取得し、pr-diff.txt
ファイルに保存する。codex -m o4-mini -a auto-edit --quiet "pr-diff.txt から更新差分を日本語で要約して。変更があったファイルの内容を確認して。プルリクエストとして要約内容をcodex-summary.md に保存して。"
コマンドを実行し、Codex に差分ファイルの日本語での要約を依頼し、結果をcodex-summary.md
に保存する。ここではo4-mini
モデルを使用している。gh pr comment --body-file codex-summary.md "${PR_URL}"
コマンドで、生成された要約 (codex-summary.md
) を該当の PR にコメントとして投稿する。
これにより、レビュアーは PR を開くとすぐに、Codex によって生成された変更点の要約を読むことができ、レビューの効率化が期待できる。
実際の動作
- 人間による Issue の作成
- コード修正 + PR 作成と PR の変更点の要約
今後の展望
今後として、外部の AI エージェントに大きなプロジェクトの構想をインプットとして与え、それを具体的な作業単位である細かい Issue 群に分解してもらうことが考えられる。そして、分解された Issue を GitHub の MCP を通じて自動的に発行する。 こうして大量に作成された Issue を、本記事で紹介したような Codex ベースの自動修正・PR 作成ワークフローと連携させることで、人間が初期の仕様を記述するだけで、AI エージェント群が並列的に作業を進め、最終的にプロジェクトが完成するという、より高度な自律的開発体制の実現できると考える。
まとめ
本記事では、GitHub Actions と Codex CLI を活用して、Issue の作成からコード修正、PR 作成、そして PR 内容の要約までを自動化する「Issue ドリブンな自動開発」の仕組みを紹介した。
- Issue → 自動修正 → 自動 PR 作成
- PR 作成 → 自動要約コメント
これらの自動化は、開発の初期段階における手間を大幅に削減し、開発者がより本質的な作業に集中できる環境を提供する。そして、将来的には「main へのマージ → 次の Issue 自動作成」というサイクルを回すことで、人間は新たな Issue を投げるだけという、より高度な自動開発ループの実現が期待される。