概要

Expedia Groupは、LLMを使ってGraphQLのモックレスポンスを実行時に生成するRust製CLIツール「mockql-rs」をオープンソースとして公開した。同社のソフトウェアエンジニアSamuel Vazquez氏によれば、このアプローチの利点はGraphQLのセレクションセットをそのまま「組み込みの仕様」として活用できる点にある。同氏は「LLMは形を発明するのは苦手だが、形を埋めるのは得意だ」と述べており、スキーマという制約があるからこそ、もっともらしいだけのノイズではなく実用に耐えるダミーデータを生成できるという考え方が根底にある。ただし、この動きはExpediaだけのものではなく、Airbnbが先行して独自の仕組みを公開しているほか、GraphQL Foundation自身も標準化に向けたRFCを提案しており、三者三様のアプローチが同時期に登場したことで、業界標準としてまとまるのか、それとも互換性のない複数の実装が並立し続けるのかが今後の焦点となっている。

mockql-rsの仕組み

mockql-rsはクライアントとサーバーの間に立つ独立したプロセスとして動作する。開発者はスキーマ上のフィールドに@mockディレクティブと任意のヒントを付与しておく。ツールはapollo-compilerを用いてクライアントからのオペレーションをスキーマに照らして解析し、モック対象として注釈されたフィールドと実際にバックエンドへ問い合わせるべきフィールドとを分離する。実データが必要なフィールドはそのまま上流のサーバーへ転送する一方、モック対象のフィールドについてはオペレーション内容とスキーマのサブセットをLLMに渡してレスポンスを生成させ、最終的に両者をマージして一つのレスポンスとしてクライアントに返す。この方式では呼び出しのたびに新しいモックデータが生成されるため、実行のたびに内容が変わる非決定的なフィクスチャになるのが特徴である。

Airbnbの先行実装との違い

Airbnbは今年4月、@generateMockという名前のディレクティブを使う仕組みを公開していた。同名に近いディレクティブながら設計思想は大きく異なり、Expediaの実行時生成とは対照的に、こちらはビルド時にJSON形式のモックデータファイルと型付きのアクセサ関数を出力する方式を採っている。デモアプリやスナップショットテスト、ユニットテストでの利用を想定しており、一度生成した後にエンジニアが手動で加えた編集は、再実行時にも意図的に保持される設計になっている。つまりAirbnbの仕組みはスナップショットのように再現性のあるモックを生み出す一方、Expeditaの仕組みは実行のたびに異なる結果を生む点で、CI環境での挙動に関しても根本的な違いを持つが、記事はどちらの方式もこの非決定性がCIにどう影響するかを十分に扱っていないと指摘している。

GraphQL Foundationの提案と標準化の現状

GraphQL Foundationが提出したRFCは、両社とはさらに異なる第三の立場を取る。@mockをフィールドではなくオペレーションに対して定義し、クライアント側がネットワークリクエストを行わずにモックを返すことを求める設計になっている。モックレスポンスは__graphql_mocks__というディレクトリに配置される想定で、LLMによる生成はあくまで選択可能な一戦略として位置づけられており、必須の仕組みとはされていない。加えて、モックの妥当性検証をアプリケーションのテストスイートの一部として組み込むことを求めており、将来的にはAgent Skillとの連携も視野に入れているという。

ただし、このRFCは現時点でGraphQLの仕様策定プロセスにおける最初期の段階である「Stage 0」にとどまっている。これは提案がまだ「ストローマン(たたき台)」に過ぎず、正式なチャンピオン(推進担当者)も定まっていない状態であり、今後正式な仕様に進む保証は何もないことを意味する。一方でExpediaの実装は、ディレクティブの付与場所やネットワーク動作の扱いという点で、すでにこのRFCの方向性から外れており、標準化が定まる前にベンダーごとの実装が分岐しつつある状況が浮き彫りになっている。

今後の見通し

半年足らずの間に、同じ@mockに近い名前を使いながら意味の異なる複数の実装を含め、三つの異なるソリューションが登場したことになる。この状況について記事は「これが一つの仕様に収斂するのか、それとも互換性のない三つの実装のまま残るのかは、現時点では未解決の問題だ」と評している。標準化がまだStage 0という初期段階にある以上、今この分野のツールを採用するチームは、将来的な仕様変更や実装間の非互換性というリスクを引き受けることになる。GraphQLのスキーマを制約として活かしてLLM生成データの実用性を高めるという発想自体には説得力があるものの、エコシステム全体としてどの設計思想に落ち着くのかは、しばらく流動的な状態が続きそうだ。