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 では、ローカルまたは {{site-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": "SampleApplication",
"id": "35ea8428-df04-4d44-88e8-68b5ca9084da",
"version": "1.0.0.0",
"includeClientSideAssets": true,
"isDomainIsolated": false,
"features": [
{
"title": "SampleApplication",
"description": "SampleApplication web part",
"id": "ac4d0af6-b664-46ee-9da8-13ed1443fb16",
"version": "1.0.0.0"
}
],
},
"paths": {
"zippedPackage": "solution/SampleApplication.sppkg"
}
}
gulp package-solution
コマンドを実行したときに、ここの情報が読み取られ、最終的には XML 形式のファイルとしてアプリケーション パッケージに格納されます。パッケージを作ったときには debug
フォルダーにアプリケーション パッケージの中身が展開された状態で存在しますので、それを見てみると、ある程度、どういう仕組みでアプリケーション パッケージが SharePoint で展開されるかを理解することができます。
おわりに
SharePoint としては (内部的にはそれなりに手が入っているのかもしれませんが) 既存の仕組みをうまく利用しつつ SharePoint Framework を動かしていることがわかります。新しい手法にどうしても目が行きがちですが、既存の知識も決して無駄にはなっていないことは理解しておきたいと思います。
Discussion