⚙️

SharePoint Framework のデプロイを自動化する

に公開

はじめに

2017 年 11 月に SharePoint ALM API が提供されました。これにより、SharePoint アプリ (アドイン) や SharePoint Framework のアプリのビルドとデプロイを自動化できるようになりました。

https://docs.microsoft.com/ja-jp/sharepoint/dev/apis/alm-api-for-spfx-add-ins?WT.mc_id=M365-MVP-5002941

実際にどのようになるかを試してみました。

サンプル コード

https://github.com/karamem0/samples/tree/main/sharepoint-framework-deploy-solution

実行手順

前提として gulp がインストールされている必要があります。

  • マニフェストの cdnBasePath を書き換える
  • npm パッケージを復元する
  • ソース ファイルをビルド (gulp bundle) する
  • ソリューション パッケージを作成 (gulp package-solution) する
  • ソース ファイルをアップロードしする
  • ソリューション パッケージをアプリ カタログにアップロードする
  • ソリューション パッケージを展開する
  • ソリューション パッケージをインストールする

OAuth について

SharePoint の場合、Azure AD に登録したアプリではクライアント シークレットを使った Client Credentials Grant は利用できません。正確にはアクセス トークンは取得できますが、アクセス トークンを使って API を呼び出すと Unsupported app only token. というエラー メッセージが返されます。

https://blog.mastykarz.nl/azure-ad-app-only-access-token-using-certificate-dotnet-core

証明書を使う方法もありますが、手順が煩雑なため、SharePoint で提供されている OAuth (Azure ACS に基づいた承認フロー) を使用します。

https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread?WT.mc_id=M365-MVP-5002941

AppRegNew.aspx からアプリを登録します。

AppInv.aspx からアクセス許可を設定します。AllowAppOnlyPolicy="true" とする必要があります。

アクセス許可を付与します。

これでクライアント シークレットを使ってアクセス トークンを取得する準備が整いました。URL は https://login.microsoftonline.com ではなく https://accounts.accesscontrol.windows.net となります。また client_id や resource に設定する値も Azure AD とは異なるため注意が必要です。[1]

おわりに

SharePoint Framework でも CI/CD を実現できるようになったことは非常に有用です。今回はすべてスクリプトで実装しましたが、Azure DevOps などの CI/CD サービスでも同様に実行できます。

脚注
  1. このあたりの実装を詳しく知りたい場合は TokenHelper.cs を確認してください。 ↩︎

Discussion