FlowTune Media

エラーメッセージは人間のためのものだった — Vercel Zeroが問い直す「AIの言語」

AIエージェントにコードを書かせると、最も時間がかかるのは「コードを書くこと」ではない。エラーメッセージを読んで意味を解釈し、何を直すべきか推測する作業だ。

考えてみれば当たり前のことだが、RustやGoのコンパイラが吐くエラーメッセージは、人間が目で読んで理解するために設計されている。色付きのテキスト、矢印で指し示すソース位置、自然言語の説明文。人間にとっては親切だが、AIエージェントにとっては非構造化データでしかない。正規表現でパースして推測する必要がある。

Vercel Labsが5月15日にリリースしたZeroは、この前提をひっくり返す実験だ。

コンパイラがJSONで話す

Zeroの最大の特徴は、コンパイラの出力形式にある。エラーも警告も、すべてJSON形式の構造化データとして出力される。安定したエラーコード、型付きの修復メタデータ、影響範囲の情報がセットで返ってくる。

人間が「error[E0308]: mismatched types」というテキストを読んで「型が合っていない」と解釈する代わりに、AIエージェントは {"code": "E0308", "kind": "type_mismatch", "repair": {"expected": "u32", "found": "String"}} のような構造データを受け取る。解釈の余地がない。何が期待されていて、何が実際に渡されたか。修復に必要な情報がそのまま入っている。

これだけ聞くと「ラッパーを書けばいいのでは」と思うかもしれない。実際、既存のコンパイラにJSON出力を追加するツールはある。だがZeroが違うのは、言語の設計段階からエージェントが消費する前提で作られていることだ。後付けのJSON出力と、言語仕様レベルでの構造化出力は、カバー率が違う。

関数の「できること」を型で宣言する

もう一つの設計上の特徴が、capability-based I/Oと呼ばれる仕組みだ。

通常のプログラミング言語では、関数が内部でファイルを読んだりネットワークにアクセスしたりしていても、関数のシグネチャからはそれが見えない。人間の開発者はドキュメントやソースを読んで判断するが、AIエージェントにはその「暗黙の知識」がない。

Zeroでは、関数がアクセスするリソース(ファイル、ネットワーク、メモリ等)をシグネチャに明示的に宣言する必要がある。コンパイラがこれを強制するため、AIエージェントは関数の型を見るだけで「この関数はファイルシステムにアクセスするが、ネットワークには触らない」と判断できる。

AIエージェントがコードを書くとき、この情報があるのとないのでは大きく違う。「この関数を呼ぶとどんな副作用があるか」をソースコードを全部読まなくても推測できるからだ。

10KiB以下のバイナリ

Zeroはガベージコレクタを持たず、隠れたメモリアロケータもなく、暗黙のasync処理もない。コンパイル後のバイナリは10KiB以下になる。

この「ミニマル設計」はAIエージェントにとって都合が良い。メモリの確保・解放タイミングが予測可能で、制御フローに隠れた分岐がない。エージェントがコードの動作を推論するとき、「見えない挙動」が少ないほど正確な推論ができる。

実験段階であることは隠さない

率直に言えば、Zeroを今すぐ本番環境に使う理由はない。バージョンは0.1.2。APIは頻繁に変わる。Vercel Labs自身が「experimental」と明記している。GitHub上のスター数は公開初日で900を超えたが、それは関心の高さであって成熟度ではない。

ライブラリのエコシステムもない。既存のnpmパッケージやcrateを使えるわけでもない。現時点では「設計思想を試すためのプロトタイプ」だと割り切るべきだ。

それでもZeroが重要な理由

Zeroの価値は、ツールとしての実用性ではなく、問いの立て方にある。

「AIエージェントがプログラムを書く時代に、プログラミング言語はどう変わるべきか?」

この問いに対して、既存の言語にJSON出力を追加する程度では不十分だとZeroは主張している。言語そのものが、AIエージェントを第一級のユーザーとして設計されるべきだ、と。

この発想が広まると、いくつかの面白いことが起きうる。

一つは、既存言語の進化だ。RustやGoのコンパイラが、Zeroのアイデアを取り入れてJSON構造化出力を標準機能にする可能性は十分ある。Claude CodeやCursor、Devinのようなコーディングエージェントが普及すれば、「エージェントが消費しやすいコンパイラ出力」への需要は確実に高まる。

もう一つは、AIエージェント同士がコードを受け渡す世界だ。エージェントAが書いたZeroのコードを、エージェントBがレビューし、エージェントCがデプロイする。全員が同じ構造化出力を読める。人間がボトルネックにならないパイプラインが、言語レベルで実現しうる。

もちろん、これは「もし」の話だ。Zeroがそのまま普及するかどうかは分からない。だが、AIがコードを書くのが当たり前になった今、「プログラミング言語の顧客は誰か」を問い直す動きは不可避だった。Vercelがその最初の一手を打ったことに、筆者は素直に感心している。

関連記事