Create React Appで作成したReactアプリをGAEにデプロイする際に、少し設定ファイルの工夫が必要だったので共有します。
ざっくりした手順
yarn run build
やnpm run build
でリリースビルドを作成app.yaml
でデプロイ時の設定を指定gcloud app deploy
でGAEにデプロイ
通常これらはCI上で行われるべきものですが、手元の開発環境でも実行できます。
(今回、手順3.の詳細は説明しません)
yarn build
でリリースビルドを作成
Create React Appで作成したReactアプリでは、build
コマンドを実行することで、簡単にリリースビルドを作成することができます。
リリースビルドの成果物はだいたい以下のような構造になっています。
build
├ static
└ js
├ ~~~~.js
├ ...
└ ~~~~.js
├ asset-manifest.json
├ favicon.ico
├ manifest.json
├ ...
└ service-worker.js
css
がある場合はstatic
の下にcss
ディレクトリができるかもしれません(未確認)
app.yaml
でデプロイ時の設定を指定
URLとリリースビルドの成果物のマッピングを行うため、handlers
の設定が必要です。
設定ファイルを以下のようになります。
app.yaml
runtime:nodejs10instance_class:F1automatic_scaling:max_instances:1min_instances:1default_expiration:'30d'handlers:-url:/staticstatic_dir:build/static-url:/(.*\.(json|ico|js))$static_files:build/\1upload:build/.*\.(json|ico|js)$-url:.*static_files:build/index.htmlupload:build/index.html
handlers
の設定では、
/static
にはリリースビルド成果物のbuild/static
マッピング/(.*\.(json|ico|js))$
にはリリースビルド成果物のbuild/.*\.(json|ico|js)$
をマッピング- 正規表現を使っています(ここでは拡張子がjson, ico, jsのいずれかのファイルのみアップロードしてマッピングしています)
- 上記以外のURLには、
build/index.html
をマッピングします- この設定がないと、アドレスバーから直接特定の子ページに移動する際、404エラーが発生する場合があります
なお、お試し用なので、マシンタイプをF1
に、インスタンスをオートスケールしないように設定しています。
それがこの部分です。
instance_class: F1
automatic_scaling:
max_instances: 1
min_instances: 1
また、default_expiration
ではキャッシュを指定します(ここではキャッシュ期間を30日に指定しています)
gcloud app deploy
でGAEにデプロイ
後は、以下のコマンドを叩けば手元のbuildディレクトリ以下のファイルがGAEにデプロイされます。
gcloud app deploy