ChatGPTの画面はどうやって動いているのか

ページを開き直していないのに画面が変わる理由

ChatGPTの画面を使っていると、不思議な感覚があります。
メニューを押しても、会話を指示しても、画面が切り替わっているのに「ページが再読み込みされていない」ように見えます。

これは錯覚ではありません。
実際にページ遷移は起きていません。

従来のWebサイトは「ページ」という単位で動いていましたが、ChatGPTのようなサービスは「アプリ」として動いています。
ブラウザの中でプログラムが実行されている状態です。

従来のWebサイトの動き

まず昔ながらのWebの動きを整理します。

1. URLをクリック
2. サーバにリクエスト送信
3. HTMLが返る
4. 画面全体が描画

この流れを毎回繰り返します。

GET /article.html
||

ページ移動とは、HTMLを丸ごと交換することでした。

* ChatGPT型の動き

ChatGPTでは最初の1回だけページを読み込みます。  
その後は、HTMLを再取得しません。

最初にダウンロードされるもの:

- HTML(骨組み)
- CSS(見た目)
- JavaScript(動作プログラム)

このJavaScriptが、画面操作・通信・描画をすべて担当します。

つまり、画面は「表示されている」のではなく、<strong>ブラウザ内で作られている</strong>のです。

* SPA(Single Page Application)

この仕組みはSPA(シングルページアプリケーション)と呼ばれます。  
1つのページのまま、内容だけを動的に書き換えます。

画面変更の実態:

>|javascript|
document.querySelector("#app").innerHTML = newContent;
||

ページを移動したのではなく、表示内容を差し替えています。

* メッセージ送信時に起きていること

送信ボタンを押すと、ブラウザはサーバに通信します。  
ただしページ遷移ではありません。

>|javascript|
fetch("/api/chat", {
  method: "POST",
  body: JSON.stringify({ message: "こんにちは" })
});
||

これは「API通信」と呼ばれます。  
HTMLを取得するのではなく、データだけを送受信しています。

* なぜ画面が速く感じるのか

ページ全体を読み込み直さないため、通信量が大幅に減ります。

従来:
- HTML
- CSS
- 画像
- JavaScript

SPA:
- 必要なデータのみ

その結果、ボタン操作に対する反応が即座になります。  
Webサイトというより、スマホアプリに近い動きになります。

* 会話がリアルタイムに表示される仕組み

ChatGPTでは、文章が一気に表示されるのではなく、少しずつ出てきます。  
これは定期通信ではありません。

サーバは生成途中のデータを分割して送り続けています。  
ブラウザは受け取るたびに画面へ追加します。

イメージ:

サーバ → 「こ」  
サーバ → 「こん」  
サーバ → 「こんにちは」

JavaScriptが到着したテキストを逐次描画しています。

* URLが変わるのにページ遷移していない理由

会話を開くとURLが変わりますが、読み込みは起きません。  
これは「履歴API」を使っています。

>|javascript|
history.pushState({}, "", "/c/12345");
||

ブラウザの履歴だけを更新し、画面はそのままです。  
戻るボタンが使えるのはこのためです。

* 注意点:JavaScriptが止まると何もできない

SPAの弱点もあります。  
JavaScriptが動かないと、画面操作が成立しません。

- 古いブラウザ
- 拡張機能の干渉
- スクリプトブロック

この場合、画面は表示されても操作不能になります。

* よくある誤解

「サーバがすべて描画している」と思われがちですが、実際にはブラウザが多くの処理を担当しています。

サーバ:データ生成  
ブラウザ:画面生成

役割が分かれています。

* まとめ:Webサイトとアプリの境界

ChatGPTの画面は、Webページを見ている感覚でも、仕組みはアプリケーションです。  
ブラウザは単なる閲覧ソフトではなく、プログラム実行環境として動いています。

私たちはサイトを操作しているつもりですが、実際にはブラウザ内のプログラムを操作しています。