AIでgitワークフローを自動化 — commit、PR作成、コードレビューまで
約5分で読めます
AIでgitワークフローを自動化
Claude Codeはgit操作を自律的に行える。コミットメッセージの生成、PR作成、コードレビューまで、開発ワークフローの定型作業をAIに委譲する方法を解説する。
自動コミット: 変更内容を理解したメッセージ生成
Claude Codeでの自動コミット
# 変更を確認して適切なコミットメッセージで自動commit
claude -p "変更内容を確認してdescriptiveなコミットメッセージでcommitしてください"
# 特定のconventionに従う
claude -p "Conventional Commits形式でコミットしてください(feat/fix/docs等)"
Pythonスクリプトでの自動コミット
import subprocess
import anthropic
client = anthropic.Anthropic()
def auto_commit():
diff = subprocess.run(
["git", "diff", "--staged"],
capture_output=True, text=True
).stdout
if not diff:
print("ステージングされた変更がありません")
return
response = client.messages.create(
model="claude-haiku-35-20241022",
max_tokens=100,
messages=[{
"role": "user",
"content": ("以下のgit diffからConventional Commits形式の"
"コミットメッセージを1行で生成:\n\n"
+ diff[:3000])
}]
)
commit_msg = response.content[0].text.strip()
subprocess.run(["git", "commit", "-m", commit_msg])
print("コミット完了: " + commit_msg)
auto_commit()
自動PR作成: 変更の要約と説明を自動生成
Claude Codeでの自動PR作成
# 変更内容を要約してPR作成
claude -p "この変更のPRを作成してください。変更内容の要約をbodyに含めてください"
# テンプレートに沿ったPR作成
claude -p "PR作成: タイトルは50文字以内、bodyに変更概要と影響範囲を含めて"
Node.jsでの自動PR作成
const { execSync } = require("child_process");
const Anthropic = require("@anthropic-ai/sdk");
const client = new Anthropic();
async function createPR(baseBranch) {
baseBranch = baseBranch || "main";
const commits = execSync(
"git log " + baseBranch + "..HEAD --oneline"
).toString();
const stats = execSync(
"git diff " + baseBranch + "...HEAD --stat"
).toString();
const response = await client.messages.create({
model: "claude-haiku-35-20241022",
max_tokens: 500,
messages: [{
role: "user",
content: "以下のgitログからPR説明文を生成:\n"
+ "コミット: " + commits + "\n"
+ "統計: " + stats + "\n"
+ "フォーマット: ## 概要 / ## 変更内容 / ## テスト方法"
}]
});
const prBody = response.content[0].text;
const title = commits.split("\n")[0].substring(0, 50);
execSync("gh pr create --title '" + title + "' --body-file -",
{ input: prBody });
console.log("PR作成完了");
}
コードレビュー: AIによる多角的レビュー
Claude Codeでの自動レビュー
# 総合レビュー
claude -p "PR #142をレビュー。セキュリティ、パフォーマンス、テストカバレッジの観点で"
# セキュリティ特化レビュー
claude -p "このPRにセキュリティ上の問題がないかレビュー"
# パフォーマンスレビュー
claude -p "このコードのパフォーマンス問題を指摘して"
Pythonスクリプトでの自動レビュー
def review_pr(pr_number: int) -> dict:
diff = subprocess.run(
["gh", "pr", "diff", str(pr_number)],
capture_output=True, text=True
).stdout
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2000,
messages=[{
"role": "user",
"content": ("以下のPR diffをレビュー:\n\n"
"観点:\n"
"1. バグの可能性\n"
"2. セキュリティリスク\n"
"3. パフォーマンス問題\n"
"4. コードスタイル\n"
"5. テストの十分性\n\n"
"diff:\n" + diff[:8000])
}]
)
review_text = response.content[0].text
subprocess.run([
"gh", "pr", "review", str(pr_number),
"--comment", "--body", review_text
])
return {"pr": pr_number, "review": review_text}
GitHub Actionsとの連携
CI/CDパイプラインでのAIレビュー
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get PR diff
run: git diff origin/main...HEAD > pr_diff.txt
- name: AI Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: python scripts/ai_review.py pr_diff.txt
- name: Post Review Comment
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh pr comment ${{ github.event.pull_request.number }} \
--body-file review_result.md
ブランチ管理の自動化
自動ブランチ命名
def create_feature_branch(description: str) -> str:
response = client.messages.create(
model="claude-haiku-35-20241022",
max_tokens=50,
messages=[{
"role": "user",
"content": ("以下の説明からgitブランチ名を生成。"
"形式: feature/kebab-case(30文字以内)\n\n"
+ description)
}]
)
branch_name = response.content[0].text.strip()
subprocess.run(["git", "checkout", "-b", branch_name])
return branch_name
古いブランチの自動クリーンアップ
claude -p "マージ済みのリモートブランチを一覧表示して、main以外を削除して良いか確認"
git hooks × AI の活用
pre-commitフックでのAIチェック
#!/bin/bash
# .git/hooks/pre-commit
staged_files=$(git diff --staged --name-only)
for file in $staged_files; do
content=$(git show ":$file" 2>/dev/null)
if echo "$content" | grep -iE "(api_key|secret|password|token)" > /dev/null; then
echo "WARNING: $file may contain secrets"
exit 1
fi
done
まとめ: AIで自動化すべきgit作業
| 作業 | 従来の手動時間 | AI自動化後 |
|---|---|---|
| コミットメッセージ作成 | 1-2分 | 3秒 |
| PR説明文作成 | 5-10分 | 10秒 |
| コードレビュー | 15-30分 | 1分 |
| ブランチ命名 | 30秒 | 3秒 |
関連記事
A
Agentive 編集部
AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。