PnP プロビジョニング エンジンとコア ライブラリ

PnP プロビジョニング エンジンはプロビジョニング フレームワークの心臓部で、その基礎となるのは OfficeDevPnP.Core ライブラリです。 プロビジョニング エンジンはコア ライブラリの一部で、コア ライブラリの拡張機能を活用してプロビジョニング タスクを実装します。

注:

PnP プロビジョニング フレームワーク & PnP プロビジョニング エンジンは、アクティブなコミュニティがサポートを提供するオープン ソース ソリューションです。 Microsoft からのオープン ソース ツールのサポート SLA はありません。

SharePoint CSOM/REST オブジェクト モデルの拡張メソッドで構成されるコア ライブラリにより、プロビジョニング テンプレートの列挙と取得、テンプレートの格納、新規および既存のサイトへのテンプレートの適用といったプロビジョニング タスクが可能になります。 また、プロビジョニング タスクの自動化や、コード化されたロジックをプロビジョニング ルーチンに導入することも可能となります。

注:

プロビジョニング テンプレートの作成、永続化、適用に関するビデオ チュートリアルを視聴するには、「PnP プロビジョニング エンジンの入門」にアクセスしてください。

PnP プロビジョニング エンジン

PnP プロビジョニング エンジンは、リモート プロビジョニング タスクを実行および自動化するコア ライブラリ内のクラスを構造化した実装です。 SharePoint アドイン モデルを備えた新しい Microsoft ランドスケープでは、SharePoint Online、SharePoint、Office 365 のプロビジョニング ソリューションでクライアント側オブジェクト モデル (CSOM) とプロビジョニング フレームワークを使用してサイト成果物をプロビジョニングするようになりました。

PnP プロビジョニング エンジンでは、サイト列、コンテンツ タイプ、リストの定義、構成、ページのデザインをモデル化することができます。 既存のサイト デザイン機能をポイントしたり、手でデザインを作成したり、または両方の方法を組み合わせたりして、これらの機能をデザインすることができ、他にもさまざまなことが可能になります。 必要に応じて、保存や再利用できるプロビジョニング テンプレートとしてデザインを保持できます。

使用しているサイト デザインをプロビジョニング テンプレートとして抽出する方法は、2 つあります。 1 つは Windows PowerShell スクリプト (PnP.PowerShell) を使用する方法、もう 1 つはコア ライブラリ (OfficeDevPnP.Core) によって提供される拡張メソッドを実装する CSOM/REST コードを使用する方法です。

Windows PowerShell スクリプトを使用してプロビジョニング テンプレートを抽出する

プロビジョニング エンジンで Windows PowerShell スクリプトを使用するには、最初に、PnP.PowerShell コマンドレットをダウンロードしてインストールしなければなりません。 Windows PowerShell を実行するために必要なものすべて (ダウンロードとインストールに関する手順、Windows PowerShell コマンドの資料を含む) は、GitHub の PnP PowerShell コマンド リポジトリにあります。

注:

PnP PowerShell コマンド リポジトリには、SharePoint 2013 用、SharePoint 2016 用、SharePoint 2019 用、SharePoint Online 用の 4 つのバージョンが含まれています。

注:

PnP PowerShell はオープン ソース ソリューションであり、アクティブなコミュニティでサポートが提供されています。 Microsoft からのオープン ソース ツールのサポート SLA はありません。

コマンドレットをインストールする推奨方法は、PowerShell ギャラリーを使用することです。

Install-Module -Name PnP.PowerShell

SharePoint オンプレミスのバージョンをインストールする場合は、名前の「オンライン」をそれぞれのバージョンの SharePoint に置き換えます。

最新バージョンへのリンクは次のとおりです。

CSOM コードを使用してプロビジョニング テンプレートを抽出する

CSOM/REST コードを使用してプロビジョニング テンプレートを抽出するには、Visual Studio または他の開発環境を使用して開発プロジェクトを作成します。 コンソール、Windows アプリケーション、SharePoint アドイン などの任意の種類のプロジェクトを作成できます。 開発プロジェクトの作成後、NuGet パッケージとして入手可能なコア ライブラリをインストールする必要があります。

注:

コア ライブラリ NuGet パッケージを見つけてインストールする方法の手順、およびリモート プロビジョニング サンプルのコンソール アプリケーションに関するチュートリアルについては、「コンソール アプリケーションのプロビジョニング サンプル」に記されています。 コア ライブラリには、SharePoint Online、およびオンプレミスの SharePoint を対象としたバージョンの 2 つがあることに注意してください。

CSOM の使用法についての詳細な手順は「コンソール アプリケーションのプロビジョニング サンプル」に記載されていますが、概要は次のとおりです。

  1. SharePoint Online への接続を作成します。

  2. ClientContext インスタンスを作成し、Web オブジェクトの参照を取得します。

  3. コア ライブラリの拡張メソッド GetProvisioningTemplate を使用して、ProvisioningTemplate オブジェクトを抽出します。

  4. テンプレート プロバイダーおよびシリアル化フォーマッタを使用して、任意のファイル場所にプロビジョニング テンプレート インスタンスを保存します。

注:

テンプレート プロバイダーとシリアル化フォーマッタ オブジェクトはカスタマイズ可能であるため、任意の永続ストレージやシリアル化形式を実装できます。 標準の PnP のプロビジョニング エンジンは、ファイル システム、SharePoint、Azure Blob ストレージ テンプレート プロバイダーのサポートを提供します。 XML と JSON のシリアル化フォーマッタもサポートします。

PnP プロビジョニング スキーマ」という記事では、XML シリアル化出力の例を確認でき、XML シリアル化スキーマについての詳細説明もあります。 さらに、このスキーマとそのドキュメントを GitHub の「SharePoint/PnP-Provisioning-Schema」で入手することもできます。 Channel 9 のビデオ「PnP プロビジョニング エンジン スキーマの詳細」で、このスキーマを紹介して説明しています。

ただし重要な点として、プロビジョニング エンジンは、シリアル化形式に依存しないドメイン モデルをサポートすることに注意してください。 実際のところ、プロビジョニング エンジンはあらゆるシリアル化形式から完全に分離されています。 したがって、開発者が手動で自由に ProvisioningTemplate インスタンスを定義できます。

モデル サイトをポイントすることも、PnP プロビジョニング スキーマに照らして検証する XML ドキュメントを作成することも、あるいは .NET コードを作成してオブジェクト階層を構成することもできます。 さらに、これらの方法を組み合わせることも可能です。 また、モデル サイトを使用してプロビジョニング テンプレートをデザインしてから XML ファイルに保存し、何らかのメモリ内カスタマイズを行うと同時にコード内で ProvisioningTemplate インスタンスを処理することもできます。

GetProvisioningTemplate を使用してテンプレートを抽出するコード サンプル

コンソール アプリケーションのプロビジョニング サンプル」は、GetProvisioningTemplate メソッドの使用方法を説明しています。 このサンプルでは、プロビジョニング テンプレートをエクスポートするプロセスが次のコード ブロック内で行われます。

ProvisioningTemplateCreationInformation ptci = new ProvisioningTemplateCreationInformation(ctx.Web);

// Create FileSystemConnector, so that we can store composed files somewhere temporarily 
ptci.FileConnector = new FileSystemConnector(@"c:\temp\pnpprovisioningdemo", "");
ptci.PersistComposedLookFiles = true;
ptci.ProgressDelegate = delegate (String message, Int32 progress, Int32 total)
{

// Use this to simply output progress to the console application UI
Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message);
};

// Execute actual extraction of the tepmplate
ProvisioningTemplate template = ctx.Web.GetProvisioningTemplate(ptci);

プロビジョニング テンプレートを適用する

コア ライブラリの拡張メソッドを使用してプロビジョニング テンプレートを適用する場合、ここに示す例と同様のコード ブロックを使用します。 この例では、Web タイプの ApplyProvisioningTemplate 拡張メソッドを使用して、ターゲット サイトにテンプレートを適用します。

using (var context = new ClientContext(destinationUrl))
{
  context.Credentials = new SharePointOnlineCredentials(userName, password);
  Web web = context.Web;
  context.Load(web, w => w.Title);
  context.ExecuteQueryRetry();

  // Configure the XML file system provider
  XMLTemplateProvider provider =
  new XMLFileSystemTemplateProvider(
    String.Format(@"{0}\..\..\",
    AppDomain.CurrentDomain.BaseDirectory),
    "");

  // Load the template from the XML stored copy
  ProvisioningTemplate template = provider.GetTemplate(
    "<template name>.xml");

  // Apply the template to another site
  Console.WriteLine("Start: {0:hh.mm.ss}", DateTime.Now);

  // We can also use Apply-PnPProvisioningTemplate
  web.ApplyProvisioningTemplate(template);

  Console.WriteLine("End: {0:hh.mm.ss}", DateTime.Now);
}

PnP コア ライブラリ

コア ライブラリ (OfficeDevPnP.Core) は、PnP プロビジョニング フレームワークをサポートする CSOM/REST オブジェクト モデルで、PnP プロビジョニング エンジンを使用できるようにします。 コア ライブラリはいくつかの名前空間で構成されていて、一連の 拡張メソッドが含まれています。 これらのメソッドは、SharePoint オブジェクト モデルを拡張し、リモート プロビジョニング、エンティティー、タイマー ジョブ、プロビジョニング テンプレート、プロビジョニング フレームワーク全体の処理用オブジェクトをサポートします。 表 1 に、コア ライブラリの名前空間についてまとめます。


表 1. OfficeDevPnP.Core ライブラリの名前空間

名前空間 説明
OfficeDevPnP.Core
OfficeDevPnP.Core.AppModelExtensions 追加メソッドを使用して既存タイプを拡張する .NET クラス。
OfficeDevPnP.Core.Entities AppModelExtensions の拡張メソッドからより複雑なオブジェクトを提供および取得するクラス。
OfficeDevPnP.Core.Enums プロビジョニング操作をサポートする列挙セット。
OfficeDevPnP.Core.Extensions 文字列操作などに役立つメソッドなど、SharePoint に関連しない拡張メソッド。
OfficeDevPnP.Core.Framework.ObjectHandlers.TokenDefinitions テンプレート オブジェクト内の特定のコンテンツを置換するためのトークン。
OfficeDevPnP.Core.Framework.Provisioning.Connectors テンプレートとアセットが格納されている各種データ ソースに接続するコネクター。
OfficeDevPnP.Core.Framework.Provisioning.Extensibility 拡張プロバイダー コード。 拡張プロバイダーを使用すると、エンジンでネイティブ サポートされない機能を追加できます。
OfficeDevPnP.Core.Framework.Provisioning.Model テンプレート データ モデル オブジェクト。 テンプレートは、実際の C# コードに抽出されるか、逆シリアル化されます。 この名前空間には、この構造のクラスが含まれます。
OfficeDevPnP.Core.Framework.Provisioning.ObjectHandlers テンプレートの抽出と作成の両方をサポートする各種 SharePoint 要素のハンドラー。
OfficeDevPnP.Core.Framework.Provisioning.Providers テンプレート プロバイダー ベースの名前空間。 テンプレート プロバイダーを使用して、コード ベースのモデルを特定形式にシリアル化または逆シリアル化します。
OfficeDevPnP.Core.Framework.Provisioning.Providers.Json コード ベースのテンプレートと JSON 形式との間でシリアル化または逆シリアル化を行うための JSON テンプレート プロバイダー。
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml コード ベースのテンプレートと XML 形式との間でシリアル化または逆シリアル化を行うための XML テンプレート プロバイダー。
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.V201503 v201503 バージョンのスキーマの自動生成スキーマ ファイル。
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.V201505 v201505 バージョンのスキーマの自動生成スキーマ ファイル。
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.V201508 v201508 バージョンのスキーマの自動生成スキーマ ファイル。

関連項目