Docker環境で開発したReactアプリをGithubPagesにデプロイする方法

はじめに

こんにちは!Akira(彰)です!
今回はReactアプリのGithubPagesへのデプロイ手順を解説していきます。
今回の前提環境としては以下となります。

前提環境

  • React: ver18.2.0
  • Docker
FROM node:lts
WORKDIR /usr/src/app
version: "3.9"
services:
  app:
    container_name: react-app
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
    - type: bind
      source: ./
      target: /usr/src/app
    command: sh -c "cd react-app && yarn start"
    ports:
      - 3000:3000
    stdin_open: true
docker-compose run --rm app sh -c 'npx create-react-app react-app'

以上の環境で構築しているものと考え、解説の方を行っていきます!

問題点

以上の環境で構築した場合、ディレクトリ構成は以下のようになっていると思います。

git_dir/
 ├ react-app/
 │  ├ node_module/
 │  ├ public/
 │  ├ src/
 │  ├ .gitignore
 │  ├ package-lock.json
 │  ├ package.json
 │  └ README.md
 ├ Dockerfile
 └ docker-compose.yml

実はこのディレクトリ構成の問題として、ビルドしたファイルが下記のように作成されるためGithubPagesにデプロイした際、ビルドしたファイルを拾ってくれないという状態になります。

git_dir/
 ├ ○ docs/ <= 本来ここにあってほしい
 ├ react-app/
 │  ├ x docs/ <= 実際にビルドされるファイル
 │  ├ node_module/
 │  ├ public/
 │  ├ src/
 │  ├ .gitignore
 │  ├ package-lock.json
 │  ├ package.json
 │  └ README.md
 ├ Dockerfile
 └ docker-compose.yml

この問題を解決するには git_dir 直下にビルドされたファイルを置く必要があります。

この問題と解決方針を前提に次に進みます。

ローカル側での設定

それでは実際にファイルに記述を追加してGithubPagesへデプロイできるようにしていきます。
まずは package.json を下記のように編集してください。

{
+ "homepage": "https://<GitHubアカウント名>.github.io/<リポジトリ名>/",
  "name": "react-app",
  "version": "0.1.0",
  "private": true,
   // 中略

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
+   "rm": "rm -rf ../docs",
+   "mv": "mv build ../docs",
+   "deploy": "npm run rm && npm run build && npm run mv"
  },
  // 後略
}

この記述でビルドしたファイルを docs にリネーム後、git_dir 直下に移動させることができます。
この記述が完了後、下記コマンドを実行しアプリをビルドすると方針通り下記のようなディレクトリ構成になると思います。

docker-compose run --rm app sh -c 'cd react-app && npm run deploy'
git_root_dir/
 ├ docs/
 ├ react-app/
 │  ├ node_module/
 │  ├ public/
 │  ├ src/
 │  ├ .gitignore
 │  ├ package-lock.json
 │  ├ package.json
 │  └ README.md
 ├ Dockerfile
 └ docker-compose.yml

この状態で変更をコミットし、プッシュすることでローカル側の手順は完了です。

Githubでの設定

次はGithubPagesの設定を行っていきます。
プッシュしたGithubリポジトリに移動後、Settings > Pages に移動し下記画像を参考にし設定します。

上記画像の Branch からビルドの変更が含まれるブランチを選択し、フォルダが /root となっているところを /docs に変更し Save をクリックします。

すると該当ブランチでデプロイが走り、完了後Pagesにデプロイ後のページにアクセスできるURLが表示されるので確認してください。(1~5分ぐらい待ちます)

以上の手順でデプロイ先URLで正しく動作確認できれば完了となります!お疲れ様でした!

おわりに

Docker環境でreactをセットアップした際のディレクトリ構成は少し面倒なので今回のような手順を踏む必要があります。
gh-pagesを使うなどの手段もあるとは思いますがDockerで扱う場合、コンテナ内でのGit連携が必要だったので今回のようにすることにしました。
長くなりましたが、ここまで読んでいただきありがとうございました!