⛰️

【React】なぜ開発時にlocalhostを立てるのか

に公開

1. ローカルサーバを立てる必要がある理由

通常、HTML、CSS、JavaScriptを使用して簡単なウェブページを作成する場合、ファイルをブラウザで直接開くだけで動作します。たとえば、.htmlファイルをダブルクリックすれば、ブラウザが自動的に内容を読み込み、表示してくれます。これは、これらの技術がサーバーを介さずにブラウザ上で動作するように設計されているためです。
ではなぜ、Reactで開発するときにローカルホストを立てる必要があるのでしょうか?

1 JSXをブラウザで直接扱えない

  • JSXや最新のJavaScript構文は、そのままではブラウザが解釈できません。
  • ローカルサーバ(webpack-dev-serverVite)がトランスパイル(例:Babelを使用)し、ブラウザに理解できる形式(通常のJavaScript)で配信します。

2 シングルページアプリケーション(SPA)のルーティングをサポート

  • Reactアプリでは、/about/contactといった仮想的なルートを持つことがあります。
  • ローカルサーバは、どのルートにアクセスしてもindex.htmlを返し、React側で適切なページをレンダリングするようにします。

3 開発効率の向上

  • ローカルサーバはホットリロードや開発用ツールとの統合(例:React Developer Tools)を提供し、快適な開発体験を実現します。

2. React開発中の環境(ローカルサーバの役割)

ローカルサーバの目的

  1. 開発中のコードをリアルタイムで更新:
    • 開発中は、Reactのソースコード(JSXファイルなど)は直接ブラウザで実行できません。そのままではブラウザが理解できない形式だからです。
    • ローカルサーバは、これをリアルタイムでトランスパイル(JSX → JavaScript)し、ブラウザに提供します。
  2. ホットリロード(Hot Reloading)をサポート:
    • コードを保存するたびにアプリを自動更新してブラウザに反映します。
    • 開発者の生産性を向上させるための機能です。
  3. 模擬サーバとしての役割:
    • 外部のAPIやバックエンドサーバがまだ完成していない場合でも、ローカルサーバがモックデータを返すように設定できます。

3. 実際に何が動いているのか

ローカルサーバは以下のような役割を果たします:

1 ローカルサーバがJSの実行環境を提供している

  • 開発中に起動するローカルサーバ(npm startなど)は、webpack-dev-serverViteなどのツールによって構成されています。
  • これらは以下のことを行います:
    • JSXをJavaScriptに変換(トランスパイル)。
    • Reactアプリをブラウザに提供するためのエンドポイントを作成(例:localhost:3000)。

2 ブラウザでJSが動いている

  • 実際にReactアプリを動かしているのはブラウザのJavaScriptエンジンです(例:ChromeのV8エンジン)。
  • ローカルサーバは、変換したJavaScriptやCSS、HTMLをブラウザに送信するだけです。

つまり、ローカルサーバが「JavaScriptの実行環境」を直接提供しているのではなく、Reactコードを変換してブラウザで実行可能な形式にして提供していると言えます。


4. 本番環境との違い

  • ローカル環境(開発中):
    • ローカルサーバを使ってリアルタイムトランスパイルやホットリロードを行う。
    • 開発者用ツールやデバッグ機能がオンになっている。
  • 本番環境:
    • 事前にnpm run buildで静的ファイルに変換しておき、それをWebサーバ(NginxやApacheなど)で提供。
    • トランスパイルやデバッグ用ツールは含まれない。

まとめ

ローカルサーバを立てるということは、React開発中にコードを効率的にテストするためのサーバ環境を自分のPC上で動かすということです。具体的には、以下のような役割を果たしています:

  1. JSXや最新JavaScriptをブラウザで動く形式に変換して提供する。
  2. ホットリロードやリアルタイムでの開発体験を実現する。
  3. SPAルーティングやモックAPIなどの開発支援機能を提供する。

ただし、実際にJavaScriptが実行されているのはブラウザの中です。ローカルサーバはあくまでそのための補助役と言えます。

Discussion