💻

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

2022/01/01に公開

はじめに

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 について

毎度出てくる 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_idresource に設定する値も Azure AD のお作法とは異なりますので注意が必要です。[1]

脚注
  1. このあたりの実装を詳しく知りたい場合は TokenHelper.cs を確認する必要があります。 ↩︎

Discussion