SharePoint Onlineの開発・運用をしていると、モダンサイトをテンプレート化したい場面がちょくちょく発生すると思います。
- テスト用に作成したサイトを複製したい
- ガバナンスを効かせたい
- サイト作成を効率化したい
クラシックサイトではブラウザからサイトにアクセスし、サイトの設定から「テンプレートの保存」を行うことでテンプレート化することができましたが、モダンサイトではそういったGUIからのテンプレート化手段は今のところ(2022年4月)提供されていません。
ですが、PowerShellなどからコマンドを使ってテンプレート化する方法は提供されています。いくつか方法があるので整理してみたいと思います。
SPOのサイトをテンプレート化する方法
ざっくりと一覧に整理して比較すると以下の通りです。
サイトを複製したいという観点で考えると以下も候補となるでしょう。
- ブラウザからの操作で手動作成する
- サードパーティ製品の利用(あるかは知らん)
これらの方法からやりたいことやコスト、環境を考えてどの方法を使うかを考えていくことになります。
サイト テンプレート
サイトテンプレートは、Microsoftが提供しているSharePoint Online Management Shell(Microsoft.Online.SharePoint.PowerShell)を使った方法です。
サイトの設計図のような役割を持つサイトスクリプト(JSON形式)とそのサイトスクリプトを呼び出すサイトテンプレートで構成されています。サイトスクリプトは既存のサイトから生成することができ、生成したあとに必要に応じて手動で手を加えることができるため、簡単にそして柔軟に使うことができます。
サイトテンプレートはテナントに登録して利用します。テンプレートの生成やサイトスクリプト/サイトテンプレートの登録はPowerShellから行う必要がありますが、登録後はブラウザの操作から適用できるようになるため、開発者でなくサイトの管理者でも適用することが可能です。また、規定のテンプレートとして適用することもできるため、サイト払い出し時に自動的に適用されるようにすることも可能です。
公式のツールなのでサポートが期待できますので、安全安心でお手軽な方法と言えます。
ですが、良い点だけでは無いようです。サイトテンプレートはテンプレート化できることが限定的です。
使用可能なアクション
- 新しいリストまたはライブラリの作成 (またはサイトで作成された既定の変更)
- サイト列の作成、コンテンツ タイプ、およびその他のリスト設定の構成
- ナビゲーション レイアウト、ヘッダー レイアウト、ヘッダーの背景などのサイトのブランドのプロパティを設定する
- テーマの適用**
- サイト ロゴの設定
- クイック起動またはハブ ナビゲーションにリンクを追加する**
- Power Automate フローのトリガー
- アプリ カタログから展開されたソリューションのインストール
- サイトの地域設定の設定**
- SharePoint の役割にプリンシパル (ユーザーとグループ) を追加する**
- サイトの外部の共有機能の設定**
※ ** でマークされたアクションは、チャネル サイトに対して自動的にブロックされます。
出来ないこと視点で見ると、例えば以下のようなことが出来ません。
- サイトページの中身(Webパーツの配置)の複製
- アイテム(ファイル)
ページがテンプレート化できないのは痛いですよね。今後の拡張に期待です。ページなどのコンテンツも含めてテンプレート化したい場合はPnPを利用した方法を検討する必要があります。
PnP プロビジョニング
PnP プロビジョニングは、PnP PowerShellモジュールを使った方法です。
PnPによるテンプレート化の手順は、サイトテンプレートの手順と似ています。既存のサイトからサイトテンプレート(JSON形式)を作成し、必要に応じて手動でテンプレートを修正し、サイトに適用します。
サイトテンプレートと違いブラウザの操作からテンプレートの適用はできずPowerShellコマンドから適用する必要がありますが、PnPによるテンプレート化ではサイトページのWebパーツの配置やファイルやアイテムも含めたテンプレート化もできます。
例えば開発時に別の環境にサイトをコピーしたりする用途には便利な方法です。また、開発者に都度依頼する前提で問題無ければ、運用することも出来なくないです。
PnP PowerShellモジュールはSharePointやTeamsなどで使える便利なコマンドレットを提供していますが、オープン ソース ソリューションであるためMSからの公式サポートはありません。そういった意味では、問題が起こった場合に自分で解決できない場合にはおすすめできません。
また、公式モジュールではないせいか、認証やアクセス許可周りで一手間必要だったりするので公式のサイトテンプレート作成時より少しつまづくかもしれません。
サイト テンプレート×PnP プロビジョニング
サイトテンプレート、PnP プロビジョニングはそれぞれ一長一短がありますがそれを組み合わせることでさらに有用な使い方が出来(るとMSは言ってい)ます。
サイト管理者(エンドユーザー)がブラウザからサイトテンプレートを適用したら、サイトページなども含むサイトテンプレートが適用できる、みたいなことが可能。
実はサイトテンプレートで呼び出すサイトスクリプトには、PowerAutomateの呼び出しなども含めることができますので、以下のフローを作ることができます。
- ①ユーザーがブラウザからの操作でサイトにサイトテンプレートを適用
- ②サイトテンプレートが呼び出すサイトスクリプトがPowerAutomateを呼び出し
- ③PowerAutomateがAzure上に配置されたPnPのテンプレート適用コマンドのスクリプトをキック
- ④テンプレートが適用されたサイトが出来る。幸せ。
SPO、PowerAutomate、Azureなどを組み合わせる必要があるため、環境の制限や開発者の知識も幅広く必要で少しハードルは高いかもしれません。
CSOM(SharePoint クライアント オブジェクト モデル )
CSOM(SharePoint クライアント オブジェクト モデル )はSharePointでデータを取得、更新、および管理できるAPIセットです。
C#で開発する場合はCSOMを使えば良いのかもしれないですが、PnP Core CSOMライブラリなんて物があるみたいなので、あえて今から拡張モジュールを使わない理由はあるかわからないです。
なお、PnP PowerShellモジュールはCSOM(SharePoint クライアント オブジェクト モデル )をラッピングして拡張し使いやすくした物です。(Javascriptで言うJQueryのような感じ)
旧:サイト テンプレート(テンプレートの保存)
あえて比較のために乗せましたが、クラシックなSharePointサイトではサイトテンプレートをブラウザの操作で作成することができました。
この機能を利用したサイトテンプレートでは、PnPを利用したサイトテンプレートのようにページの中身やファイルも含めたテンプレート化が可能でした。
なおモダンなSharePoint Onlineのサイトでは、ブラウザの操作で行うサイトテンプレートの機能(テンプレートの保存)はデフォルトで無効化されています。無理やり有効化してもモダンサイトではサポートされていないので正しく動かないです。
まとめ
標準機能でつらぬくならサイト テンプレートで頑張ろう。でも、ある程度覚悟があればPnPプロビジョニングが便利だぞ。
<関連記事>