- 個人で開発する分にはCodesandbox等々でもデプロイされたアプリをプレビューできますが、構成管理としてちゃんとリポジトリのmasterに入っている成果物の出来を確認しておきたいという場合や、チームで開発する場合には有効かと思います。
- アプリケーション、及びパイプラインの定義ファイルはこちらのリポジトリに格納しています。
はじめに
前提
- 環境
- ローカル:Windows 10 Home
- Gitリモートリポジトリ:GitHub
- Reactアプリ開発環境:Codesandbox
- ブラウザ上でコードの実装とリアルタイムプレビューができる開発環境です。GitHubとも連携できます。無料。
- 知識
- Gitはわかる
- GitHub Actionsがどんなものかはざっくり知っている
- JS、ReactについてHello Wolrdレベルには知っている
実現したこと
- GitHubリポジトリのmasterブランチにReactアプリのソースコードをプッシュすると、それをトリガーにしてGitHub Pagesにアプリがデプロイされる(つまり変更を勝手にデプロイしてくれる)
- Reactのアプリの中身自体はHello World程度です。
- PagesのURLにアクセスすると、デプロイされたアプリをブラウザから確認できる
やったこと
- CodesandboxでReactアプリを実装
- GitHubリポジトリの作成
-
.github/workflows
にパイプラインを記述したyamlファイルを作成 - pagesで見えるようにするための作業
- 動作確認
CodesandboxでReactアプリを実装
- Codesandboxにアクセス
-
Create Sandbox
から、Reactのテンプレートを選択 - Hello World的なReactアプリが生成される
- jsを編集して保存するとそのプレビューが即座に右側に表示されます。
- メニューからGitHubっぽいマークを選び、
Export to new GitHub repository
を選択。適当にリポジトリ名を入れるとGitHub側にリポジトリが作成され、ソースコード類が格納されます。
.github/workflows
にパイプラインを記述したyamlファイルを作成
アプリのソースコードのmaster
ブランチへのプッシュ・マージをトリガーとして、reactのビルド成果物をPagesに自動デプロイするための処理を作成します。
ここでやろうとしているのは、Reactアプリをyarn build
でビルドし、ビルド成果物フォルダをパブリッシュするという処理です。
- リポジトリ直下に、
.github/workflows/deploy-to-pages.yml
を作成します。- ymlファイル名は任意です。
- 以下のような感じで
deploy-to-pages.yml
にパイプラインを定義します。
.yml
name: deployment to pages
# masterブランチへのプッシュをトリガー設定
on:
push:
branches: [ master ]
# 実行する処理の設定
jobs:
build-deploy:
# The type of runner that the job will run on
runs-on: ubuntu-latest
steps:
# ソースコードを取得
- uses: actions/checkout@v2
- name: setup node
uses: actions/setup-node@v1
with:
node-version: "12.x"
- name: cache dependencies
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node-
# パッケージのインストール
- name: install
run: yarn install
# Reactアプリのビルド
- name: build
run: yarn build
# ビルド成果物をpagesにデプロイ
- name: deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./build
- 最後のデプロイステップで使っているpeaceiris/actions-gh-pagesは、GitHub ActionsでGitHub Pagesにデプロイすることに特化したアクションです。
pagesで見えるようにするため作業
GitHubでPagesを有効化
- 前準備としてGitHubで
gh-pages
ブランチを作成しておきます。- デプロイ時に使っている
peaceiris/actions-gh-pages@v3
では、公開対象のビルド成果物をgh-pages
ブランチに格納するので、その前準備としての作業です。
- デプロイ時に使っている
- GitHubリポジトリのsettings→GitHub Pagesで、
gh-pages
ブランチの公開を有効化します。 - これで、
https://<ユーザーアカウント名>.github.io/<リポジトリ名>/
にアプリが公開されます。- URLを変える方法はありますが、ここでは割愛し、デフォルトで生成されるURLを使います。
HTMLが外部のJSを読み込めるようにする
- HTMLが外部のJSを読みこむ際には、そのJSを相対参照で指定する必要があります。
- 元のReactアプリをそのままビルドすると絶対パスになってしまい、JSが読み込めません。
-
<script src="/./static/js/2.b06abf86.chunk.js"></script>
ではだめで -
<script src="./static/js/2.b06abf86.chunk.js"></script>
と書かなければいけません。
-
- それを解消するために、
package.json
に以下のように"homepage": "./",
を追記します。
.json
{
(前略)
"main": "src/index.js",
"homepage": "./",
"dependencies": {
"react": "16.13.1",
(後略)
}
動作確認
必要な設定が全て終わったので、動作を確認してみます。