フィードバックループがすべて

AIモデルが単独でコードを書くこと自体は、興味深い部分ではない。興味深いのは、コードを生成した後に何が起こるかだ。モデルはどれだけ速くコードの正しさを知ることができるか?生成と検証の間のフィードバックループはどれだけ緊密か?

そのループがすべてを決める。モデルが自身の出力に対して反復できるかどうかを決める。人間が手動検査なしで出力を信頼できるかどうかを決める。AIコーディングが実際に機能する領域を決める。

ループの速度は均一ではない。それはスペクトラムに従う。そしてそのスペクトラムは、より単純な真実によって決まる。AIはテキストネイティブである、という真実だ。

バックエンドのコードはテキストだ。APIレスポンスはテキストだ。データベーススキーマはテキストだ。ドメイン全体が、言語モデルが自らのネイティブメディアを離れることなく読み取り、生成し、検証できる文字列で表現されている。バックエンドにCLIコマンドが含まれる場合でさえ、それらのコマンドはテキストだ。モデルは見る必要はない。読めばいいのだ。

ビジュアルインターフェースは異なる。UIは静的な画像ではない。それは時間的なものだ。状態が変化する。アニメーションが遷移する。ジェスチャーが連鎖反応を引き起こす。モデルはボタンのスクリーンショットを撮れるが、押下のタイミングを感じることはできない。CSSを読めるが、イージングカーブが時間とともに展開する様子を見ることはできない。視覚的正しさは体験的なものであり、体験は時間の中で起こる。

バックエンド:ミリ秒

バックエンドのコードは決定論的に検証される。関数には入力と出力がある。型チェッカーはコンパイル時にcontractを検証する。テストスイートはミリ秒単位で振る舞いを検証する。APIエンドポイントはスキーマに一致するレスポンスを返すか、返さないかのどちらかだ。データベースマイグレーションはクリーンに適用されるか、ロールバックされるかのどちらかだ。

すべての検証シグナルはテキスト的で、決定論的で、高速だ。モデルは関数を生成し、型チェッカーを実行し、エラーを確認し、数秒で再生成できる。テストを書き、実行し、失敗を確認し、実装を修正できる。反復サイクルは十分に緊密で、モデルは限定されたバックエンドタスクの中で半自律的に動作できる。

これこそが、今日AIコーディングがバックエンドで最も魔法のように感じられる理由だ。この領域は純粋なロジックだ。検証は即時的だ。モデルは自分が間違っている時を知っている ― それはまさに決定的ガードレールがcodebaseの残りの部分に与えようとしているものだ。

Web:数分

Web開発には視覚的正しさが加わる。コンポーネントは正しいpropsを持っていても間違ったパディングを持つことがある。レイアウトはすべての型チェックを通過しても崩れて見えることがある。検証の対象はもはや純粋に決定論的ではない。

Playwrightが役立つ。コンポーネントをレンダリングし、スクリーンショットを撮り、ベースラインと差分比較できる。しかしこれは遅い。バックエンドのテストスイートは数秒で実行される。Playwrightのビジュアルリグレッションスイートは数分かかる。検証ステップが一桁遅いため、AIは同じ速度で自身の出力に対して反復できない。

モデルはコンパイル可能なReactコードを生成できる。しかしブラウザを実行し、DOMをレンダリングし、ピクセルを比較しなければ、生成されたUIが正しく見えるかどうかを判断できない。そのボトルネックは現実のものだ。Web AIコーディングは機能するが、フィードバックループはより緩い。

モバイル:数時間

モバイルには物理的現実が加わる。ジェスチャーにはタイミングと物理特性がある。アニメーションには正しく感じられるか間違って感じられるかのイージングカーブがある。画面はiOS 16とiOS 18で異なるレンダリングをする。Bluetooth、カメラ、GPS、プッシュ通知はすべて、デバイス、OSバージョン、メーカースキンによって動作が異なる。

これを高速に検証する方法は存在しない。ユニットテストはビジネスロジックをカバーするが、スワイプの感触はカバーしない。シミュレータ上のUIテストはレイアウトの問題を検出するが、3年前のAndroidデバイスでのフレームドロップは検出しない。実際の検証には、ビルド、署名、インストール、そして物理ハードウェア上での操作が必要だ。フィードバックループは秒ではなく時間単位で測定される。

モデルはコンパイル可能なSwiftUIやJetpack Composeのコードを生成できる。しかしアプリがネイティブに感じられるかどうかは判断できない。それには実機での人間の手が必要だ。反復サイクルが遅すぎてモデルが効果的に自己修正できない ― それがAIでコーディングされたReact Nativeアプリにスケーリングのためのガードレールが必要な理由だ。

このスペクトラムが意味するもの

AIコーディングはモデル能力の速度では拡大しない。検証の速度で拡大するのだ。

モデルは今日モバイルコードを書くことができる。できないのは、そのコードが良いかどうかを知ることだ。知るためには、モバイルがまだ持っていない検証基盤が必要だ。バックエンドはそれを持っている。Webはそれを構築中だ。モバイルは何年も遅れている。

AIコーディングをどこに適用するかを選択するチームにとって、答えは明白だ。検証が最も速い場所から始めよ。バックエンドが最初だ。Webが次で、ビジュアルテストへの投資を伴う。モバイルが最後で、人間の手が依然として最終検証を行う。その選択の保守コストは時間とともに複利で増大する ― それがバージョン1が本当の問題ではない理由だ。

モデルがバックエンドでより賢いわけではない。よりよく情報を得ているだけだ。