Loading

ROUTE

ルートゼロの
アクティビティ

Webアプリの構成図を初めて描くには?ブラウザとサーバーのつながりを図解する手順

1

Webアプリを作ってみたものの、「ブラウザとサーバーはどうつながるの?」と聞かれると説明が難しい。そんなときは、複雑なクラウド構成から始める必要はありません。小さな買い物メモを題材に、実際に動かした通信だけを構成図へ書く練習をしましょう。

構成図は「どこで何が動くか」を示す地図

構成図は、ブラウザ、サーバー、データ保存先などが何を担当し、どのように情報をやり取りするかを示す図です。見栄えのよい箱を並べる前に、画面を動かして「実際に通信したもの」を確認することが大切です。

ブラウザ(クライアント)は画面を表示し、ユーザー操作を受け付けるソフトウェアです。サーバーはブラウザからの要求に応じ、HTMLなどのファイルやデータを返します。両者の間で使われる代表的な通信ルールがHTTPです。

Webの基本的な仕組みはMDNの学習資料で確認できます。ここではDNSやクラウドの詳細を追加せず、ローカルで再現可能な範囲に限定します。

(ブラウザ・サーバー・HTTPの基本については『MDN公式|ウェブのしくみ』をご参照ください)

実践:ローカルの買い物メモを動かす

Python 3とエディター、ブラウザを用意します。空のフォルダーに`index.html`というファイルを作り、次のコードを保存してください。Pythonの標準機能でHTMLを配信するだけなので、外部アカウントは不要です。

<!doctype html>
<html lang="ja">
<meta charset="utf-8">
<title>買い物メモ</title>
<h1>買い物メモ</h1>
<label>品名 <input id="item" type="text"></label>
<button id="add" type="button">追加</button>
<ul id="items"></ul>
<script>
  const input = document.querySelector('#item');
  const list = document.querySelector('#items');
  document.querySelector('#add').addEventListener('click', () => {
    const name = input.value.trim();
    if (!name) return;
    const row = document.createElement('li');
    row.textContent = name;
    list.appendChild(row);
    input.value = '';
  });
</script>
</html>

ターミナルでそのフォルダーへ移動し、次のコマンドを実行します。

python3 -m http.server 8000

ブラウザで`http://localhost:8000/`を開き、「牛乳」と入力して「追加」を押すと、一覧に「牛乳」が増える構成です。何も入力せず押した場合、追加されないようになっています。この例は学習用であり、ページを再読み込みすると追加した項目は消えます。

最初の図は「HTMLを表示する通信」だけを書く

開発者ツールのNetwork(ネットワーク)画面を開き、ページを再読み込みします。`index.html`またはDocumentに相当する項目を選び、要求URLとステータスを確認してください。正常に配信されていれば`200`が表示されるのが一般的です。

[ブラウザ]
   |  GET / (HTMLを要求)
   v
[ローカルの静的ファイルサーバー :8000]
   |  200 OK + index.html (HTMLを返す)
   v
[ブラウザで画面を表示]

この図で確認したいのは通信の向きです。要求(リクエスト)と返答(レスポンス)を別々に書き、矢印に動作の名前を付けると読み間違えにくくなります。

コード中のボタンを押したときの一覧追加は、読み込んだJavaScriptがブラウザ内で行います。追加操作のたびにサーバーへ保存する通信は、このコードにはありません。

図に描いてよいもの・描いてはいけないもの

要素 今回のサンプル 図への扱い
ブラウザ HTML表示・ボタン操作・一覧更新 描く
静的ファイルサーバー index.htmlを返す 描く
データベース 使用していない 描かない
ログインAPI 作っていない 描かない
外部クラウド 使用していない 描かない

「Webアプリならデータベースが必ずあるはず」と決めつけると、実際の作品と構成図が食い違います。リポジトリに存在するコードと、ブラウザで観測できる通信から判断してください。

もしサーバーへ保存するなら図はどう変わる?

これはまだ実装していない将来の拡張例です。買い物メモを再読み込み後も残すため、サーバー側に記録するAPIを追加した場合を考えます。

[ブラウザ]
   | POST /items (新しい品名を送る)
   v
[APIサーバー]
   | データを書き込む
   v
[データベース]
   | 書き込み結果
   v
[APIサーバー] -- 応答 --> [ブラウザ]

この図は実装済みの証拠ではありません。例えば`POST
/items`の通信処理、保存先、エラー時の応答などが実装・検証された場合に限り、完成した構成図へ取り入れます。HTTPのメソッドである`GET`は主にデータの取得、`POST`はサーバーへデータを送る操作などに使われます。

(HTTPメソッドの基本については『MDN公式|HTTP request methods』をご参照ください)

AIに構成図を作ってもらうときの検証方法

図の清書はAIに任せることもできます。最初に「存在している機能」と「今は存在しない機能」を分けて伝え、生成結果を必ず実機と照合してください。次の依頼文は、この練習用コードのために作った例です。

学習用の買い物メモの構成を、初心者向けのテキスト図で表してください。
確認済み:Pythonのhttp.serverがindex.htmlを配信する。
ブラウザ内:JavaScriptが一覧項目を追加する。
未実装:サーバーAPI、データベース、ログイン、永続保存。
矢印ごとに要求・応答・ブラウザ内部処理を区別してください。
確認できない仕組みは推測して描かず、疑問点として挙げてください。

図に不明なサーバー、認証、DBが描かれたら、説明を確認する前に取り除かないでください。何を根拠に追加したのかを尋ね、実装がないなら「未実装」と明記して修正します。Googleの技術文書ガイドでも、図を簡潔にして視線を誘導することが推奨されています。

(図の情報量と説明ラベルの付け方については『Google Technical Writing|Illustrating』をご参照ください)

つまずいたときに確認する順番

  • ページが開かない:ターミナルでサーバーが起動中か、`localhost:8000`が正しいか確認。
  • 404が表示される:コマンドを実行したフォルダーに`index.html`があるか確認。
  • 項目が増えない:ブラウザのConsoleでJavaScriptエラーを確認し、入力文字が空でないか確認。
  • 通信が見えない:Networkを開いたままページを再読み込みしてDocumentの行を見る。
  • 追加した品名が消える:この例では保存機能を実装していないため、再読み込み時に消えるのが仕様。

図を直したあとは、各矢印に対応する通信やコードが実在するか、別の人にも説明してみてください。図と実装が一致していれば、次にAPIやデータ保存を学ぶときの出発点になります。

よくある質問

Webアプリには必ずサーバーAPIが必要ですか?

必ずしも必要ではありません。ブラウザ内のJavaScriptだけで動く機能もあります。静的ファイルの配信とAPIによるデータ更新は区別しましょう。

構成図はどのツールで描けばよいですか?

最初は紙やテキストでも構いません。箱と矢印の意味を説明できるようになってから、図形ツールで清書するとよいでしょう。

Networkに複数の通信が出てくるのはなぜですか?

ブラウザの拡張機能、キャッシュ、アイコンなどの取得が含まれる場合があります。最初は自分で作ったページのDocument要求に注目してください。

次の学習:実装と図を一緒に更新する

まずはこのサンプルを自分で動かし、「ブラウザ内で行う処理」と「サーバーに依頼する処理」を色分けして書いてみましょう。APIの学習へ進んだら、通信の追加と同じタイミングで図も更新します。

(AIを使ったWeb制作の別の学習方法については『AI Web制作の自動化最前線|HTML/CSSコーディングを効率化』をご参照ください)

ルートゼロの採用情報を見る

RANKINGranking-icon

すべてを開示している会社です

ポジティブな面もネガティブな面も、包み隠さず誠実にお答えします。
気になることがあれば、面談の際にすべてオープンにお話します。