こんにちは、フリーランスエンジニアの太田雅昭です。
見積もりが難しくなった
AI駆動開発を本格的に取り入れてから、開発速度が劇的に変わりました。これはとても喜ばしいことなのですが、フリーランスとしての見積もりが一気に難しくなりました。
今後、見積もりの競争が起こることが見込まれます。クライアントはより安い開発者を求めますので、AIが無かった頃の見積が通用しなくなってきます。
しかし、見積もりを劇的に下げるわけにはいかない事情もあります。
開発比較
AI時代では、これまでと開発事情が大きく異なります。
| これまで | AI時代 | |
|---|---|---|
| 設計 | 人が決める | 人が決める(AIは補助) |
| コーディング | 人が書く | AIが大半を生成 |
| テスト | 人が書くか省略されがち | AIで楽になるため増やしやすい |
| リファクタリング | 後回しになりがち | AIで回せるので実施しやすい ただし必要な数はかなり増える |
| レビュー | 人が読んでコメント | AIが初稿レビュー・人が最終確認 |
| セキュリティ | レビューで担保 | AIの挙動により注意が必要 |
| 必要なスキル | 実装力 | 実装力 + AIを使いこなす力 |
| 品質の担保 | 実装に時間をかける | 余った時間を品質向上に回す |
コーディング・テスト・リファクタリングはAIにより大幅に短縮されますが、その分レビューに時間がかかる様になります。UIは細かい部分の実装を入れやすくなり、ユーザーの使い勝手は向上します。一方でAIが問題解決のためにロジックにショートカットを入れてしまったり、重要な部分を変更したりすることにより、セキュリティリスクは高まります。また冗長なコードになりやすいため、リファクタリングの必要性も上がります。
設計力
AI駆動開発は、設計力が最も重要です。これはコード開発経験が豊富なほど有利で、逆に言えば、現段階ではコードを書いた経験のない状態ではAI駆動開発は難しいです。
以下の点に注意する必要があります。
具体的な指示
曖昧な指示でもある程度AIは考えて結論を出しますが、結果を優先するあまり、思わぬ方向に舵を切られることもあります。そのため人間が具体的な指示を出す方が、良い結果を導けます。
壊れにくい設計
AIが既存のコードを壊してしまうこともあります。機能Bを頼んだはずなのに、機能Aが壊れてしまい、修正に修正を重ね、全体が煩雑なコードになっていくことも往々にしてあります。これを防ぐため、層で分離したり機能ごとにまとめたりするリファクタリングは常に行う必要があります。
検証の自動化
コード量が増えると、それをレビューする人間の負担はかなり増えます。そのため検証の自動化やテストの可視化などの工夫が必要となります。
AIコーディングで誰でもできるように見えますが、実態はまだまだ人の介入が必要であり、人的コストの面は無視できません。
コード量 = 負債
コードの量は、それ自体が負債となります。これはAIに関係なく以前から存在する問題です。
AIによってコードを大量生成できるようになった今、「とりあえず動くコードを素早く量産する」ことが容易になりました。しかしこれは同時に、負債の量産でもあります。
コードは書いた瞬間から負債であり、すべてメンテナンスコストを持ちます。バグが埋まっている可能性、仕様変更への対応、依存ライブラリのアップデート、セキュリティパッチ。コードが増えれば増えるほど、これらのコストは増大します。
AIが書いたコードも例外ではありません。むしろAIは人間が書くよりも冗長なコードを生成する傾向があります。同じことを複数箇所で繰り返す、不要なユーティリティ関数を作る、使われないオプション引数を生やす。一見動いているように見えて、長期的なメンテナンス性が低いコードが生まれやすいです。
そう考えると、「早く実装できる」ことと「早く終わる」ことは別物です。
単純な見積ができない
クライアントは、AI利用によるコスト削減を望んでいます。しかしコード負債の関係から、単純にコスト削減してしまうと、後で泣きを見る可能性があります。
コード量が多いとメンテナンスコストが跳ね上がります。ちょっとした機能追加・修正でも、原因究明に時間がかかる様になります。AIは大量のコードを書いてくれますが、問題を常に解決できるとは限りません。AIで解決できない問題は、人間が代わりを担わないといけないのです。
これまでは見積もりとコード量はある程度バランスが取れていたと言えます。人が経験則で得た見積もりで成立していたところが、今後そのバランスは崩れます。見積もりよりもコード量の割合が大きくなります。それはすなわち、見積もりに対する負債が大きくなることを意味します。
まとめ
AI時代の見積もりは、単純にスピードだけで語れない複雑さを抱えています。
- コーディングは速くなったが、負債管理のコストは増える
- 見積もりを下げすぎると、後のメンテナンスで自分が苦しむ
- 設計・レビュー・リファクタリングにかかる人的コストは、見積もりに明示的に含めるべき
「AIで工数が減ったから安くします」という単純な話にしてしまうのは危険です。むしろ見積もりには、AIが生成したコードをきちんと管理・維持していくコストを含めて考える必要があります。