AIを使って最初にソフトウェアを設計する方法
多くの開発者は、AIにコードへまっすぐ飛び込んでほしいと思っています。
私は違います。
どんなツールに対しても、何かを実装するよう頼む前に、まず言葉で問題を解きほぐします。AIをコーディング支援として使う前に、設計パートナーとして使います。この切り替えは、特定のモデルやツールよりも、私の成果に大きな影響を与えています。
私のツールセット
自宅と職場で私の環境は変わりますが、パターンは同じです:
| Home | Work |
|---|---|
| ChatGPT Plus | Gemini Pro |
| GitHub Copilot | GitHub Copilot |
| Codex | N/A |
| Claude Code | Claude Code |
これらのツールは互換ではありません。作業の段階に応じて、使い分けます。まず議論し、次に実装します。
真のレバレッジはコードの前にある
ほとんどのAI支援開発は、遅すぎる段階から始まります。
人々は、コードの中にすでに入ってからAIを持ち込み、AIがすべてをうまく判断してくれることを期待します。しかし難しいのはたいてい、もっと前の段階です。アイデアがまだ曖昧で、境界が定義されていないときです。
私はコードを求める前に、次の点を明確にしたいです:
- 私が解決している問題
- システムの境界
- 一貫した用語
- スコープに含めるものと後回しにするもの
- 暗黙のままだとズレを生む前提
それを最初に解ければ、後工程はすべて良くなります。
私のワークフロー
1. まずはチャットから始める
私はChatGPTから始めます。通常はボイスを使います。
これにより、アイデア、制約、エッジケース、命名、構造を素早く行き来できます。この段階ではコードは求めません。システムを形作っています。
2. ドキュメントに落とし込む
アイデアが固まったら、それをMarkdownに変換します:
- ビジョン
- 語彙
- 目的と非目的
- システム概要
- インターフェース
- ロードマップ
コード生成が目的ではありません。目的は明確さです。
3. 実装の前に設計する
私はリポジトリに急ぎ込んだりしません。
実装が「発明」ではなく「実行」になるほど、アーキテクチャ、用語、制約を明確にしたいのです。より良い設計は、より良いプロンプトにつながり、より良いコードにつながります。
既存のコードでも重要だ
これは新規(グリーンフィールド)の作業だけの話ではありません。
もし既存のコードベースがあるなら、関連部分をまとめて圧縮(zip)し、それを早い段階でChatGPTに持ち込みます。そうすることで、議論のための土台ができます:
- 変わらないもの
- 変わるもの
- 境界が弱い場所
コードのナビゲーションとしては完璧ではありませんが、実装の前に変更の形を作るうえでは非常に効果的です。
なぜこれがうまくいくのか
最大のメリットは、ズレ(ドリフト)が減ることです。
設計がすでに定義されているので、毎回のプロンプトで全部を説明し直す必要がありません。私は焦点を絞った指示を出せます:
これらの制約を使って機能Xを実装してください。スコープを広げないでください。用語を保持してください。
これは、モデルにゼロからすべてを推測させるよりもはるかに信頼性があります。
ツールの捉え方
私はツールを2つのカテゴリに分けます:
- 議論用ツール(ChatGPT、Gemini):アイデアを探る、設計を磨く、成果物を作る
- 実装用ツール(Copilot、Codex、Claude Code):定義された設計に基づいて実行する
ほとんどのフラストレーションは、間違った段階で間違ったツールを使うことから生まれます。
コードに移行すると何が変わるか
実装を始める頃には、システムはすでに定義されています。
つまり通常は次のようになります:
- ズレが少ない
- 修正が少ない
- 一貫性が高い
モデルは、私が何を求めているのかを当て推量する必要がなくなります。計画に基づいて実行するだけです。
まとめ
私のワークフローはシンプルです:
- アイデアを会話で詰める
- それを設計ドキュメントにする
- 必要に応じて既存のコードを持ち込む
- それらの成果物を「唯一の正」として使う
- そして実装する
AIは単なるコード生成器ではありません。
うまく使えば、それは設計の増幅器です。
そして最初の段階で設計がどれだけ明確かによって、コードの質はだいたい良くなります。





