2025年2月10日月曜日

AIコーディングの現在地点

こんにちは。横井です。

 少し時間が空いてしまいましたが、本年もよろしくお願いします。

さて、みなさん生成AIは使っていますか? 私はここ2ヶ月ほどAIコーディングに没頭していましてAPI利用で数百ドル溶かしました。(笑)

という事で、汗と涙と小遣いの結晶をご覧下さい。


状況を説明しますと

環境はVSCode + RooCodeプラグインでLLMはClaude Sonnet 3.5です。

ムービーの最初の方でドキュメントを参照していましたが、このドキュメント(設計書)もAIに書いて貰っています。設計書のレビューを私が行い内容がOKになったら、次に開発計画としてToDoリストも作成して貰っています。このToDoリストはマークダウン形式のToDoになっているので、この後AIがコーディングを行っていく時の進捗管理用資料にもなっています。

まず、ここまで来るのに私はプロンプトとして要件(作りたいもののゴール)しか指示していません。特に最近はキーボードでパチパチ入力もせず、マイクを使って音声入力でやりたい事を入れています。(もちろん音声認識の誤字脱字はあるので手直しはしますが)

ムービーの説明に戻りますが、AIが検討したToDoリストは詳細化はしてありますが、順序がフロントエンド→バックエンドとなっていましたので「タスクの順序はアーキテクチャーのレイヤーごとに依存関係を意識して、機能別に作り直してください」といったレビュー結果をフィードバックしました。

結果的に出来上がったドキュメントは以下の通りです。

ここまで出来上がるとようやくコーディングに入ります。プロンプトで「ではコーデイングを開始してください。todoリストの順番に実装をお願いします。実装は1.仕様の確認、2.コーディング、3.結果の確認またはテスト、4.todoリストのチェックをonを一つのサイクルとしてステップごとにコーデイングして下さい。」といった主旨の指示を出すと、以降はAIが計画に沿ってコーディングを行い、作業進捗もtodoリストにチェックマークとして更新してくれます。また、テストもタスクに入っているのでテストコードのコーディングとテストの実行もしてくれます。

ムービーは時間の関係でAPIの呼び出し時間はカットしています。また、これだけ自動コーディングをさせるとAPIの利用制限に引っかかってしまうので、そのリトライ待ち時間もカットしています。

今回のコーディングはテーブルが既に作成されている状況で参照する画面(一覧と詳細)を追加実装するという内容でした。ドキュメントのPhase6.3とあるように今までフェーズ1から始まって6までブラッシュアップをしてきた状態です。

色々とAIコーディングを試してきた結果としては今時点(2025年1月末)としては最高難易度のコーディングが実現出来ていると思います。

AIコーディングについて色々ノウハウが溜まったので、いくつかご紹介します。

  • VSCodeのプラグインとしてはRooCode( Clineのフォークモデル )を使っていますが、ArchitectやAskなどのモード切替は使っておらずcodeモードのみで要件検討や計画立案もしています
  • LLMはコーディングに使うのであれば Claude-Sonnet-3.5の一択です。(o4やGemini2.0、DeepSeekなども試しましたが、私の使い方にはマッチしませんでした)
  • AIコーディングに限りませんが、AIに仕事をしてもらうには要件(ゴール)を明確に定義する必要があります。曖昧さがある場合はAIを使って壁打ちしながらゴールの明確化をします。
  • どう実現するか? (方法や手順) はAIに考えさせます。もちろん、検討結果に曖昧さや選択肢を提示してきた場合は、更に詳細化や決め打ちの指示を出します。
  • 実際のコーディングが可能で進捗管理が出来るようなToDoリストをマークダウン形式で作成させます。
  • 以上の様な開発準備が完了するまでは一切コーディングは認めません。
  • 機能追加や仕様変更する場合は、既存の機能(コード)の変更禁止や変更の影響の最小化などを制約条件として指示します。
以上の様な段取りを踏まえるとほぼオートマチックに全量をコーディングし、単体テスト結果による修正までしてくれます。いかがでしょうか?

もちろん、日々新しいツールや方法が出てきますし、LLMのモデルも進化が著しいので、明日には陳腐化・コモディティ化しているかもしれません。そういう意味でも「現在地点」だと思います。


この方法で我々のビジネスフィールドである業務システムの開発が出来るか? と聞かれれば「今時点ではNOです」と答えます。AIコーディングの方法論としては一つ確立出来ていると思っていますが、ビジネスドメイン、企業モデル、業務フロー、業務ルールなど、システムが対象とする情報はあまりに膨大でLLMに全体像を把握させる仕組みがまだ思いつきません。今のところ、AIのAPIを呼び出して作業をさせるのは中間記憶によるコンテキストの引継ぎはありますが、あくまでもINPUT/OUTPUTのトークンボリュームに依存しますし、恐らくそういった方法とは別な方法で業務要件をLLMに伝達する必要があります。

では。

0 件のコメント:

コメントを投稿