システム開発・PM向けシリーズの第3回です。シリーズの全体像は第1回「開発現場における生成AIの現在地」をご覧ください。

前回の第2回「要件定義と設計をAIで加速する」では、上流工程(要件定義・設計)においてAIを「思考のパートナー」として活用し、仕様の抜け漏れや手戻りを防ぐノウハウについて解説しました。

今回は、現場のエンジニアにとって最も関心が高い「実装(コーディング)およびテスト(品質保証)」のフェーズにスポットを当てます。

GitHub CopilotやCursor、Claudeといった開発アシスタントツールを現場に組み込み、開発スピードを大きく高めつつ、潜在的なバグや脆弱性をどう防ぐのか。プロの現場で実践されているリアルな活用技術を解説します。

1. 実装フェーズにおける最大の敵「ボイラープレートコード」の排除

開発現場において、エンジニアの貴重な時間と集中力を最も奪っているのは何でしょうか?

新しいアルゴリズムの考案でも、高度な設計でもありません。「書くことが決まっている定型コード(ボイラープレートコード)」のタイピング作業です。

  • データベースのCRUD(作成・読み出し・更新・削除)を処理する共通関数
  • Web APIの型定義(TypeScriptのInterfaceやDTOクラス)
  • 画面入力値のバリデーション(チェック)ロジック
  • 例外処理(Try-Catch)やログ出力の定型文

GitHub Copilotなどのインライン補完型AIは、ファイル内のコンテキスト(前後のコードやコメント)を解析し、エンジニアが数文字打った瞬間に「次に書きたいコード」を予測して先回り提示してくれます。

これにより、タイピングの手数が激減するだけでなく、「構文を調べるためにブラウザとエディタを行き来する時間」も大幅に削減され、エンジニアは高度な集中状態(フロー状態)を維持したままコーディングに没頭できるようになります。

2. 実践①:コメント駆動開発(Comment-Driven Development)

AIコーディングの成果を最大化する強力な手法が「コメント駆動開発」です。

コードを書き始める前に、まず「どのような処理を行いたいか」を日本語のコメントとして丁寧に記述し、それにAIへコードを生成させるアプローチです。

💡 実践例(TypeScriptのケース)

以下のようにエディタ上で日本語コメントを記述します。

// 【関数名】calculateDiscountedPrice
// 【概要】商品の税抜価格と会員ランクから最終支払金額(税込)を計算する
// 【ルール】
// 1. 会員ランクが"GOLD"の場合は20%引き、"SILVER"の場合は10%引き、それ以外は割引なし
// 2. 割引後の金額に消費税10%を加算する(端数は切り捨て)
// 3. 入力価格が0以下の場合はRangeErrorをスローする
function calculateDiscountedPrice(price: number, memberRank: string): number {
  // ここでTabキーを押すと、AIが上記の仕様に沿ったコードを補完生成する
}

「AIにどのような前提でコードを書かせるか」をコメントとして明記するため、設計意図がコード上に自然と残り、後から他のエンジニアが読んでも理解しやすいコードになります。もちろん、生成されたコードがコメントの仕様どおりに動くかは、次章の単体テストで必ず確認しましょう。

3. 実践②:単体テスト(Unit Test)自動化とエッジケースの網羅

実装以上に時間がかかり、プロジェクト終盤でスケジュールを圧迫しがちなのが「テストコード(単体テスト)の作成」です。

「テストを書く重要性は分かっているが、工数が足りずに疎かになってしまう…」という現場の悩みに対し、AIは最強の威力を発揮します。

💡 使えるプロンプト・指示手順

作成した実装コードを選択し、AIチャットやプロンプトで以下のように指示します(例はJavaのJUnit 5を想定しています。Jest / PyTestを使う場合は、@DisplayNameやMockitoの部分を各フレームワークの書き方に置き換えてください)。

あなたは品質保証(QA)に厳しいシニアテストエンジニアです。
以下の【実装コード】に対する、JUnit 5(またはJest / PyTest)を用いた単体テストクラスを作成してください。

【テスト作成の制約条件】
1. 正常系だけでなく、以下の異常系・エッジケース(境界値)のテストメソッドを必ず網羅すること。
   - 入力値がnull、空文字、または定義外の文字列の場合
   - 数値パラメータが0、負の数、または上限最大値(MAX_VALUE)の場合
2. 各テストメソッドには、何を検証しているかが一目でわかる日本語のテスト名(@DisplayName等)を付与すること。
3. モック(Mockito等)が必要な外部依存処理がある場合は、適切にモック化すること。

【実装コード】
(対象のコードを貼り付け)

この指示を行うことで、人間が頭を悩ませながら洗い出していたテストケースが短時間で揃い、テストカバレッジ(網羅率)80%〜90%といった目標値も達成しやすくなります。
ただし、AIは「今の実装の動き」をそのまま正解としてテストを書いてしまうことがあります。期待値が本来の仕様と合っているかは、必ず人間がレビューしてください。

4. 実践③:レガシーコードの解説とリファクタリング

「過去の担当者が残した、コメントも仕様書もない複雑な長文コード」の修正は、エンジニアにとって最もストレスがかかる作業です。AIはこうしたレガシーコードの解読にも威力を発揮します。

💡 解読とリファクタリングのプロンプト

以下の【レガシーコード】を解析し、以下の2点を行ってください。

1. 【コードの解説】
   このコードが何を行っているのか、処理の流れをステップ・バイ・ステップで分かりやすい日本語で解説してください。
2. 【リファクタリング案】
   - 可読性と保守性を高めるため、関数を適切に分割したコードを提示してください。
   - 処理のパフォーマンス(計算量)やメモリ効率を改善できる点があれば修正してください。
   - セキュリティ上のリスク(例:SQLインジェクションやメモリリーク等)がないか評価してください。

【レガシーコード】
(解読したい古いコードを貼り付け)

5. AIコーディングにおける「3大リスク」と防衛策

AIを活用した実装・テストは開発速度を劇的に高めますが、無条件に信じ込むと深刻な事故につながります(AIの出力を鵜呑みにしてしまう心理については第0回でも解説しています)。プロとして以下の3大リスクと対策を厳守してください。

リスク要因潜んでいる危険性現場での防衛策(ガバナンス)
① 脆弱性コードの混入AIは過去の古い不完全なコードも学習しているため、古い暗号化方式や脆弱な処理を出力することがある。SonarQubeなどの静的コード解析ツールによる自動レビューをCI/CDに組み込み、人間が最終確認する。
② ライセンス汚染パブリックリポジトリのコードと酷似したコードが自動生成され、著作権侵害(GPL等)になるリスク。AIツールの管理者設定で「パブリックコードに一致する提案(Suggestions matching public code)」を「ブロック」に設定する(参考:GitHub Docs)。
③ ブラックボックス化コードの仕組みを理解しないままコピペで組み込み、障害発生時に誰も修正できなくなる。コードレビュー時に「AIが作った理由」を説明できないコードはマージしない文化を徹底する。

6. まとめ:AIは開発チームの「最強のペアプログラマー」

実装・テストフェーズにおけるAIの正しい位置づけは、開発者の代わりにすべてを行う魔法ではなく、「24時間いつでも隣でコードを補完し、テストケースを提案してくれる超優秀なペアプログラマー」です。

  • 定型コードの作成や単体テスト作成 ➔ AIに任せて爆速化
  • アーキテクチャ設計・セキュリティ検証・レビュー ➔ 人間が全責任を持って判断

この明確な役割分担をチーム内で確立することこそが、開発速度とシステム品質を最高の次元で両立させる鍵となります。

次回(第4回)は、プロジェクト管理の現場に踏み込みます。「PM/PMO業務におけるAIアシスタントの具体的な使いどころと進捗管理の自動化」について詳しく解説します!

WAI SYSTEMSでは、AI活用を前提としたシステム開発や、開発プロセス改善のコンサルティングも承っています。「自社の開発現場にどう取り入れればいいか分からない」という方は、お気軽にお問い合わせください。