Azure Static Web Apps に Blob Storage で公開していたコーポレートサイトの移行で爆速に！！

## 前置き

2021 年 5 月に [Static Web Apps](https://azure.microsoft.com/ja-jp/services/app-service/static/?WT.mc_id=AZ-MVP-5001601) が GA(一般公開) されました。
Azure でブログやコーポレートサイトをホスティングする際、今までは [Blob Storage](https://azure.microsoft.com/ja-jp/services/storage/blobs/?WT.mc_id=AZ-MVP-5001601) を利用していましたが、[Static Web Apps](https://azure.microsoft.com/ja-jp/services/app-service/static/?WT.mc_id=AZ-MVP-5001601) が GA(一般公開) されたので、移行してみました。

## What is [Static Web Apps](https://azure.microsoft.com/ja-jp/services/app-service/static/?WT.mc_id=AZ-MVP-5001601) ?

Vue.js、React、Angular、Go などのフレームワークで開発されたアプリや JavaScript、TypeScript などで開発する SPA（Single Page Application) などのアプリケーションを GitHub や Azure DevOps のリポジトリから自動的にビルド & デプロイするサービスです。

機能や特徴は以下の通りです。

* 無償で Web アプリ、静的 Web サイト/コンテンツをホスティングできる
* グローバル配信(ユーザーに近いリージョンに配置)
* Azure Functions などのサーバーレス API の対応をサポート
* Azure AD、GitHub、Twitter 等の認証プロバイダーとの統合をサポート
* リポジトリの変更をトリガーとした、CI/CD が可能
    * プレビューデプロイ機能（Pull Request したブランチも自動的にデプロイされ、どのように表示されるのかが確認できる）
* 無償でカスタムドメイン対応
* 無償で SSL 証明書の自動更新が可能

詳細は[公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/static-web-apps/?WT.mc_id=AZ-MVP-5001601) をご覧ください。

[Static Web Apps の価格](https://azure.microsoft.com/ja-jp/pricing/details/app-service/static/?WT.mc_id=AZ-MVP-5001601)ですが、カスタム認証や、SLA が不要であれば基本的には無料枠で必要な機能の利用が可能になります。

※ 個人ブログは無料枠で、コーポレートサイトは SLA のために、有料にしています

## 移行にあたって行った作業のドキュメント

* [Hugo サイトを Azure Static Web Apps に発行する](https://docs.microsoft.com/ja-jp/azure/static-web-apps/publish-hugo/?WT.mc_id=AZ-MVP-5001601)
* [Azure DevOps を使用して Azure Static Web Apps を継続的デプロイする](https://docs.microsoft.com/ja-jp/azure/static-web-apps/publish-devops/?WT.mc_id=AZ-MVP-5001601)
* [Azure Static Web Apps で無料の証明書を使用してカスタム ドメインを設定する](https://docs.microsoft.com/ja-jp/azure/static-web-apps/custom-domain?tabs=azure-dns&WT.mc_id=AZ-MVP-5001601)

## 移行前後の状況と比較

* プロセス
    * 移行前
        * GitHub に Hugo のソースコードを push する
        * [Azure DevOps(Azure Pipelines)](https://azure.microsoft.com/ja-jp/services/devops/?WT.mc_id=AZ-MVP-5001601) がコードの変更を検知して、静的 Web サイトを生成する(CI)
        * [Azure DevOps(Azure Pipelines)](https://azure.microsoft.com/ja-jp/services/devops/?WT.mc_id=AZ-MVP-5001601) が生成された静的 Web サイトのファイルを [Blob Storage](https://azure.microsoft.com/ja-jp/services/storage/blobs/?WT.mc_id=AZ-MVP-5001601) にデプロイする(CD)
        * [Azure DevOps(Azure Pipelines)](https://azure.microsoft.com/ja-jp/services/devops/?WT.mc_id=AZ-MVP-5001601) が [Azure CDN](https://azure.microsoft.com/ja-jp/services/cdn/?WT.mc_id=AZ-MVP-5001601) のキャッシュをクリアする(CD)
    * 移行後
        * GitHub に Hugo のソースコードを push する
        * [Static Web Apps](https://azure.microsoft.com/ja-jp/services/app-service/static/?WT.mc_id=AZ-MVP-5001601) がコードの変更を検知して、デプロイする(CI & CD)

* ビルド時間
    * 移行前
        * 10分前後
    * 移行後
        * 1分前後

となり、爆速になりました！

### 移行で気になった点

移行の際に、以下のドキュメントに従い、TXT レコードを使ったダウンタイムなしで移行を試したがうまくいきませんでした。

* [TXT レコード検証を使用してドメインを追加する](https://docs.microsoft.com/ja-jp/azure/static-web-apps/custom-domain?tabs=azure-dns&WT.mc_id=AZ-MVP-5001601#add-domain-using-txt-record-validation)

結局、TXT レコードの方法を諦めて、CNAME での切り替えを行いました。

* [ドメイン プロバイダーで CNAME を構成する](https://docs.microsoft.com/ja-jp/azure/static-web-apps/custom-domain?tabs=azure-dns&WT.mc_id=AZ-MVP-5001601#configure-cname-with-your-domain-provider)

### 関連記事

* [簡単にコストを節約して Web サイトを構築する方法](https://qiita.com/changeworld/items/d68ade88c2b0fa8788fe)
* [より簡単に Web アプリを構築する方法](https://qiita.com/changeworld/items/b1055ece60654e21a8d9)
* [静的 Web サイトホスティングサービス比較](https://qiita.com/changeworld/items/27bc292ec96da53fbc47)