45395 - シコウサクゴ -

Git-Flowを1人で回す:AI駆動開発におけるブランチ戦略と事故防止

2026-04-03
AI駆動開発
AI駆動開発
Claude Code
Git
Git-Flow
ブランチ戦略
Last updated:2026-04-05
9 Minutes
1617 Words

個人開発でGit-Flowは過剰でしょうか? 私もそう思っていました。しかし本番稼働中のシステムに新機能を追加し続ける運用では、ブランチ管理の欠如が直接的な事故につながりました。

本記事では、1人開発でGit-Flowを導入し、Claude Codeと組み合わせて運用している実践例を記録します。特に「mainへの直接コミット禁止」がどれだけの事故を防いだかを説明します。


なぜGit-Flowが必要になったか

事故:mainブランチへの直接コミットで本番停止

開発初期はmainブランチ1本で運用していました。ある日、Claude Codeで機能改善をしてコミットし、本番環境でgit pullしました。

1
$ git pull
2
$ # 本番のlaunchdジョブが次回実行時に新しいコードを読み込む
3
$ # → ImportError で全ジョブ停止

原因は、モジュール名の変更を全ファイルに反映していなかったことです。Dev環境ではテスト対象のファイルだけが読み込まれるため問題ありませんでしたが、本番ではlaunchdジョブ経由で別のファイルも読み込まれ、そこでImportErrorが発生しました。

この事故で「mainは本番と直結しているのだから、直接コミットしてはいけない」と学びました。


ブランチ構成

1
main
2
│ ← 本番環境(launchdが実行するコード)
3
4
├── pre
5
│ ← Pre環境(Dry-Run検証)
6
7
└── develop
8
│ ← 開発統合・テスト
9
10
├── feature/new-11-trailing-stop
11
├── feature/rng-a1-regime-detection
12
└── feature/us-b1-vix-tail-insurance
ブランチ用途マージ先
main本番環境
prePre環境Dry-Runmain(Go判定後)
develop開発統合main(リリース時)
feature/*個別施策develop
hotfix/*緊急修正main + develop

運用スクリプト

ブランチ操作をスクリプト化して、ミスを防ぎます。

Terminal window
1
# 新機能開発の開始
2
./scripts/git-new-feature.sh trailing-stop
3
# → develop から feature/trailing-stop を作成
4
5
# リリース
6
./scripts/git-release.sh v3.8.31
7
# → develop を main へマージ + タグ作成
8
9
# 緊急修正
10
./scripts/git-new-hotfix.sh fix-import-error
11
# → main から hotfix/fix-import-error を作成
12
# → 修正後、main と develop の両方にマージ

手動でgit checkoutgit mergeを打たずに済みます。タイプミスやマージ先の間違いを防止できます。


Claude Codeとの連携

CLAUDE.mdにブランチルールを記載

1
## Git-Flow ブランチ戦略
2
- main への直接コミット禁止(緊急 hotfix 除く)
3
- 新機能開発: ./scripts/git-new-feature.sh <name> で feature/* を作成
4
- リリース: ./scripts/git-release.sh <version>
5
- 緊急修正: ./scripts/git-new-hotfix.sh <name>

これにより、Claude Codeに「コミットしてください」と言ったとき、mainブランチにいる場合は自動的に警告します。

AIがマージ先を間違える問題の対策

Claude Codeに「PRを作成してください」と言うと、デフォルトではmainに向けてPRを作ろうとすることがあります。

1
# CLAUDE.mdに追記
2
- feature/* ブランチの PR は develop に向けて作成すること
3
- main への直接 PR は hotfix/* のみ許可

CLAUDE.mdの即時同期問題

CLAUDE.mdは全ブランチで参照されます。feature/*ブランチでCLAUDE.mdを更新した場合、maindevelopにも反映しないと、別のセッションで古いルールが適用されてしまいます。

1
# CLAUDE.md改訂時の即時同期ルール
2
CLAUDE.md / .wbs/CURRENT.md を改訂した場合、
3
main・pre・develop の全ブランチに反映すること。
4
5
git checkout main && git checkout feature/xxx -- CLAUDE.md && git commit
6
git checkout develop && git checkout feature/xxx -- CLAUDE.md && git commit

hotfixフロー:本番障害の緊急修正

実際のhotfix事例

2026年3月の深夜、Slack通知で本番障害を検知しました。特定のAPIレスポンスのフォーマットが変わり、パースエラーが発生していました。

Terminal window
1
# 1. hotfixブランチ作成(mainから分岐)
2
./scripts/git-new-hotfix.sh fix-api-response-format
3
4
# 2. Claude Codeで修正
5
# 「APIレスポンスのフォーマット変更に対応してください。
6
# 変更前: {"data": {...}}
7
# 変更後: {"data": [{...}]}
8
# エラーログ: [貼り付け]」
9
10
# 3. テスト実行
11
pytest tests/ -v
12
13
# 4. mainにマージ(直接)
14
git checkout main && git merge hotfix/fix-api-response-format
15
5 collapsed lines
16
# 5. developにも反映
17
git checkout develop && git merge hotfix/fix-api-response-format
18
19
# 6. 本番に反映
20
ssh production "cd data-processing && git pull"

hotfixはmainから分岐し、maindevelopの両方にマージします。developへの反映を忘れると、次回リリース時にhotfixの修正が上書きされて再発します。


PRテンプレートの標準化

Claude Codeが作成するPRには、以下のテンプレートを使います。

1
## Summary
2
- [1-3行の変更概要]
3
4
## Test plan
5
- [ ] ユニットテスト PASS
6
- [ ] 回帰テスト PASS(全エンジン合計 7,000+テスト)
7
- [ ] mypy型チェック PASS
8
- [ ] Dry-Run実行確認(Pre環境で)

テスト件数の明記

PRに「4,150件 PASS」と具体的な数字を書くことで、レビュー時にテストの網羅性が一目でわかります。数字がないと「テストは通った」が信頼できません。


バージョニング

セマンティックバージョニング(SemVer)を採用しています。

1
v3.8.31
2
│ │ │
3
│ │ └─ パッチ: バグ修正・小改善
4
│ └─── マイナー: 新機能追加(後方互換あり)
5
└───── メジャー: 破壊的変更

リリーススクリプトが自動的にタグを作成します。

Terminal window
1
./scripts/git-release.sh v3.8.32
2
# → develop を main にマージ
3
# → git tag v3.8.32 を作成
4
# → push

学んだこと

1. 個人開発でもmainへの直接コミット禁止は効果がある

「自分しかいないのだからmainに直接コミットしても問題ない」は間違いです。mainは本番と直結しているため、テストされていないコードが入ると即座に事故になります。

2. ブランチ操作はスクリプト化する

git checkoutgit mergegit tagを手打ちすると、ブランチ名やマージ先の間違いが起きます。スクリプト化すれば、操作ミスがゼロになります。

3. CLAUDE.mdの全ブランチ同期は忘れやすい

feature/*でCLAUDE.mdを更新しても、main/develop/preへの反映を忘れがちです。チェックリストに「CLAUDE.md同期」を入れる必要があります。

4. hotfixはdevelopにも反映する

hotfixをmainだけにマージすると、次回リリース時にdevelopの古いコードで上書きされます。hotfixは常にmain + developの両方にマージします。


まとめ

個人開発のGit-Flowで重要なのは以下の3点です。

  1. mainへの直接コミット禁止: 本番 = mainなので、develop経由でのみ変更を入れます
  2. 操作のスクリプト化: git-new-feature.sh / git-release.sh / git-new-hotfix.sh でミスを排除します
  3. CLAUDE.mdの全ブランチ同期: AIへの指示書はどのブランチでも最新でなければなりません

「1人だからGit-Flowは不要」ではなく、「1人だからこそミスを防ぐ仕組みが必要」です。

Article title:Git-Flowを1人で回す:AI駆動開発におけるブランチ戦略と事故防止
Article author:45395
Release time:2026-04-03

記事へのご質問・ご感想をお聞かせください

フィードバックを送る