第1弾で「AIは地頭が良く自信過剰な新人」という比喩を、第2弾で「ハーネスとの付き合い方」を書いてきました。今回は、AIとどう開発を進めるか、ワークサイクルの話を整理しておきます。
最近、AI-DLC、cc-sdd、GitHub Spec Kitなど、AIとの開発プロセスを支援するフレームワークが増えてきました。それぞれ違ったアプローチで、どう使い分けるかを考えています。

2つのアプローチ

戦略A: AI主体型

PdMやマネージャーがAIを使って、要件定義から実装まで進める。エンジニアの役割を最小化し、AIで開発のスループットを上げようとする。AI-DLCのようなフレームワークと相性が良い。AIがAWSなどのインフラに接続して調査・デプロイまで担う、という発想もある。

ただ、AI-DLCは導入に覚悟がいると言われます。プロセス全体をAI前提で組み直す必要があるし、ロールの再定義、ドキュメント運用の整備、ツールチェーン── 一気に揃えないと中途半端になりがちです。一部のプロジェクトだけ部分導入、というのが難しい性質のフレームワークなので、組織全体の作り変えを覚悟するかどうかの話、と言えそうです。

戦略B: エンジニア主体型

エンジニアがAIをツールとして使い、PMが要件をまとめる(AIを使うこともある)。プロジェクトやケースに応じて、cc-sddやGitHub Spec Kitのようなspec-drivenの仕組みを部分的に取り入れる。リポジトリ内のドキュメントは必要最低限。

どちらも実在する戦略で、それぞれメリットがあります。ただ、戦略Aには構造的に注意したい点がいくつかあるように感じています。

戦略Aへの問題提起

長文ドキュメントのメンテ問題

AI-DLC的なアプローチでは、各フェーズで詳細なドキュメントが生成されます。要件定義書、設計書、仕様書── これらがGitに入る。

問題は、ドキュメントは作るより維持するほうが難しいということ。コードが変わったときに、ドキュメントを更新する仕組みがないと、すぐ古くなります。AIに「ドキュメントを更新して」と頼んでも、全文書き直しに近い差分が出ることがあって、レビュー不能になりがち。

結果として、ドキュメントが残っているけど誰も読まない、実態と乖離している状態になる。「ドキュメントがある安心感」で、実態の理解が遠のくこともあります。

エンジニアを不要にできるか

「エンジニア不要」にできるか、という観点もあります。
短期的には、ハーネス調整、レビュー、AIが詰まったときの突破口、既存システムとの整合性、インシデント対応── これらの仕事は残ります。モデルが進化すれば一部は減るかもしれませんが、判断と責任を伴う部分は最後まで残ると思います。

なので「不要」というより、人数は少なくて済むけど、求められるレベルは上がる、という方向に進むのかなと感じています。定型的な実装はAIに任せて、エンジニアは判断・設計・レビュー・統合に集中する。少人数でも大きな成果を出せるようになる代わりに、コードを書くだけの仕事は減っていく

そして、「動いている」と「健全に動いている」は違います。性能、セキュリティ、保守性、拡張性── これらはコードを読まないと分からない。読める人を組織に残しておかないと、3年後、5年後に深い負債になりかねません。これは前回の記事でも触れた論点です。

AIに本番権限を渡すこと

AIがインフラに接続できると便利な場面はあります。たとえばログを見たり、状態を調査したりする読み取り権限は、デバッグや障害対応で重宝しそうです。権限を参照のみに縛れば、リスクも限定できる。

一方、書き込み権限(設定変更、デプロイ、データ操作など)を渡すのは、設計次第ではアリですが、設計を省略して権限だけ渡すのは危険かなと思います。デプロイなどは、GitHub Actionsで自動化したものを人間がトリガーする形が、当面は現実的かもしれません。

何を、どこまで、どんな条件で実行できるか。不可逆な操作に人間ゲートはあるか。ロールバック手段は確立されているか。監査ログは取れているか── これらが揃わないまま権限だけ渡すと、事故待ちです。

戦略Bの利点と注意点

戦略Bは、エンジニアが判断と責任を持つので、コードベースの理解者が組織に残るという利点があります。ドキュメントが軽いので、メンテ負荷も低い。
ただ、注意点もあります。

規模が大きくなると属人化: ドキュメントが少ないと、特定のエンジニアにしか分からないコードになりがち。少人数なら問題にならないけど、人が増えると課題になる。

PMとエンジニアの認識合わせ: ドキュメントが軽いと、口頭で補う必要が出てくる。コミュニケーションコストが上がる側面はある。

AIで効率化できる範囲の取りこぼし: エンジニア主体だと、AI-DLC的な「要件定義をAIと進める」「ドキュメント自動生成で省力化」みたいな部分の恩恵を取りこぼすかもしれない。

戦略Aと戦略Bは極端な対比で、実際には間のどこかでバランスを取るのが現実的かなと思います。AI-DLCも、要件を詰める段階で使うなら有効そうですし、cc-sddやGitHub Spec Kitもケースを選べば便利です。

プロセスに合わないタスク

ワークサイクルを考えるとき、タスクの性質も重要な軸です。
たとえば、バグ修正にAI-DLC的なプロセスを当てはめるのは、かなり無理があると思います。バグ修正の特性は、要件は明確(直す)、方針は原因次第(調査しないと決まらない)、治るとは限らない(やってみないと分からない)、というもの。プロセスに乗せて上から順に進める発想と合わない。原因を調査しながら方針が見えてくるので、手元でAIと対話しながら試行錯誤するほうが速い

しかも、AIは確率的に動くので、同じモデルで何度試しても解けない問題が、別のモデルだとあっさり解けることがあります。プロセスを丁寧に進めるより、色々試して当たりを引くほうが、結果として早いケースもある。

プロセスが合わないのは、バグ修正だけではありません。

  • バージョンアップ(依存ライブラリ、フレームワーク): やってみないと何が壊れるか分からない
  • リファクタリング: 動作を変えずに構造を改善する作業で、やりながら設計が見えてくる
  • パフォーマンスチューニング: 計測しないとボトルネックが分からない
  • セキュリティ修正: 影響範囲を調べないと方針が決まらない
  • 障害対応: スピード勝負で、プロセスを踏む余裕がない
  • POC、プロトタイピング、技術検証: 捨てる前提で、動くものを早く作るのが目的

共通するのは、探索的・試行錯誤型のタスクだということ。要件が定まらない、方針が動的に決まる、結果が予測できない── こういうタスクは、手元でAIと対話しながら進めるほうが合います。

逆に、プロセスに乗せる価値があるタスクは、新機能開発、大規模な改修、複数人で協調するタスク、後で振り返る必要があるタスク、規制対応で記録が必要なタスクなど。マイグレーションのような、失敗時の被害が大きいタスクも、プロセスで慎重に進める価値があるかもしれません。

新機能開発はプロセス、バグ修正は手元で試行錯誤── タスクの性質で使い分けるのが大事かなと思います。

複数人で開発する場合

ここまで個人開発寄りの話をしてきましたが、複数人で進める場合は前提が変わります。
複数人で開発する場合、タスク分割を明確にするのが前提(いつもと同じ)です。誰が何を担当するか、どこに依存があるか、どの順序で進めるか── これが曖昧だと、コンフリクトが起きる、認識がズレる、手戻りが増える。スクラムで大きすぎるタスクを分割するのと同じ発想です。

タスク分割にもAIを使うのが現実的かなと思います。「この機能をどう分けるか、どこに依存があるか」をAIに整理してもらって、人間がレビューする。これは思考の整理として有効ですし、各タスクの入力・出力・成功条件を明確にしておくと、その後の作業が回りやすい。

ただ、ここでも過剰分割は逆効果(いつもと同じ)です。細かく分けすぎると統合のオーバーヘッドが増えるし、各タスクの文脈情報が薄くなる。必要な粒度で分けるのが大事かなと思います。

複数人で進める場合のもう一つの観点は、判断の記録です。手元の対話で進めると暗黙知が流れますが、複数人だとそれを共有する手段が要る。長文ドキュメントは負債になりがちなので、ADR(Architecture Decision Record)のように重要な決定だけ短く残す仕組みがいいのかもしれません(まだ評価できていませんが)。

私の感触

色々考えた結果、私自身は手元でAIと対話しながら進めるスタイルが、今のところしっくりきています。

理由はシンプルで、フィードバックループが短いから。AIが何か出してくる → 違和感があれば即座に指摘 → AIが修正 → また指摘── このループが密だと、自分の頭の中の判断基準が対話の中で明確になっていきますし、ドキュメント化されない暗黙知が大量に流れて、結果的に質の高いコードになる気がしています。

先にドキュメントを作ってから進めるのは、正直手間に感じます。PMから要件をもらうならいいけど、自分で書くのは省略したい。
ただ、これは個人開発と少人数のチーム向けのスタイルです。規模が大きくなったり、複数のステークホルダーがいたり、規制対応が必要になったりすると、もっとプロセスを入れる必要が出てくると思います。そのときは、重要な判断だけADRなどで残すのが、ドキュメント負債を最小化する現実解かなと考えています。

まとめ

AIとのワークサイクルは、タスクの性質、人数の規模、変更頻度、規制要件などで決まる、というのが今の結論です。

  • 一律のプロセスはない。タスクごとに使い分ける
  • バグ修正、リファクタ、バージョンアップなど、探索的・試行錯誤型のタスクはプロセスより手元の対話が合う
  • 新機能開発や大規模改修は、プロセスに乗せる価値がある
  • 個人開発・少人数なら対話中心、規模が大きくなったらプロセスを入れる
  • ドキュメントは「読まれる範囲」に絞る。長文より、判断の記録(ADRなど)
  • AI主体型は便利だが、ドキュメントメンテとエンジニアの役割について考えておきたい

これも振り返ってみると、特に新しい話ではないなと感じます。スクラムでもウォーターフォールでも、適材適所でプロセスを使い分けるのは昔からの話です。AIが入ったことで、ループが速くなり、ドキュメント生成が容易になっただけで、判断の本質はあまり変わらないんじゃないかなと。

道具がAIになっても、プロジェクトの性質を見て、適切なプロセスを選ぶのは、結局のところ人間の仕事かなと思っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です