0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2 + Docker + React開発でHot Reload

Posted at

はじめに

Windows + WSL2 + Docker で React アプリを開発していると、ソースを保存しても Hot Reload が効きませんでした。

これは、ファイル監視ライブラリ chokidar が Linux(WSL2やDocker)から見た Windows 側のファイル変更をうまく検知できないために発生します。

そんなときの対処法を紹介します。

環境

  • OS:Windows 11
  • WSL2(Ubuntu)
  • Docker CE
  • React(create-react-app
  • ソースコードは Windows 側に配置

問題:Hot Reload が効かない

Docker コンテナからバインドマウントされた Windows 側のソースは、Linux 側からはネイティブなファイル監視が効かないため、React の開発サーバーで使用されている chokidar による変更検知がうまく動作しません。

解決策:CHOKIDAR_USEPOLLING を使う

CHOKIDAR_USEPOLLING=true

この環境変数を使うことで、chokidar はネイティブ監視を諦めて、ポーリング方式(定期チェック)でファイル変更を検知するようになります。

ポーリングの欠点と改善:CHOKIDAR_INTERVAL

デフォルトではポーリング間隔が非常に短いため、CPU使用率が上がってしまうことがあります。

CHOKIDAR_INTERVAL=1000

と設定すれば、ポーリング間隔が1秒になり、負荷が大きく下がります。開発時には十分な応答性があります。

Docker Compose での設定方法

docker-compose.yml に次のように環境変数を追加します:

version: '3'
services:
  frontend:
    build: .
    volumes:
      - .:/app
    working_dir: /app
    ports:
      - "3000:3000"
    environment:
      - CHOKIDAR_USEPOLLING=true
      - CHOKIDAR_INTERVAL=1000
    command: npm start

その他の設定方法

.env.development を使う

CHOKIDAR_USEPOLLING=true
CHOKIDAR_INTERVAL=1000
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?