DEV Community

sai-builder
sai-builder

Posted on • Edited on

動かしてから考える、が最強の設計手法だった

結論

  • AIエージェントは事前設計が無意味になる領域に入ってる
  • 「まず動かす、設計はあとから収束する」が、現時点で僕が見つけた一番マシな順序
  • 非エンジニアがAIで作るプロジェクトほど、この順序を守ったほうが早く着く

以下は、そう思うに至った半年分の話。

設計図を描くのが好きだった頃

半年前、僕はAIエージェントを作るときに「まずアーキテクチャ図を描く」派だった。

きれいなレイヤー分け、責務の分離、再利用可能なモジュール構造。役割ごとにエージェントを切って、入出力のスキーマを決めて、依存関係を有向グラフで整理する。Figma で図を描いてから実装に入る。全部、紙の上では美しかった。

でも実装すると毎回壊れた。

理由は単純で、AIエージェントの挙動は事前に予測できないからだ。プロンプトを変えれば応答が変わる。MCPを足せば依存関係が動的に変わる。LLM のバージョンが上がれば、昨日通っていたフローが今日は別のパスを取る。設計図は実装より早く陳腐化する。

しかも厄介なのは、図を描いた時点で「この通りに動くはずだ」という思い込みが脳に焼きつくこと。実装で壊れたとき、設計を疑わずに「実装が悪い」と判断してしまう。図に縛られてバグの本当の場所を見落とす。

失敗例:きれいに設計した自律エージェントが、動かなかった

一番痛かった失敗を書いておく。

ある自律マネタイズシステムを設計したことがある。匿名化して書くと、複数のコンテンツチャネル(note、Zenn、Medium、X)を横断して毎日記事を出すエージェント群を、1人で運用するというものだ。

最初の設計はこう描いた:

  • topic_curator:毎朝トピック候補を集める
  • drafter:ドラフトを書く
  • reviewer:自己レビューして直す
  • publisher:各プラットフォームに投稿する
  • analytics:反応を回収して次のキュレーションに渡す

矢印で繋いで、入出力をJSONで定義して、責務を分けた。完璧な「マイクロサービスっぽい」構成。

実装してみたら、最初の3日で破綻した。

  • topic_curator が出すトピックの粒度が、drafter の想定と毎回ズレる
  • reviewer が「全部直すべき」と判断して無限ループに入る
  • publisher がプラットフォームごとに違う認証フローを要求し始めて、結局この層が一番厚くなる
  • analytics は数日PV溜まらないと意味のあるシグナルを返さないので、フィードバックループが回らない

責務を分けたつもりが、実態の境界が設計図と一致していなかった。直そうとすると、設計図ごと描き直しになる。けど描き直してもまた壊れる。

やり方を変えた

詰まって、いったん全部捨てた。残したのは1個だけ。「毎日1本、何かを出す」というゴールだけ。

そしてエージェントを設計せず、ノートブックでベタ書きのスクリプトを1本書いた。トピック決め打ち、ドラフトはそのまま LLM に投げる、レビューなし、投稿先1つ。300行くらい。汚い。

これを毎日走らせた。動いた。出た。

そこから初めて、汚いスクリプトを観察して「この部分は毎回同じことをやっているから関数に切れる」「ここは LLM に毎回判断させてるから、プロンプトに切り出すべき」と、事後的に構造を抽出していった。

3週間後に出来上がった構造は、最初に図で描いたものと驚くほど似ていた。でも全然違うものになっていた。 名前は同じでも、責務の切れ目が違う。reviewer は無くなって editor(部分書き換えだけする軽量エージェント)になった。analytics は別プロセスに切り離した、ループの中じゃなくて。

結局、図は同じに見えても、実装が定義した境界想像が定義した境界は別物だった。

「設計はあとから収束する」とはどういう意味か

これは「設計するな」って話じゃない。むしろ逆で、設計は実装の後に正しく書けるという話。

事前に描く設計図は仮説でしかない。AIエージェントは未知の挙動を内包するから、仮説の精度が低い。低い精度の仮説に従って実装すると、実装も低精度のものができる。

ところが、まず動くものを作ると、そこから観測される実際の挙動を元に設計を組める。これは精度が高い。観測ベースだから。

順序が逆なだけで、設計を捨てているわけじゃない。

非エンジニアにこそ効く

この順序、エンジニアより非エンジニアの方が活きると僕は思っている。

非エンジニアは経験上、最初から「正しい設計」を描く能力を持っていない(だってエンジニアじゃないから)。なのに、AI使う系の本やコンテンツは「まず要件定義」「まずアーキ図」と言ってくる。これに従うと、描けない図を描こうとして詰む。

逆に「まず動かす」順序なら、最初に必要なのは「最小の動くもの」だけ。1個のプロンプト、1個のスクリプト、1個の出力。これなら非エンジニアでも作れる。動かして観察する能力は、エンジニア経験と関係ない。むしろ非エンジニアの方が先入観なく観察できる場合がある。

僕の周りで「AIで何か作りたいけど何から手を付けたらいいか分からない」と言う人は、たいてい設計から始めようとして止まってる。一行のプロンプトから始めれば、3日で何か動く。

それでも設計を先にする場面

例外もある。他人と協業する場面だ。

1人で動かしている限り「実装→観察→設計」の順でいい。けど他人と作るときは、共通理解のためにある程度の事前設計図が要る。完璧な図じゃなくていい、「ここで何を作る、入出力はだいたいこう」程度のスケッチで十分。

このスケッチも、ベテランエンジニアの図とは別物だ。仮の合意であって、確定の仕様ではない。動かしたら変わる前提で描く。図が変わったら「設計通りに動かなかった」じゃなくて「設計が現実に追いついた」と捉える。

学び

「動かしてから考える」は雑に聞こえるけど、実際は規律のある順序だ。手抜きじゃない。何を観察するか、いつ設計に転じるか、どこで止めるかを毎日判断し続けないと回らない。

ただ、この順序を採用してから、僕が壊すコードの量は減った。書く設計図の量も減った。出力は増えた。

たぶんこれは AI ネイティブ時代の正しい順序の一つで、僕がいま見えてる範囲ではこれが最善。1年後にはまた違うことを書いてるかもしれない。それでいい。まず動かす、設計はあとから収束する


次回予告

次は「動かしながら設計を収束させるための観察ノートの取り方」を書こうと思っている。Notion でも Obsidian でもいいんだけど、エージェントの挙動を観察するための日次ログをどう構造化してるか。地味だけど、これがないと「動かしてから考える」は「動かしたまま考えない」に堕落する。

— Sai


この記事が役に立ったら:僕が自律エージェントを動かすときに実際に使っているプロンプトを2つのパックにまとめました — 自律エージェント用プロンプト100選Claude Code パワーユーザー向けプロンプト。どれも「まず動かす」発想で、ターミナルに貼って即使えます。

Top comments (0)