Azure ポータル「すべてのサービス」等から「静的 Web アプリ / 新規」を選択
「プロジェクトの詳細」などは状況にあわせて入力
「デプロイの詳細」で「GitHub アカウントでサインイン」を選択
main
(他の値でも可)「ビルドの詳細」が入力できるようになるので
「プリセット」で「React」を選択すると以下の項目を入力することになる。
next.config.js
の場所でよいもよう(今回は/
)next export
されるディレクトリ(今回は out
)Azure 上で新規追加の処理を実行すると、ソースとなったリポジトリには以下のような変更が加えられる。
.github/workflow/azure-static-web-app-XXXXX.yaml
など)GitHub Pages へデプロイしていたなら多くの場合は上記ワークフローでデプロイできるが、今回は CMS の API シークレット等を利用するための調整が必要となる。
コンテンツのソースを CMS から取得する場合、リポジトリや Environment に登録したシークレットを利用することが多い。
今回のアプリでもenv
経由でビルドステップへ設定する。
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_CALM_BAY_089CD8B10 }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
# << snip >>
env:
API_BASE_URL: ${{ secrets.API_BASE_URL }}
GET_API_KEY: ${{ secrets.GET_API_KEY }}
CMS 側からの更新通知は repository_dispatch
経由になっているので、必要であれば Azure のワークフローにイベントを追加する。なお、デフォルトブランチで起動されるので、「分岐」にmain
を選択したアプリで定義すると混乱が少ない(かな)。
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
repository_dispatch:
types: [ghp_az-swa]
jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') || github.event_name == 'repository_dispatch'
runs-on: ubuntu-latest
name: Build and Deploy Job
デプロイはリポジトリ上でプルリクエストを操作することで行われる。
プルリクエストへの操作によりデプロイされる「環境」が変化する。
なお、今回はプルリクエストとは別に Webhook にも対応させているが、この場合は「運用環境にデプロイ」される。
アドレス(URL) は Azure ポータルからアプリの「環境」を開くことで確認できる(Bot による PR へのコメントでも個別に確認可能)。
GitHub Pages: https://hankei6km.github.io/test-nextjs-az-swa-01/
Azure 静的 Web アプリ
デプロイトークンはリポジトリのシークレットへ自動的に登録されているため通常は確認しないが、「Environment シークレットへ登録したい」等の場合もある。
アプリの「概要」を開き「デプロイトークンの管理」で確認できる。
せっかくなのでと少し試した感じでは「思っていたより柔軟にできる = それなりに設定を考える必要がある」ので、箇条書き程度に。
ルートは Next.js の Shallow ルーティングには対応していない(まぁそうですよね)
ログイン(プロバイダーへの接続)はデフォルトで有効になっている
404
を返すようにするログイン時のクライアントは「Azure Static Web Apps(https://identity.azurestaticapps.net/)」
ロール(とユーザー)は静的 Web アプリ内での独自管理
ユーザーは招待されていなくてもアプリの .auth/login/***
を開くことで(静的 Wevb アプリに)ログインできる
ユーザーが招待に応じた時点で自動的に登録される。
自動生成されたワークフローを元にカスタマイズしやすい
next build & next export
以外でのデプロイも比較的簡単にできそうアプリは「リポジトリのブランチ」と関連付いている
ブランチ別に「独立した運用とステージング」環境を作成できる
ルートとロールによるアクセス制御
ワークフローをどこまでカスタマイズしてよいのか分かりにくい
管理する対象が Azure と GitHub に分かれる
環境の履歴が残らない
Next.js で利用するには少し工夫が必要
全般的には好感触(「良くない」も「Vercel と比べたら」という部分が多い)なので、以下のようなことも実験してく予定。