ai-driven-development legacy-migration workflow
レガシー移行で効いた「1ファイル 1 目的コミット」戦略
AI に大量の変更を一気にやらせると、レビューが回らずロールバックも難しくなります。コミットを 1 目的に切り刻む運用にしてから、差し戻しコストが目に見えて下がりました。
W
渡邊 賢 なぜ書いたか
AIに実装させると、放っておけば1コミットに20ファイル500行みたいな変更が入ってきます。レビューする側は地獄ですし、何か問題があっても「どこを戻せばいいか」が分かりません。今回は、コミット粒度を 1目的単位 に切り刻んでから運用が安定した話です。
やったこと
ルールはひとつだけです。
1コミットは「1つの変更目的」に対応する。それ以上は混ぜない。
具体的には、たとえばあるスライスでは:
- コミットA: DTOに新しいフィールドを追加
- コミットB: APIでそのフィールドを返すマッピングを追加
- コミットC: Blazor側のモデル / サービスでマッピングを受ける
- コミットD: 画面にフィールドを表示するUI
を別々のコミットとして積みます。各コミットでビルドが通る状態にしておくのがポイントです。
何が変わったか
コミット粒度を変えただけで、3つのコストが下がりました。
- レビューコスト: 差分が小さいので、Reviewer Sub Agentが追える。1コミット数十行までなら指摘の精度も上がる
- ロールバックコスト: 「UIだけ戻したい」「DTO追加だけ残したい」が即できる
- 再着手コスト: 履歴を読むだけで「何を、どの順で、なぜそうしたか」が分かる
特にレビューコストはAIベースのフローでは効きます。差分が大きすぎるとSub Agentも粒度の粗い指摘しかできなくなります。
わかったこと
- AIは放っておくと変更を巨大化させがちなので、コミット粒度は 明示的に縛らないと崩れます
- 「1ファイル1目的」は字面どおりではなく「1目的のために必要な最小ファイル群」と読むのが実用的。DTO追加にはAPIのマッピングまで含む、など
- 各コミットでビルドが通る状態を維持するのは最初は面倒ですが、これがないとbisectも難しくなります
次にやること / 未解決の問題
- コミットメッセージのフォーマットがまだ統一されていない。
feat(scope):系のプレフィクスをルール化したい - 「DTOだけ追加してマッピングは次のコミット」のような中間状態のコミットは、buildが通らない瞬間ができることもある。どこまで厳密に通すかは継続調整中
person
渡邊 賢
等差級数的Commit 運営 / ICD VIETNAM.LLC General Manager
AI駆動開発と段階的なレガシーモダン化をテーマに、日々の試行錯誤をこのブログに記録しています。
プロフィール詳細 arrow_forward似たような課題に困っている方、一緒に考えませんか。
AI駆動開発・Vibe Coding・レガシーマイグレーションに関するご相談を受け付けています。