前回の続き——サーバーの「土台」に目を向ける

前回の続き——サーバーの「土台」に目を向ける

前回のJ-02では、サーバーを、入口として接続を受けるWebサーバー層と、アプリ固有の処理を実行するアプリケーションサーバー層に分けて捉えました。今回はそのアプリケーション層を動かしている土台そのものに目を向けます。カテゴリBのプロセスやファイル、カテゴリCのポート、カテゴリEの関数といった部品が、ここで一つの実行環境に合流します。サーバーの正体を、道具の名前ではなく「何を実行する土台か」という視点で掴んでいきましょう。

このスライドのポイント

  • J-02: サーバーを「入口のWebサーバー層」と「処理を実行するアプリケーションサーバー層」に分けた
  • 今回はそのアプリケーション層を動かしている土台そのものを見る
  • カテゴリB・C・Eで別々に学んだ部品が、ここで一つの実行環境に合流する

ランタイムとNode.jsの定義

ランタイムとNode.jsの定義

ランタイムとは、プログラムを実行するための土台となる環境です。B-10で「後で正式に定義します」と予告した用語の、正式な定義です。そしてNode.jsは、F-01で触れたとおり、JavaScriptをサーバー側で動かすためのランタイムです。ブラウザの中で動くJavaScriptにはできないことが、Node.jsにはできます。たとえば、ファイルの読み書き(B-04)、ネットワーク接続の待ち受け(C-04)、環境変数の読み取り(B-09)です。

このスライドのポイント

  • ランタイム=プログラムを実行するための土台となる環境(B-10で予告した用語の正式定義)
  • Node.js=JavaScriptのサーバー側ランタイム(F-01の再訪・深掘り)
  • ブラウザにはない能力: ファイルの読み書き(B-04)/ネットワーク接続の待ち受け(C-04のポートで待つ)/環境変数の読み取り(B-09)

なぜ知る必要があるか

なぜ知る必要があるか

この違いを知らないと、フロント用のコードとサーバー用のコードを取り違える危険が、具体的な実害として見えてきません。F-01で学んだ「動く場所が違う」という話が、なぜ事故につながるのかが腹落ちしないのです。ブラウザ向けのコードにサーバーでしか動かない処理を混ぜれば、当然その処理は動きません。また、B-10で触れたバージョンの差による問題も、主な舞台はこのランタイムです。土台が違えば、同じコードでも結果が変わり得ることを押さえておきましょう。

このスライドのポイント

  • 知らないと: フロント用コードとサーバー用コードの取り違え(F-01)の実害が具体的に見えない
  • 「動く場所が違う」処理を混ぜると動かない
  • バージョン差の問題(B-10)の主戦場もこのランタイム

構造——ブラウザ実行とNode.js実行の能力比較

構造——ブラウザ実行とNode.js実行の能力比較

ブラウザでの実行と、Node.jsでの実行の能力を比べます。画面の操作はブラウザ側の得意分野で、Node.jsは画面を持ちません。一方、ファイルの読み書き、ポートでの待ち受け、環境変数の読み取りは、Node.js側にしかできません。特に重要なのが秘密情報の扱いです。ブラウザのコードは利用者に丸見えなので秘密を置けませんが、Node.jsなら環境変数を通じて安全に扱えます。この能力の差が、どの処理をどちら側に書くべきかを判断する基準になります。

処理の流れ——経費アプリのサーバーで合流する部品

処理の流れ——経費アプリのサーバーで合流する部品

具体例として、経費アプリのサーバーを見てみましょう。このサーバーは、Node.jsが3000番ポート(C-04)で待ち受けている状態です。そこへリクエストが届くと、その内容がJavaScriptの関数(E-07)へ渡されて処理されます。ここで、Bのプロセス、Cのポート、Eの関数、FのNode.jsという、別々に積み上げてきた部品が一つに合流します。サーバーとは、この土台の上で「待って、呼ぶ」を繰り返している存在なのです。

このスライドのポイント

  • 経費アプリのサーバー: Node.jsが3000番ポート(C-04)で待ち受ける
  • リクエストが届くと、その内容がJavaScriptの関数(E-07)へ渡されて処理される
  • ここでB(プロセス)・C(ポート)・E(関数)・F(Node.js)の部品が一つに合流する

技術サンプル——最小の待ち受け

技術サンプル——最小の待ち受け

サンプルコードで「待って、呼ぶ」の骨組みを見ます。要点は二つです。一つ目は、指定したポート番号で接続を待ち受けること。二つ目は、リクエストが一件届くたびに、それを処理する関数が呼ばれることです。つまりサーバーの正体は、ポートで待って関数を呼ぶプロセス(B-02)です。なお、これは擬似コードで、実際の書き方はサーバーの枠組みによって変わります。AIにサーバーコードを作らせたら「このサーバーはどのポートで待ち、リクエスト一件ごとに何が実行されますか」と聞いて確かめましょう。

混同しやすい——言語・ランタイム・枠組みの3層

混同しやすい——言語・ランタイム・枠組みの3層

混同しやすいのが、JavaScriptとNode.jsと、サーバーの枠組みの関係です。この三つは、積み重なった別々の層です。一番下にあるのがJavaScriptという言語そのもの。その上に、JavaScriptをサーバーで実行する土台であるNode.jsというランタイム。さらにその上に、処理を組み立てやすくするサーバーの枠組みという道具が乗ります。この三層を区別できると、エラーが言語・土台・道具のどの話なのかを切り分けられます。

このスライドのポイント

  • JavaScript(言語)=文法そのもの
  • Node.js(ランタイム)=JavaScriptをサーバーで実行する土台
  • サーバーの枠組み(その上の道具)=処理を組み立てやすくする道具
  • 3つは積み重なった別々の層。区別できるとエラーがどの層の話か切り分けられる

バイブコーディングでの確認点

バイブコーディングでの確認点

確認点です。サーバーのエラーをAIに相談するときは、Node.jsのバージョン(B-10)を必ず添えてください。土台のバージョン差が原因のことは珍しくないからです。また、「ポートが使用中です」というエラーは、B-02とC-04の知識があれば、別のプログラムがそのポートを使っている、と自分で切り分けられます。AIへの質問例は「このエラーはどのNode.jsバージョンを前提にした回答ですか」です。土台を知るほど、AIに頼る前に自力で判断できる範囲が広がります。

このスライドのポイント

  • サーバーのエラー相談では、Node.jsのバージョン(B-10)を必ず添える
  • 「ポートが使用中です」はB-02のプロセスとC-04のポートの知識で自力切り分けできる
  • 土台の知識があるほど、AIに頼る前に自分で判断できる範囲が広がる

まとめと次回

まとめと次回

一問一答です。プログラムを実行する土台となる環境を、何と呼ぶでしょうか。……答えは、ランタイムです。30秒まとめです。Node.jsはJavaScriptのサーバー側ランタイムで、ブラウザにはないファイル・ポート・環境変数・秘密情報を扱う能力を持ち、その上でサーバーは「ポートで待って関数を呼ぶ」を繰り返します。次回のJ-04では、リクエストを処理へ振り分ける仕組み、ルートとハンドラーへ進みます。関連資料は「Webアプリ構築 完全ワークフロー」と「AI開発ワード100」です。

このスライドのポイント

  • 一問一答: プログラムを実行する土台となる環境を何と呼ぶ? → ランタイム
  • 30秒まとめ: ランタイム=実行の土台/Node.js=JavaScriptのサーバー側ランタイム/ブラウザにない能力(ファイル・ポート・環境変数・秘密情報)を持ち、その上で「待って、呼ぶ」を繰り返す
  • 次回J-04: 届いたリクエストの振り分け=ルートとハンドラー
  • 関連資料: 「Webアプリ構築 完全ワークフロー」「AI開発ワード100」