AI自動コーディングの試み 〜 AIに大きな制約を 〜

お知らせ

業務システムやサービス開発では、API仕様書を作成してから実装に落とし込むまでに、少なくない時間と確認コストがかかります。仕様の読み違い、実装粒度のばらつき、レビュー時の認識差などは、開発速度だけでなく品質にも影響します。

当社ではこの課題に対して、実装にけるドキュメントと JSON 形式の API 仕様書とサンプルコードをベースに、AI を活用して実装を自動化する取り組みを行なってます。単にコード生成を行うのではなく、既存のアーキテクチャや実装ルールに沿って、API 層、サービス層、バリデーション、DBモデル、テストまでを一貫して整備する開発フローです。

AIの実装に大きな制約を

「それっぽい実装」を高速で量産させないこと

AIによる実装支援が広がる一方で、「AIに自由にコードを書かせれば開発が速くなる」という考え方には注意が必要です。

特にAPI開発では、仕様書が整っていても実装段階で解釈の揺れが発生します。

たとえば、担当者ごとに責務の置き場所が変わったり、バリデーションやエラー処理の書き方が統一されなかったりします。レスポンス項目とデータベース項目の対応漏れや、仕様書から十分に引き継がれていないテスト観点も起こりやすいポイントです。

こうしたズレは、人が実装しても、AIが実装しても同じように発生します。むしろAIは、自由度が高いほど「それっぽい実装」を高速で量産してしまうため、ルールが曖昧な状態では、あとから修正コストが膨らみやすくなります。

そのため重要なのは、AIに自由を与えることではなく、あらかじめ大きな制約を与えることです。

大きな制約①:実装ルール

当社では、AIに対して以下のような実装ルールを明文化しています。

  • どの層に何を書くか。どこに何があるか。
  • API層とサービス層(ビジネスロジック)の定義。各層での役割の明確化。
  • インターフェース定義とバリデーション定義(場所・命名規則等)。
  • データベースのエンティティとモデルの定義(場所・命名規則等)。
  • 共通ユーティリティの利用、追加。
  • コーディング規約(サンプルコードが担うかも)

このように、仕様だけでなく実装ルールまで先に固定しておくことで、AIはその範囲の中で安定したコードを生成できるようになります。

AIは万能ではありません。しかし、制約を与えられた環境では非常に強力です。

開発効率を高めるために必要なのは、「AIに任せる範囲を広げること」ではなく、「AIが迷わないように実装ルールを細かく定義すること」です。

大きな制約②API仕様書

実際にコーディング対象の仕様書をJSON形式で準備します。AI に渡す入力を単なる自然言語の依頼文ではなく、「実装に必要な構造化情報」にしていることが、今回の取り組みのポイントです。

人にお願いするよりもかなり丁寧な内容で、詳細設計レベルに近いものになるって感じです。実装をAIに任せる分、人として、ここはしっかり押さえておかないと。
最近は、詳細設計フェーズを省略する開発手法とかあったりと、その必要性が曖昧だったけどAIの台頭でそこはしっかり見直す時期に来ているかもです。

ざっと次のような内容を持たせています。

  • API層(API名、メソッド、エンドポイント、バリデーション、HTTPステータスエラー、ミドルウェア)
  • サービス層(リクエスト、レスポンス定義、エラーコード、メッセージ、処理内容、DB、外部API)
  • テスト(正常、バリデーション、エラーコード毎のシナリオ)
  • 改訂履歴
大きな役割を果たすサンプルコード

なんだかんだ言いながら、一番効くのはサンプルコードでしょうか。開発環境を一通り確認するので、コードがあれば、それに倣って実装を行うのがベースにあります。

AIに実装してもらう

チャットからお願いする

準備ができれば、チャットからお願いします。今回の環境は、VsCode・Github Copilot(一部OpenAI)でnode.js・express・vitest・typormです。

〇〇以下のドキュメント一式(*.md)とエンドポイント〇〇.jsonを参照して、エンドポイントとテストコードを実装しテストまで完了させて!

AIの処理プロセス

AIはチャットの指示を受けて実装に入ります。プロセスを見ると実装前に、なんやら色々とやってます。

処理結果

結果的に言うと、実装は完了し、ビルドも実行し、指定した5つのテストシナリオも実装、テスト実施を見事に行ってくれました。1〜2人日の実装をわずか5分で終了した。

開発環境の構造もしっかり理解し、●がついているファイルが新規作成ないし、更新が行われたものです。
上から順に見ていくと。

テストデータをDBに保存し、指定したテストコードが実装、後始末もちゃんとしている。

APIインターフェースは今回はなかったのでAIが新たに追加・バリデーションzodで生成、指定したPOSTメソッドとパス名どおりのAPIが新たに生成された。

Modelはファイル自体は存在したが、サービス層で必要なDBアクセス部分は追加で実装されていた。

サービス層も基底クラスから派生する形で仕様通りの処理が新たに生成された。

指定したミドルウェアを経由させる感じでルート定義が追加されていた。

今後の検証

今回の案件は、リファクタリング案件を対象にしている。クライアントに了承のもと、今回の試みを行っており、リファクタリング案件を選択したのは、期待値が明確だからというのが理由で最終的な品質の検証がしっかり行える点です。

目標は、バックエンドをすべてAIに実装させることです。今回はDBに更新して返すと言った単純なものだったので、バリデーションの記述先が違うなという点を除いてはほぼ完璧に近かった。引き続き、検証を続けていきたい。

  • フロント側の自動実装環境の構築
  • 人とAIが理解できる仕様書のあり方の考察(仕様書もAIが改訂)

コードレビューの重要性

人によるレビュー

完全自動コーディングであっても、最終的な品質を担保するためには、人によるレビューが欠かせません。

特にバックエンドでは、認証漏れ、権限不備、例外処理不足、SQL条件の誤り、共有コードの利用など、小さなミスが大きな障害につながります。

そのため、AIが生成したコードをそのまま本番へ反映するのではなく、Pull Requestを通じてレビューを行うことが重要です。

AIによるレビュー

最近では、実装だけでなく、Pull RequestレビューにもAIを活用できるようになっています。PRのテンプレートにAIへのプロンプトを記載しておけば、それに従いレビューを行ってくれます。

不具合の流出を防ぐのに大きな役割を果たしてくれるとても強い味方です。

基本Githubの場合はCopilotを使用すれば良いですが、弊社ではOpenAIで自由度の高いプロンプトでレビューシナリオを組む場合もあります。

おまけ : 改訂履歴を理解してくれるか?

チャットからお願いする

仕様の改訂は、欠かせないものです。仕様書のJSONに仕様の改訂と改訂履歴を盛り込みました。ちょっとAIに頼んでみます。

〇〇以下のドキュメント一式(*.md)参照し、エンドポイント〇〇.jsonに改訂があるので実装して欲しい、実装対象は、最新の日付を参照すること!

処理結果

普通に実装してくれる模様。

ポイントは、改訂なので、既存のコードを大きく変えることなく実装してもらうこと。
改訂用のプロンプトを別途用意することにより、改訂の実装の精度を上げれそうだ。

タイトルとURLをコピーしました