からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

SharePoint Framework の展開について理解する

SharePoint Framework は npm、gulp、yo といった、これまでの SharePoint 開発ではなかったフロントエンドの技術を使っているため、そういう点についてばかりフォーカスがされてしまいますが、SharePoint Framework で作成したアプリがどのように展開されるかについてはあまり語られることがないと思います。どのような仕組みでアプリが展開され使用できるようになるのかを見てみたいと思います。

アプリ カタログ サイトへのデプロイ

SharePoint Framework が登場する以前の開発手法として SharePoint アドインというものがありました。SharePoint アドインでは、ファーム (SharePoint Online の場合はテナント) ごとに用意されたアプリ カタログ サイトにアプリケーション パッケージ (.app) をアップロードすることで、他のサイトからアプリをインストールできるようになります。SharePoint Framework でもこれと同じ仕組みを使用します。ただし、SharePoint アドインとは異なり、アプリケーション パッケージの拡張子は .sppkg となります。*1 SharePoint Online では、アプリ カタログ サイトのほかに、サイト コレクションのアプリ カタログも設定すれば、設定したサイト コレクションのみで展開可能なアプリ カタログを使用できるようになります。

SharePoint アドインでは、開発のための開発者サイトというものが存在していましたが、SharePoint Framework では開発者サイトは必要ありません。その代わり、SharePoint Framework では、ローカルまたは "{{サイトのURL}}/_layouts/15/workbench.aspx" にアクセスすることで、Web パーツをデバッグすることができます。

サイトへのインストール

アプリをサイトにインストールすると、[サイトの機能] にインストールしたアプリの機能が追加されているのがわかると思います。*2 このことから、インストールしたアプリはサイトの機能として管理されているということがわかります。

[サイトの機能] に表示される名前や説明は SharePoint Framework の package-solution.json で指定できます。Web パーツの場合、既定では package-solution.json には含まれていませんが、以下のように features という要素を追加します。

{
  "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
  "solution": {
    "name": "MyApplication",
    "id": "35ea8428-df04-4d44-88e8-68b5ca9084da",
    "version": "1.0.0.0",
    "includeClientSideAssets": true,
    "isDomainIsolated": false,
    "features": [
      {
        "title": "MyApplication",
        "description": "MyApplication web part",
        "id": "ac4d0af6-b664-46ee-9da8-13ed1443fb16",
        "version": "1.0.0.0"
      }
    ],
  },
  "paths": {
    "zippedPackage": "solution/MyApplication.sppkg"
  }
}

"gulp package-solution" コマンドを実行したときに、ここの情報が読み取られ、最終的には XML 形式のファイルとしてアプリケーション パッケージに格納されます。パッケージを作ったときには debug フォルダーにアプリケーション パッケージの中身が展開された状態で存在しますので、それを見てみると、ある程度、どういう仕組みでアプリケーション パッケージが SharePoint で展開されるかを理解することができます。

まとめ

SharePoint としては (内部的にはそれなりに手が入っているのかもしれませんが) 既存の仕組みをうまく利用しつつ SharePoint Framework を動かしていることがわかります。新しい手法にどうしても目が行きがちですが、既存の知識も決して無駄にはなっていないことは理解しておきたいと思います。

*1:アプリケーション パッケージは "gulp package-solution" コマンドで作成します。

*2:通常は有効になっていますが、何らかの理由で無効にすると Web パーツが一覧に出てこないということがあります。お気を付けください。