PnP Provisioning でクラシックサイトのマスターページとページレイアウトを SPO に展開する方法

投稿者: | 2022年5月8日

はじめに

PnP Provisioning を使って、クラシックサイトのマスターページとページレイアウトを SharePoint Online サイトに展開する方法を調査しました。

想像していたのとは違う形になってしまったので、展開方法を残しておきたいと思います。

なお、PnP Provisioning は日々進化しているオープンソースのライブラリのため、ここでの検証結果が未来永劫有効なものではないということをご了承ください。

2022年5月6日時点のコードで検証しています。

普通にテンプレート化してもダメ

Get-PnPSiteTemplate コマンドレットで PnP サイトテンプレートを作成すればマスターページもページレイアウトもテンプレートに含まれるだろうと思っていたのですが、それだけではうまく行きませんでした。

試したことは、Get-PnPSiteTemplate コマンドレットで .pnp 形式のファイルを出力させ、これを Invoke-PnPSiteTemplate コマンドレットで展開する方法です。

.pnp 形式のテンプレートは無事作成することができ、.pnp ファイルの拡張子を .zip に変更し解凍することでマスターページファイル(.master)が含まれていることも確認したのですが、この方法では .pnp ファイルにページレイアウトが含まれませんでした。

試しに Invoke-PnPSiteTemplate コマンドレットを実行するも、マスターページファイルは展開されるもののマスターページとしては認識されず・・・

そしてもちろんページレイアウトも展開されませんでした。

色々オプションを付けてもうまく行かなかったため、この方法は諦めました。

マスターページ、ページレイアウトを別で展開する方法

Invoke-PnPSiteTemplate コマンドレットでうまく行かなかったので、PnP サイトテンプレートにマスターページ、ページレイアウトは含めず、個別に展開する方法を試しました。

これが結果的にうまく行った方法になります。

PnP サイトテンプレート作成

PnP サイトテンプレートは .pnp 形式ではなく .xml 形式で作成しました。

PnP サイトテンプレート作成後、File タグの中からマスターページとページレイアウトのタグを見つけ削除しました。(以下コードをすべて削除しました)

サイトへの展開

サイトにマスターページとページレイアウトを展開する際には、Invoke-PnPSiteTemplate コマンドレットを実行するだけでなく、Add-PnPMasterPage コマンドレットと Add-PnPPublishingPageLayout コマンドレットも使用しました。

Add-PnPMasterPage コマンドレットと Add-PnPPublishingPageLayout コマンドレットの使用にあたっては、事前にマスターページファイル(.master)とページレイアウトファイル(.aspx)をテンプレートサイトのマスターページギャラリーからダウンロードしておく必要がありますので忘れずに。

以下、サイトに PnP サイトテンプレートを適用したあと、マスターページ、ページレイアウトを展開するコマンドになります。
(ページレイアウトはアーティクルページのコンテンツタイプに関連付けています)

もしかしたらもっと良いやり方があるのかもしれませんが、これでもできますので必要な時が来たら参考にしてみてください。
って、もうなかなか必要な時は無いと思いますが。。。