読者が抱える課題
開発作業において、実装完了後にコミットメッセージを記述したり、Pull Request(PR)の概要を手動でまとめたりする作業は、コンテキストスイッチが発生し開発効率の低下につながることがあります。また、開発者によってコミットメッセージやPRの記述レベルにばらつきが生じ、レビュー負担が増大するケースもあります。
この記事で分かること
- CLIツール(Claude Code等)とGitHub CLI(
gh)を組み合わせて、差分からコミットメッセージやPR文章を自動生成する具体的な手順 - 実務でそのまま活用できるPromptテンプレートおよびスクリプト設定例
- 運用時の注意点と安全なレビュー体制の作り方
対象読者・前提条件
- 対象読者: ターミナル操作に慣れているITエンジニア、フリーランス開発者
-
前提条件:
-
gitコマンドが使用できる環境であること - GitHub CLI(
gh)がインストールされ、認証(gh auth login)が完了していること - Claude Code等のCLI型AIツールが利用可能であること(本記事ではClaude Code CLIを用いた設定例を示します)
-
構成要素と全体フロー
本フローでは、以下の手順で作業を自動化・効率化します。
- 変更差分(
git diff)の確認とAIによるコミットメッセージの生成・適用 - ブランチのPushおよびAIによるPRタイトルの生成・記述の作成
- GitHub CLIを用いたPR作成の自動実行
[ローカル変更] -> (git diff) -> [AI: コミット作成] -> (git push) -> [AI: PR文章作成] -> (gh pr create) -> [PR作成完了]
設定および手順の具体例
1. GitHub CLIとエイリアスのセットアップ
事前に gh コマンドが正常に動作するか確認します。
gh auth status
2. Git差分からコミットメッセージを自動生成するスクリプト例
以下は、Stagedされた変更(git diff --cached)を取得し、Conventional Commitsの形式に従ったメッセージを生成・コミットするシェルスクリプト例(git-ai-commit.sh)です。
#!/usr/bin/env bash
set -euo pipefail
# ステージングされた差分があるか確認
if git diff --cached --quiet; then
echo "エラー: ステージングされた変更がありません。'git add' を実行してください。"
exit 1
fi
# 差分の取得(機密情報が含まれていないか事前に確認してください)
DIFF_CONTENT=$(git diff --cached)
# Claude CLI等のAIコマンドを呼び出してコミットメッセージを生成(一例)
# 注: 使用するCLIツールの仕様に合わせてコマンドライン引数を調整してください。
PROMPT="以下のGit diffからConventional Commits仕様(feat, fix, docs, refactor等)に準拠した簡潔なコミットメッセージ(日本語)を1行で生成してください。解説は不要です。\n\n${DIFF_CONTENT}"
COMMIT_MSG=$(claude -p "$PROMPT")
echo "--- 生成されたコミットメッセージ ---"
echo "$COMMIT_MSG"
echo "------------------------------------"
# 確認後、コミットを実行
read -p "このメッセージでコミットしますか? (y/N): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
git commit -m "$COMMIT_MSG"
else
echo "コミットをキャンセルしました。"
fi
3. AIによるPR作成テンプレートと実行フロー
PR作成時には、変更内容を網羅した要約を自動生成します。
PR記述用のプロンプトテンプレート例
以下のベースブランチとカレントブランチの差分、およびコミットログからPull Requestの概要を作成してください。
【出力フォーマット】
## 概要
- 変更の目的と要約
## 主な変更点
- 変更したファイルや機能のリスト
## 動作確認・テスト内容
- 実施した確認項目(推測可能な場合)
【コミットログ】
{COMMIT_LOGS}
【diff要約】
{GIT_DIFF}
PR作成を自動化するシェルスクリプト(git-ai-pr.sh)
#!/usr/bin/env bash
set -euo pipefail
TARGET_BRANCH="main"
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$CURRENT_BRANCH" = "$TARGET_BRANCH" ]; then
echo "エラー: mainブランチからPRを作成することはできません。"
exit 1
fi
# ローカル変更のPush(リモートブランチがない場合は追跡を設定)
git push origin "$CURRENT_BRANCH"
# 差分とログの取得
LOGS=$(git log "origin/$TARGET_BRANCH..$CURRENT_BRANCH" --oneline)
DIFFS=$(git diff "origin/$TARGET_BRANCH...$CURRENT_BRANCH")
PROMPT="以下のコミットログと差分情報を元に、PRのタイトル(1行)と本文(Markdown形式)を作成してください。1行目をタイトルとし、2行目以降を本文としてください。\n\nLOGS:\n$LOGS\n\nDIFFS:\n$DIFFS"
# AI出力の取得
AI_OUTPUT=$(claude -p "$PROMPT")
# 1行目をタイトル、それ以降を本文に分離
PR_TITLE=$(echo "$AI_OUTPUT" | head -n 1)
PR_BODY=$(echo "$AI_OUTPUT" | tail -n +2)
# GitHub CLIでPR作成(Draftとして作成して確認を挟む設定を推奨)
gh pr create --title "$PR_TITLE" --body "$PR_BODY" --draft
echo "Draft PRを作成しました。"
※上記スクリプトは独自の実装例です。利用する環境やAIツールのCLI仕様に合わせて適宜カスタマイズしてください。
導入・運用上のチェックリスト
AIによる自動化をチームで安全に運用するために、以下のチェック項目を確認してください。
| チェック項目 | 説明 | 評価 |
|---|---|---|
| 機密情報の除外 |
.env や鍵ファイル、個人情報が git diff に含まれていないか |
[ ] |
| Draft PRの活用 | AIが生成したPRは直接Publishせず、一度Draftとして作成しているか | [ ] |
| 人間によるレビュー | 生成されたテキスト(コミット・PR文章)を目視で確認してから確定しているか | [ ] |
| 差分サイズの制限 | 一度のPRに含まれる変更量が過大になっていないか(AIの生成精度低下防止) | [ ] |
注意点と失敗しやすいポイント
-
APIキー・機密情報の漏洩リスク
git diffの出力結果を外部AIのAPIに送信する構成にする場合、コード内に含まれるアクセスキーや個人情報が意図せず外部に送信されるリスクがあります。.gitignoreの徹底や、AIサービス側のデータ利用規約(学習に利用されないか等)を事前に確認してください。 -
ハルシネーションによる誤情報の混入
AIが変更内容に含まれていない修正点や動作確認結果をPRに記載してしまうことがあります。全自動でマージまで行うのではなく、必ず**「人間の目による最終確認(Human-in-the-loop)」**のステップを挟む運用にしてください。 -
コンテキストウィンドウ(トークン制限)の超過
大規模なリファクタリングや多数のバイナリファイル変更を行うと、git diffの出力がAIの制限を超過する場合があります。差分が大きい場合はファイル指定で絞り込むか、ブランチを細かく分ける運用を行ってください。
まとめ
GitコミットおよびPull Request作成の自動化は、定型作業を削減し開発者がコード記述や設計作業に集中するために有効な手段です。GitHub CLIや各種AI CLIツールを組み合わせることで、実務に適した柔軟なワークフローを構築できます。安全性を確保するため、機密情報対策と人間による確認ステップを組み入れた上で運用を開始してください。