工房案内図CCAGI SDK v4.22.46

仕組み

AGIテスト駆動開発 — 要件定義から公開までを8つの工程で通す作り方。

「とりあえず動くアプリ」は、
なぜ数日で壊れるのか。

答え

テストが書かれていないから。

理由はこれ一つです。見た目が整っていても、動くことを機械が確かめた記録が無ければ、次の変更でどこが壊れたか誰にも分かりません。このページは、その一点をどうやって埋めるかの説明です。

AIに日本語で指示するだけでアプリが数分ででき、公開から数日で重大なバグが見つかる。2024年から2025年にかけて、この繰り返しがあちこちで起きました。以下は、そうならないための道具立てを、原理から順に見ていくものです。

フェーズ
8
書類
11
バグの種類
3
本番での修正コスト
10,000

8フェーズを見る 手を動かす手順は「はじめ方」へ

第1章

バグは3種類しかない

バグとは、期待される動作と実際の動作のずれのことです。ひと口にバグと言っても、生まれ方は3通りに分かれます。どれなのかが分かれば、どこを直せばいいかも決まります。下のタブを押して切り替えてください。

仕様書・設計書に対するバグ

そもそもの設計が間違っている、あるいは何も書かれていない場合です。コードそのものに問題が無くても起きます。仕様書が曖昧だったり記載が抜けていたりすると、完璧に実装されたコードでも、使う人の期待と違う動きをします。

例:ECサイトの要件定義に「ユーザーは商品をカートに追加できる」と書いてあるのに、カートの合計金額を計算するルールが書かれていない。すると作る人が自分の解釈で実装することになります。

締め切り通知機能で起きること

タスク管理アプリの要件に「締め切り通知機能」とだけ書かれていた場合、次の3つが決まっていません。

  • ?締め切りの何時間前に通知するのか
  • ?通知方法はメールか、プッシュ通知か
  • ?タイムゾーンはどう扱うのか

ここが書かれていなければ、作る人ごとに実装が変わります。そして後から「バグです」と報告されます。

多くの開発者は、バグが出たとき「コードのどこが間違っているか」だけを探します。この3分類を知っていれば、原因を効率よく特定できます。AGIテスト駆動開発では、Phase 1 の要件定義、Phase 2 の設計、Phase 6 の Docker 環境構築という3段階で、3種類のバグを体系的に防ぎます。

第2章

なぜテストを先に書くのか

テスト駆動開発(TDD / Test-Driven Development)は Kent Beck が提唱した作り方です。正しく動くと確かめた部品を積み上げれば、正しく動くアプリになる、という考え方に立っています。下のボタンで1段ずつ進めてください。

テスト駆動開発の流れ。テスト設計、レッド、グリーン、リファクタの4段階と、レッドへ戻る繰り返しの矢印。 1 テスト設計 入力と期待する出力を 先に決める 2 レッド テストを書く。 まだ全部落ちる 3 グリーン 通る最小のコードを 書いて合格させる 4 リファクタ 形を整える。 テストが守ってくれる レッドに戻って、これを繰り返す

1 / 4テスト設計

実装する機能について、入力と期待される出力の組み合わせを先に決めます。ログイン機能なら「正しいメールアドレスとパスワードならログイン成功」「パスワードが違えばエラーメッセージ」「メールアドレスの形式が不正ならバリデーションエラー」といった具合です。

テスト駆動開発の4つの利点

01

設計品質の向上

テストを先に書くと、「この関数は何を受け取って何を返すのか」を最初に決めることになります。曖昧な設計のまま実装に突入する事態を防げます。

02

バグの早期発見

テストが常にあるので、コードを変えるたびに既存の機能が壊れていないかをすぐ確認できます。発見が遅れるほど修正コストは跳ね上がるので、早さがそのまま費用の削減になります。

03

リファクタリングの安全網

テストがあれば、コードの構造を大胆に変えても、テストが通る限り動作は保証されます。テスト無しの作り直しは「祈りながらのコード変更」で、非常に危険です。

04

ドキュメントとしての機能

テストコードはそのまま「この機能はこう動くべき」という仕様書になります。後から参加した人は、テストを読めば仕様が分かります。

それでも普及しなかった理由

利点は広く知られています。それでも実際にやっているチームは多くありません。最大の理由はコストです。

  • 量が多い本体コードに対して2倍以上のテストコードを書く必要がある。
  • 速度の圧力スタートアップやアジャイル開発では「まず動くものを出す」が最優先。テストを書く時間があるなら機能を1つでも多く、という圧力が常にある。結果、テストは後回しにされ「技術的負債」として積み上がる。
  • 必要なスキルが高い良いテストを書くには、テスト対象のコードだけでなく、テスティングフレームワークの使い方、モックやスタブの設計、テストデータの管理など幅広い知識が要る。

これらの障壁が普及を阻んできました。AGI の登場で、この状況が変わりつつあります。

第3章

雰囲気で作ることの光と影

バイブコーディング(Vibe Coding)とは、AIに自然言語で指示を出し、その場の雰囲気(バイブ)でアプリを組み立てる作り方のことです。2024年後半から急速に広まりました。プログラミングの民主化という点では画期的です。

「Todoアプリを作って」「ログイン機能を追加して」「デザインをモダンにして」。こうした日本語の指示だけで、見た目のよいアプリが数分で出てきます。経験が無くても、思いつきをすぐ形にできる時代になりました。

典型的な流れと、そこに無いもの

バイブコーディングの5段階の流れ。指示、生成、目視確認、修正指示、繰り返し。この流れの中にテスト設計が含まれていないことを示す図。 何度でも回せる。速い。 1 自然言語で指示を出す 2 AIがコードを生成する 3 動作を目視で確認する 4 問題があれば修正を指示 5 1〜4を繰り返す テスト設計 この流れのどこにも無い

「動作を目視で確認する」は、正常なパターンの一部を人間の目で見ているだけです。だから次のようなものが見落とされます。

境界値のバグ

0件のときの表示。大量データでの速度。

エラーハンドリングの欠如

ネットワークエラーが起きたときにアプリがクラッシュする。

セキュリティの脆弱性

SQLインジェクション、XSS、認証のバイパス。

データ整合性の問題

同時に処理が走ったときにデータが壊れる。

アクセシビリティの欠如

スクリーンリーダーで操作できない。

「速い、作れる」の先にある崩壊

  1. 1ユーザーが増えるにつれて、エッジケースのバグが次々に報告される
  2. 2バグを直そうとすると、別の箇所が壊れる(回帰バグ)
  3. 3影響範囲を確認する手段が無いので、直すたびに新しいバグが出るモグラ叩き状態になる
  4. 4コードベースが複雑になりすぎて誰も直せなくなり、プロジェクトが放棄される

2024年から2025年にかけて、この作り方で生まれたサービスが次々公開され、次々消えていきました。「一瞬にして崩壊する」という言い方は、残念ながら多くのプロジェクトの現実をそのまま表しています。

バイブコーディングが悪いのではありません。問題は、そのやり方に品質保証の仕組みが組み込まれていないことです。

AGIテスト駆動開発は、バイブコーディングの「速さ」と「手軽さ」を保ったまま、TDD の「品質保証」を両立させます。テスト設計・テストコード生成・テスト実行を AGI が自動で行うので、指示を出す側の感覚は今までどおりのまま、テスト付きのコードが返ってきます。

第4章

回帰テスト — バグが生まれる本当の理由

回帰テスト(かいきテスト / Regression Test)とは、コードを変えた後に、これまで動いていた機能がちゃんと動き続けているかを確かめるテストのことです。新しい機能を足したり、バグを直したりしたときに、その変更が他の場所に悪さをしていないかを検証します。

たとえばタスク管理アプリに「タスクの優先度設定」を足したとします。この後で「タスク作成」「タスク編集」「タスク削除」「締め切り通知」がすべて今までどおり動くかを確かめるのが、回帰テストです。

直すたびに別の場所が壊れる、を見る

機能Aを直すと機能Bが壊れ、Bを直すとCが壊れる。この連鎖を「デグレード(degradation)」と呼びます。下の2つのボタンで、回帰テストがある場合と無い場合を見比べてください。

ボタンを押すと、機能Aに手を入れた後に何が起きるかが動きます。

なぜ実施されないのか

結論から言えば、ほとんどのエンジニアは回帰テストを実施していません。理由は3つです。

  1. 時間がかかる手作業で全機能をテストすると、小規模なアプリでも数時間、中規模なら数日かかります。毎回の変更でこれをやるのは現実的ではありません。
  2. 自動テストが整備されていない効率よくやるには自動テストの一式が要ります。しかし前章のとおり、テストコードを書くコストが障壁になり、多くのプロジェクトでは揃っていません。
  3. 変更の影響範囲が把握できない「この関数を直したらどこに影響するのか」を正確に掴むのは、コードが大きくなるほど難しくなります。範囲が分からなければ何をテストすべきかも分からず、事実上できません。

回帰テストをしないことの代償

  1. デグレードが起きるたび、コードベースの信頼性が下がる
  2. チームが変更に対して臆病になる
  3. 「触らない方がいい」「動いているコードは変えるな」が広まる
  4. 技術的負債が雪だるま式に膨らむ
  5. 「何もコードを変更できない」膠着状態に陥り、成長が止まる

これは多くの企業が実際に直面している問題です。

AGI が解決すること

一貫した文脈を保持できる

テスト設計から実装まで同じ知能が担当します。「テスト設計を書いた人」と「実装した人」が違うことで生じる認識のずれがありません。

影響範囲を正確に把握できる

コードベース全体を理解した上で、どのテストを再実行すべきかを判断します。

実行コストがほぼゼロ

AGI が自動でテストを走らせて結果を報告するので、人間の作業時間はほとんどかかりません。

ひと言で済む

「回帰テストを実行して」という一つの指示で、対象箇所以外に手を入れていないことの確認と、影響が出ていないかの検証が自動で行われます。これが AGI テスト駆動開発の最大の価値です。

第5章

AGIとは何か、なぜ一貫できるのか

AGI(Artificial General Intelligence / 汎用人工知能)とは、特定の作業に特化するのではなく、人間のように幅広い知的作業をこなせるAIのことです。いまの大規模言語モデル(LLM)は「狭いAI(Narrow AI)」に分類されますが、AGIレベルのシステムは、複数の領域にまたがる推論・計画・学習を統合して行えます。

ここで言う AGI が持つ能力

「高速なレスポンス」がずれていく

人間のチームでテスト駆動開発をやるとき、最大の課題は一貫性の維持です。要件定義を書くプロダクトマネージャー、設計するアーキテクト、テストを設計するQAエンジニア、実装するプログラマーは、通常は別々の人間です。それぞれ違う解釈、違う前提、違う優先順位を持つので、工程の間で認識のずれが必ず起きます。

人間のチーム

要件定義:「高速なレスポンス」

  1. 設計者200ms以内のことだろう
  2. テスト設計者500ms以内なら合格でいい
  3. 実装者とりあえず動けばいい

解釈が3通りに割れた。ここがバグの温床になる。

AGI

要件定義:「高速なレスポンス」

  1. 設計200ms以内、と数値に変換
  2. テスト設計200msを検証するテストを作成
  3. 実装200msを満たすコードを書く
  4. テスト実行200msを実測して検証

ひとつの知能が最後まで担当するので、数値がずれない。

環境の用意

AGIテスト駆動開発を実践するための道具として ccagi-sdk が提供されています。手順は3つです。公式サイトからインストーラーを取得する。VS Code(Visual Studio Code)にAGI拡張機能をインストールする。プロジェクトの初期設定を行い、AGIがプロジェクトの構造を認識できる状態にする。

VS Code を使うのは、拡張機能が豊富で、ターミナルが統合されているためです。AGIとのやり取りが同じ画面の中で完結します。AGIへの指示は、VS Code のターミナルかコマンドパレットから出します。

導入の手順は「はじめ方」で細かく書いています

第6章

全8フェーズ 実践ワークフロー

ここからが実務です。Phase 1 から Phase 8 まで、各フェーズで必要な書類、AGIへの具体的な指示、レビューで見るところを並べます。枠で囲った日本語が、実際にAGIへ言う言葉です。そのままコピーして使えます。フェーズの帯から選んでください。

Phase 1要件定義 — すべての品質はここから始まる

要件定義の品質が、プロジェクト全体の品質を決めます。ここが曖昧なら、どれだけ優れた設計・実装・テストをしても、求められたものは作れません。AGIテスト駆動開発では、要件定義もAGIとの対話で作ります。

AGIに言う言葉

タスク管理アプリの要件定義を作成して。ユーザー認証、タスクのCRUD、締め切り通知機能が必要

この指示に対して、AGIは3つのドキュメントを生成します。

docs/requirements/requirements.md機能要件書

「このアプリは何ができるか」を定義します。ユーザー認証機能なら、メールアドレスとパスワードによるログイン、ソーシャルログイン、パスワードリセット、セッション管理など、具体的な機能を並べます。

見るところ各機能の受け入れ基準(Acceptance Criteria)が具体的に書かれているか。「ユーザーはログインできる」では足りません。この程度の具体性が要ります。

  • 正しい認証情報でログインに成功すると、ダッシュボードにリダイレクトされる
  • 3回連続でログインに失敗すると、アカウントが15分間ロックされる
docs/requirements/non-functional.md非機能要件書

「このアプリはどのように動くべきか」を定義します。パフォーマンス要件(レスポンスタイム、同時接続数)、セキュリティ要件(暗号化方式、認証トークンの有効期限)、可用性要件(稼働率、障害復旧時間)、スケーラビリティ要件(将来のユーザー数増加への対応)などです。

見るところここはテスト設計に直結します。「レスポンスタイムは200ms以内」と書けば、そのままパフォーマンステストの合格ラインになります。曖昧に書けばテストの基準も曖昧になり、品質保証が機能しなくなります。

docs/requirements/design-requirements.mdデザイン要件書

ユーザーインターフェースに関する要件です。対象デバイス(PC、タブレット、スマートフォン)、対応ブラウザ、アクセシビリティ基準(WCAG 2.1準拠など)、ブランドガイドライン(カラーパレット、タイポグラフィ)が入ります。

見るところレスポンシブデザインの基準が具体的か。「モバイル対応」という漠然とした書き方ではなく、次のように書けているかを見ます。

  • 375px幅(iPhone SE)から1440px幅(デスクトップ)まで、主要なブレークポイントでレイアウトが適切に変化する
第7章

11の書類と、その存在理由

コードを書く前に、これだけの書類を作ります。一見すると面倒に思えますが、それぞれに明確な理由があります。人間が手作業で全部作るのは膨大な労力ですが、AGIが自動生成するので負担は最小限です。

01

AGIへの指示書

AGIがコードを生成するときに参照する情報源です。書類の品質が、そのままコードの品質になります。

02

チームの共通言語

要件定義は「何を作るか」、設計書は「どう作るか」、テスト設計書は「何をもって正しいとするか」を、全員で共有するために存在します。

03

変更管理の基盤

仕様変更が起きたとき、影響範囲を特定して適切に直すには、いまの仕様が正確に文書化されている必要があります。

全11ドキュメント(フェーズ別)
フェーズファイル/名称日本語名何を書くか
Phase 1要件定義 requirements.md機能要件書このアプリは何ができるか。受け入れ基準まで。
non-functional.md非機能要件書どのように動くべきか。速度・安全・可用性・拡張性。
design-requirements.mdデザイン要件書対象デバイス、対応ブラウザ、アクセシビリティ基準、ブランド。
Phase 2設計 spec.md機能仕様書データモデル、APIエンドポイント、画面遷移、状態管理。
design-system.ymlデザインシステム色・書体・余白・部品の統一ルール。AGIが実装時に参照。
ui-guidelines.mdUI設計方針ナビゲーション、バリデーション表示、文言、ローディング。
単体テスト設計書単体テスト設計書各関数の入力と出力の期待値の一覧。
結合テスト設計書結合テスト設計書複数の部品が連携する流れの検証設計。
E2Eテスト設計書E2Eテスト設計書ユーザーの操作シナリオ全体の検証設計。
Phase 3計画 SSOT Issue整合性確認タスク書類どうしの矛盾を横断チェックして解決する。
Phase 8保存と共有 README / ユーザーズガイド取扱説明書セットアップ、利用方法、構成、テスト実行、デプロイ手順。

Phase 1 で3つ、Phase 2 で6つ、Phase 3 で1つ、Phase 8 で1つ。合計 11 の書類が、この作り方の土台になります。

第8章

品質はコストではなく投資

バグの修正コストは、発見が遅れるほど指数関数的に増えます。要件定義の段階で見つけたバグの修正コストを1とすると、次のようになる、というのがソフトウェア工学の教科書で紹介される定説です。

バグ修正コストの階段。要件定義で1、設計で10、実装で100、テストで1,000、本番で10,000。 ×1 要件定義 ×10 設計 ×100 実装 ×1,000 テスト ×10,000 本番環境 ← 見つけるのが早い 遅い →

AGIテスト駆動開発は、バグをできるだけ左側で見つけて直します。それが開発費用の総額を大きく下げます。

バイブコーディングからの卒業

バイブコーディングは、ソフトウェア開発の裾野を広げた素晴らしい動きでした。しかし「動くものを作る」だけでは、長く使えるソフトウェアは作れません。AGIテスト駆動開発は、その手軽さを保ちながら、仕事として通用する品質保証を実現します。日本語で指示を出すだけで、テスト付きのコードが出てくる。これは開発の歴史における大きな転換点です。

回帰テストが当たり前になる世界

この作り方が広まれば、「回帰テストをしない」という選択肢は無くなります。コードを変えるたびに自動で回帰テストが走り、既存機能の破壊がその場で見つかります。デグレードの悪夢から解放され、チームは安心してコードを変えられるようになります。技術的負債の蓄積が抑えられ、プロジェクトの長期的な健全性が保たれます。

コストは劇的に下がった

テスト駆動開発を「コストが高い」と敬遠してきたチームは多いはずです。しかし AGI がテストコードの生成を自動化したことで、その「コスト」は劇的に下がりました。品質への投資は、いちばん確実なコスト削減策です。