Intelligent UIはGenerative UIの改名なのか
2026/10/11
Intelligent UIの登場
2026年10月7日、OpenAIがGPT-6とあわせて「Intelligent UI」を発表し、Plus、Pro、Business、EnterpriseのChatタブで段階的な提供を始めました。Free、Goへの展開は翌8日からです。Enterpriseでの利用は管理者の設定にも依存します(公式発表)。
半年前、チャットUIの是非で止まっている場合ではないという記事で、Xの議論がチャットバーの是非にとどまり、Generative UIの話まで進んでいないと書きました。そのきっかけになった投稿の主であるRabi Shanker Guha(thesys CEO)が、今回はChatGPTの実装を解析した記事を出しています。
10月9日にはCopilotKitが、同じ体験を自分のプロダクトに入れるためのテンプレートとして「Open Intelligent UI」を公開しました。
これまでGenerative UIと呼んでいたものが、Intelligent UIという名前に変わっただけなのか。それとも別の観点で理解し直す必要があるのか。2つの発信と、僕が開発に関わる業務向けAIワークスペースの実装を並べて考えてみます。
ChatGPTの実装
解析記事の詳細版によると、ChatGPTの実装はモデル、サーバー、クライアントの3者で役割を分けています。
- モデルはDILという言語で回答を書きます。文章はMarkdown、部品はJSX風のタグ、状態とロジックはJavaScriptです。
- サーバーは途中までの出力を、JavaScriptのプログラムと、文章やデータを入れたJSONにコンパイルします。
- クライアントでは、隠しiframeの中のWeb Workerがプログラムを実行し、UIの差分を操作の列として出します。
- ChatGPTのページは、その操作を自社のネイティブ部品に当てはめて描画します。
- モデルが使える部品とデザイントークンは、カタログとして定められています。
記事に載っている例では、スライダーで席数を変えると価格が再計算されます。このときモデルは呼ばれません。Worker内で状態を更新して再描画し、差分だけをページに返します。
フォームやボタンからモデルに続きを依頼するときは、GenUI.issueNewTurnで新しいユーザーメッセージを送ります。ローカルの状態更新と、会話を進めるための送信は別の処理です。
コンパイルの段階では、文法を補修し、カタログにない属性を落として診断として記録します。書きかけの出力も、最後に完結した部分で区切ってコンパイルします。ストリーミング中、サーバーは数百ミリ秒ごとに全文をコンパイルし直しています。状態にはキーが付いているので、ユーザーが触った値は再コンパイルの間も保たれます。
部品で表せないもの、たとえばWeb Audioで音を鳴らすドラムマシンは、AppBlockという仕組みでHTML、CSS、JavaScriptをiframeに入れて表示します。ただしこれは例外的な経路で、本流はカタログの部品です。
解析記事を読んでいて、MCP Appsに近いのはこのAppBlockのほうだという印象を受けました。どちらもHTMLを隔離したiframeに入れて表示します。一方、本流のDILでは、iframeはJavaScriptを実行するための入れ物で、描画はChatGPTのネイティブ部品が担います。iframeを使う点は同じでも、UIを書くのがモデルで、見た目をホストのカタログで揃える点で、MCP Appsとは別の系統だと感じています。
Xの解析記事は、Generative UIのAPIを提供するThesysの代表が公開したものです。詳細版はThesys Engineering Teamの署名で、内容は通信内容と公開されているJavaScriptに基づく観測や推定です。OpenAIの公式説明とは区別して読む必要があります。
Open Intelligent UIの中身
CopilotKitのリポジトリも読みました。名前は「Intelligent UI」ですが、構成はChatGPTとかなり違います。
- 回答の形は、TypeSafe社のJevという外部のルーターが、ユーザーの発言ごとに13種類から選びます。ルーターの呼び出しに失敗すると、そのターン全体が失敗します。
- 単純な表はA2UIで描画しますが、カスタムカタログに入っている部品はTable 1つだけです。
- グラフ、図、計算機、地図は、モデルが書いたHTML、CSS、JavaScriptをiframeに流し込んで描画します。書きかけのHTMLは、差分を当てて画面のちらつきを抑えています。
- 見た目はデザインシステムのCSSを注入し、プロンプトで「CSS変数を使い、色を直接書かないこと」と指示して揃えています。CSPには
unsafe-evalが入っており、許可されたCDNからモジュールを読み込めます。
ChatGPTの構成に当てはめると、例外の経路だったAppBlockを主な描画手段にした形です。カタログで部品を検査する仕組みや、ネイティブ部品で状態を保ったまま差分を描画する仕組みは、ほとんど再現されていません。
名前だけの変更と言える部分
部品の多くは、以前からGenerative UIの名前で存在していました。カタログ方式はA2UIやjson-render、iframeで隔離するHTMLはMCP AppsやChatGPT Apps SDK、ストリーミング描画はAI SDKのRSC対応などです。ChatGPTが新しい原理を発明したわけではありません。解析記事も、OpenAIが一晩で分野の名前を変えたと書いています。
名前と一緒に変わったこと
それでも、ChatGPTの変化を名前だけの変更だとは考えていません。モデルが回答の形を選び、操作できる道具を作ることは、既存のGenerative UIでも可能でした。今回注目しているのは、その体験がChatGPTの通常の回答に組み込まれたことです。回答の形と振る舞いを設計するうえで、次の4点が参考になります。
回答の形を決める主体
ツールの呼び出しに決まった部品を対応させる実装では、開発者がツールと部品を配線します。ただし、モデルが回答の中でUIを構成する方式も以前からあります。json-renderの2026年2月時点のChat modeは、モデルにUIツリーを生成させ、必要がなければ文章だけを返すよう指示しています。
ChatGPTも、文章で返すか、部品を出すか、操作できる道具を作るかをモデルが回答の中で判断します。CopilotKitはこの判断を専用のルーターに任せています。形を選ぶこと自体の新規性より、その判断を通常の回答体験にどう組み込むかに注目しています。
生成できるロジックの範囲
A2UIやjson-renderでは、UIを宣言的なデータとして記述します。この方式でも、操作への反応をクライアントの中で完結させられます。A2UI v0.9の仕様にはローカル関数を呼ぶアクションがあり、json-renderには双方向のバインドやローカルの状態更新があります。UIの記述形式と、操作を処理する場所は別の軸です。
DILでは、モデルがJavaScriptで状態更新や計算ロジックまで記述できます。A2UIやjson-renderでは、ホストが提供する部品・関数・式の範囲で振る舞いを表現します。主な違いは、モデルにどこまでロジックの記述を許すかにあります。どちらの方式でも、回答をその場で使える小さな道具にできます。
回答の標準の形
Intelligent UIは、対応するChat体験で通常の回答に使える機能として段階展開されています。公式ヘルプによると、Work、Voice、Pro推論オプション(GPT-6 Astra)は対象外です。文章と部品が同じ回答の中に並ぶため、書きかけの状態でも描画できること、状態を保ったまま差分で更新すること、変化をアニメーションで見せることが、回答体験の要件になっています。
モデルとの契約になったデザインシステム
約70個の部品とデザイントークンからなるカタログが、モデルに使ってよい語彙として渡され、コンパイラがその語彙で出力を検査します。その結果、生成されたUIはWebとモバイルのどちらでもChatGPTの他の画面と同じ見た目になります。工夫のしどころは、プロンプトから、カタログと出力形式の設計、そしてサンドボックスの安全設計に移っています。
5つの比較軸
名前で分類するより、次の5つの軸で各実装の位置を見るほうが実務では役に立ちます。
| 軸 | 一方の端 | もう一方の端 |
|---|---|---|
| 形の決定 | 開発者が配線する | モデルが毎回選ぶ |
| UIの実体 | 決まった部品 | 宣言的なJSON、状態を持つプログラム、任意のHTML |
| 操作の処理 | 毎回エージェントへ戻る | クライアント内で完結する |
| 見た目の統制 | iframeの中で自由に描く | カタログとトークンで検査する |
| ストリーミング | 完成してから表示する | 書きかけでも差分で描画する |
この軸で、ChatGPT、Open Intelligent UI、json-render、そして僕が関わるワークスペースの主な描画経路を並べると次のようになります。
| 軸 | ChatGPT | Open Intelligent UI | json-render | 業務向けワークスペース |
|---|---|---|---|---|
| 形の決定 | モデルが文章と部品を混ぜて書く | 外部ルーターが毎回選ぶ | ライブラリは関与しない | モデルが判断する。ただし明示的に頼まれた場合だけ |
| UIの実体 | 状態を持つプログラム | 表はA2UI、他はiframeのHTML | 状態や式を持てる宣言的なJSON | 値だけを持つJSON(約16部品) |
| 操作の処理 | ローカル操作はクライアント内で完結。送信は新しいターン | iframe内で完結し、送信は新しいターン | 組み込みの操作はクライアント内で完結 | フォーム入力の保持だけ。送信はエージェントへ戻る |
| 見た目の統制 | カタログとトークンで検査 | CSSの注入とプロンプトの指示 | zodのカタログ。描画時の検査はホスト側 | サーバーとクライアントの両方で検査 |
| ストリーミング | キー付きの状態を保って差分描画 | 書きかけのHTMLに差分を適用 | JSON Patchを1行ずつ適用 | 部品ごとに段階描画し、フォームは完成まで隠す |
json-renderは、ChatGPTとCopilotKitの中間に位置します。JSON Pointerで参照する状態、双方向のバインド、条件による表示切り替え、状態を書き換える組み込みの操作を、データだけで表現できます。モデルが生成した任意のJavaScriptを実行しないため、そのコードを隔離するサンドボックスは不要です。表現できる範囲は、カタログ、式の言語、ホストが登録した関数に限られます。
業務向けワークスペースの位置
僕が関わるワークスペースは、アプリが持つ部品カタログから組み立てたJSONを、表示専用のツールで受け取る方式です。モデルが書いたHTMLやコードは実行しません。以前はjson-renderを使っていましたが、移行の過程で状態のバインド、条件による表示、繰り返しをやめ、値だけを受け取る形にしています。いまの表示は、カタログを用意してモデルにJSONで設計図を書かせるだけで足りていて、これらの機能を使う場面がなかったためです。
5つの軸で見ると、見た目の統制はChatGPTと同じ側にあります。出力はサーバーとクライアントの両方でスキーマとグラフ構造を検査され、検証済みのUIは会話履歴に保存されて、再読み込み後も同じ形で復元されます。フォームの送信は承認フローにつながっています。
一方で、形の決定と操作の処理は、意図して控えめにしています。可視化はユーザーが明示的に頼んだときだけで、既定の回答は文章です。フォーム以外にクライアント側の状態はなく、計算機や絞り込みのような、その場で使える道具は作れません。図を修正するときも、前のUIへの差分ではなく、完全な文書をもう一度出力します。
業務で使うシステムでは、検証、保存、承認の仕組みがいちばん大事で、この部分はCopilotKitのテンプレートより厳格です。足りないのは、回答を道具にするための、クライアント内で完結するロジックです。
業務システムでの進め方
ChatGPTの方向に寄せるとしても、iframeに任意のJavaScriptを入れる方式から始める必要はないと考えています。json-render程度の宣言的な状態、つまり値のバインド、条件による表示、状態を書き換える組み込みの操作をカタログに戻せば、絞り込みや比較の切り替えを作れます。
計算機には、ホスト側の計算実装も必要です。たとえばjson-renderの$computedで登録済みの計算関数を呼ぶか、ホストが計算用の部品を用意します。モデルに任意のコードを実行させず、検証と保存の仕組みを保ったまま広げられるはずです。
状態のバインドや条件による表示は、いまの表示には不要だったのでやめた機能です。回答を道具にしたくなったら、そのときにどう戻すかを改めて考える必要があります。
おわりに
Intelligent UIは、Generative UIをChatGPTの通常の回答体験に統合した実装だと考えています。部品も、モデルが回答の形を選ぶ能力も、手元で動く道具を作る仕組みも以前からありました。今回注目しているのは、それらをChatGPTのデザインシステムやストリーミングと組み合わせ、対応するChat体験の標準機能として展開したことです。
半年前の記事では、Generative UIの難所は描画ではなく状態にあると書きました。ChatGPTのキー付きの状態は、そのうち生成途中の入力保持に答えを示しています。公式ヘルプによれば、再読み込み後の状態保持は部品によって異なり、会話間では保持されません。保存・共有・監査・承認の仕組みは、引き続き設計する必要があります。自分たちのプロダクトでどこまでやるかは、名前ではなく、5つの軸のどこに立つかで決めることになります。