AIにリファクタリングをさせて、PRのタイトルと説明文も生成する
Codex
Codexを使ってリポジトリの小さなリファクタリングを自動化しながら、Pull Requestのタイトルと説明文までまとめて生成する方法を紹介します。自動化の狙いは、レビュー前に整った説明を添えることで手戻りを減らすことです。
背景と目的
日常的にSwiftやObjective Cの修正を繰り返す中で、細かなリファクタリングを積み重ねる作業は単調になりがちです。生成AIに任せられる部分は任せ、開発者が判断すべき箇所に集中するためのフローを構築しました。Codexの全自動モードとJSON出力機能を組み合わせると、この狙いを達成できます。
準備した環境
CodexのCLIとjq
、gh
コマンドのインストールが前提です。CIに組み込む場合は同じツール群をジョブ環境にも揃えておきます。記事ではローカルのmacOS上で検証した結果を基に手順を説明します。
実行パラメータの考え方
--output-schema
で出力形式を固定すると、生成AIが余計な文章を混ぜる心配がなくなります。--output-last-message
は最後の応答をファイルに保存し、後続のシェルスクリプトからPR情報を取り出すために利用します。--full-auto
を指定すると、指示に沿ったリファクタリングを対話なしで完了できます。これらを組み合わせて初めて、リファクタリングとメタ情報生成が一貫したワークフローになります。
JSONスキーマの設計
PRの本文はテンプレート化しやすい情報です。例として下記のスキーマを用意して、タイトルと説明文の双方を必須項目にしています。
refactoring-output-schema.json
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "PR title"
},
"description": {
"type": "string",
"description": "PR description"
}
},
"required": [
"title",
"description"
],
"additionalProperties": false
}
ワークフローの手順
スキーマとプロンプトを準備したら、次のスクリプトでCodexにリファクタリングを依頼します。生成されたJSONはjq
で抽出し、PR作成に利用できる形へ整形します。
CODEX_PROMPT="小さなリファクタリングをしてください"
LAST_MSG_FILE=$(mktemp)
SCHEMA_PATH="refactoring-output-schema.json"
codex exec --experimental-json --output-schema "$SCHEMA_PATH" --output-last-message "$LAST_MSG_FILE" --full-auto "$CODEX_PROMPT"
PR_TITLE=$(jq -r '.title // empty' "$LAST_MSG_FILE")
PR_DESCRIPTION=$(jq -r '.description // empty' "$LAST_MSG_FILE")
rm -f "$LAST_MSG_FILE"
ここでは一時ファイルに最終応答を保存し、取り出しが終わったら削除しています。CIで実行する際は成果物のディレクトリを明示的に指定して、ジョブ間でファイルが衝突しないよう注意します。
PR作成までの流れ
PRタイトルと説明文が取得できたら、gh pr create
でGitHubに投げるだけです。生成された説明文はレビュー観点や変更点の箇条書きも含められるようプロンプト側で調整できます。レビュー前に内容を一読し、プロジェクト固有のラベルなどを手で補うとさらに伝わりやすくなります。
gh pr create \
--title "$PR_TITLE" \
--body "$PR_DESCRIPTION"
まとめ
Codexの自動実行とJSONスキーマ出力を組み合わせることで、リファクタリングとPR作成を一続きの作業として扱えるようになりました。生成AIに定型作業を任せることで、開発者は判断やレビューに集中できます。チームのワークフローに合わせてプロンプトとスキーマを調整し、継続的な改善に役立ててください。
Discussion