SharePoint のクライアント側 Web パーツからの SharePoint アセットのプロビジョニング

SharePoint アセットは、SharePoint Framework ソリューションの一部としてプロビジョニングでき、ソリューションが SharePoint サイトにインストールされている場合はそこに配置されます。

開始する前に、次の記事のに示す手順を完了し、カスタムのクライアント側 Web パーツを作成する基本的な流れを把握しておきます。

Microsoft 365 プラットフォーム コミュニティ (PnP) YouTube チャンネルのこのビデオを見て、これらの手順に従うこともできます。

新しい Web パーツ プロジェクトの作成

  1. 自分の好みの場所に新しいプロジェクト ディレクトリを作成します。

    md asset-deployment-webpart
    
  2. プロジェクト ディレクトリへ移動します。

    cd asset-deployment-webpart
    
  3. Yeoman の SharePoint ジェネレーターを実行して、新しいクライアント側の Web パーツ ソリューションを作成します。

    yo @microsoft/sharepoint
    
  4. プロンプトが表示されたら、以下の値を入力します (以下で省略されたすべてのプロンプトに対して既定のオプションを選択します)。

  • ソリューション名は何ですか?: asset-deployment-webpart

  • どの種類のクライアント側コンポーネントを作成しますか?: WebPart

  • Web パーツ名は何ですか?: AssetDeployment

  • どのテンプレートを使用しますか?: JavaScript なしのフレームワーク

    この時点で、Yeoman は必須の依存関係をインストールし、ソリューション ファイルをスキャフォールディングします。 これには数分かかる場合があります。 Yeoman はプロジェクトをスキャンフォールディングし、AssetDeployment の Web パーツも含めます。

  1. 次に、以下を実行して、Visual Studio Code で Web パーツ プロジェクトを開きます。

    code .
    

SharePoint アセット用のフォルダー構造を作成する

assets フォルダーを最初に作成する必要があります。このフォルダーには、パッケージのインストール時に SharePoint 構成をプロビジョニングするためのフィーチャー フレームワーク アセットをすべて配置します。

  1. sharepoint と呼ばれるフォルダーをソリューションのルートに作成します。

  2. 作成した sharepoint フォルダーのサブ フォルダーとして、assets と呼ばれるフォルダーを作成します。

    ソリューション構造は次の図のようになります。

    ソリューション構造で sharepoint フォルダー下にある asset フォルダーを示すスクリーンショット

初期展開のためのフィーチャー フレームワーク ファイルを作成する

SharePoint アセットをフィーチャー フレームワーク要素のあるサイトにプロビジョニングするには、必要な XML ファイルをアセットのフォルダーに作成する必要があります。 SharePoint Framework ソリューション パッケージでサポートされている要素は次のとおりです。

  • フィールド/サイト列
  • コンテンツ タイプ
  • インスタンスの一覧表示
  • カスタム スキーマを使用するリスト インスタンス

SharePoint の定義用に element.xml ファイルを追加する

次の手順では、プロビジョニングする必要のある構造を定義します。

  1. sharepoint\assets フォルダー内に、新しいファイル elements.xml を作成します。

  2. 次の XML 構造を elements.xml にコピーします。

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    
        <Field ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}"
                Name="SPFxAmount"
                DisplayName="Amount"
                Type="Currency"
                Decimals="2"
                Min="0"
                Required="FALSE"
                Group="SPFx Columns" />
    
        <Field ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}"
                Name="SPFxCostCenter"
                DisplayName="Cost Center"
                Type="Choice"
                Required="FALSE"
                Group="SPFx Columns">
            <CHOICES>
            <CHOICE>Administration</CHOICE>
            <CHOICE>Information</CHOICE>
            <CHOICE>Facilities</CHOICE>
            <CHOICE>Operations</CHOICE>
            <CHOICE>Sales</CHOICE>
            <CHOICE>Marketing</CHOICE>
            </CHOICES>
        </Field>
    
        <ContentType ID="0x010042D0C1C200A14B6887742B6344675C8B"
                Name="Cost Center"
                Group="SPFx Content Types"
                Description="Sample content types from web part solution">
            <FieldRefs>
                <FieldRef ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}" />
                <FieldRef ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}" />
            </FieldRefs>
        </ContentType>
    
        <ListInstance
                CustomSchema="schema.xml"
                FeatureId="00bfea71-de22-43b2-a848-c05709900100"
                Title="SPFx List"
                Description="SPFx List"
                TemplateType="100"
                Url="Lists/SPFxList">
        </ListInstance>
    
    </Elements>
    

この XML では、注意すべき点がいくつかあります。

  • コンテンツ タイプと、カスタム スキーマのあるリスト インスタンスの 2 つのフィールドをサイトにプロビジョニングしています。
  • 定義では、SharePoint 開発者によく知られている、標準フィーチャー フレームワーク スキーマを使用しています。
  • カスタム フィールドは導入したコンテンツ タイプで参照されています。
  • ListInstance 要素の CustomSchema 属性を使用して、リストに対してプロビジョニング時間 schema.xml ファイルを定義します。 この方法では、リストはそのまま使用できるリスト テンプレート (この場合は通常のカスタム リスト '100') に基づいていますが、初期プロビジョニング中は、代替プロビジョニングを定義することができます。
  • フィーチャーを使ってリスト インスタンスをプロビジョニングするとき、特定のリスト定義に関連付けられているフィーチャーの ID を指定する必要があります。 FeatureId 属性を使用する場合、リスト定義を含むフィーチャーの ID を指定することになります。 例: カスタム リストのインスタンスをプロビジョニングする場合は、FeatureId 属性を {00bfea71-de22-43b2-a848-c05709900100} に設定します。

フィーチャー要素マニフェスト スキーマの詳細については、「SharePoint Foundation でのフィーチャーの使用」を参照してください。

リスト構造を定義する schema.xml ファイルを追加する

前の手順では、ListInstance 要素の CustomSchema 属性で schema.xml ファイルを参照していたため、このファイルをパッケージに含める必要があります。

  1. sharepoint\assets フォルダー内に、新しいファイル schema.xml を作成します。

  2. 次の XML 構造を schema.xml にコピーします。

    <List xmlns:ows="Microsoft SharePoint" Title="Basic List" EnableContentTypes="TRUE" FolderCreation="FALSE" Direction="$Resources:Direction;" Url="Lists/Basic List" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/">
      <MetaData>
        <ContentTypes>
          <ContentTypeRef ID="0x010042D0C1C200A14B6887742B6344675C8B" />
        </ContentTypes>
        <Fields></Fields>
        <Views>
          <View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" Url="AllItems.aspx">
            <XslLink Default="TRUE">main.xsl</XslLink>
            <JSLink>clienttemplates.js</JSLink>
            <RowLimit Paged="TRUE">30</RowLimit>
            <Toolbar Type="Standard" />
            <ViewFields>
              <FieldRef Name="LinkTitle"></FieldRef>
              <FieldRef Name="SPFxAmount"></FieldRef>
              <FieldRef Name="SPFxCostCenter"></FieldRef>
            </ViewFields>
            <Query>
              <OrderBy>
                <FieldRef Name="ID" />
              </OrderBy>
            </Query>
          </View>
        </Views>
        <Forms>
          <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
          <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
          <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
        </Forms>
      </MetaData>
    </List>
    

この XML では、注意すべき点がいくつかあります。

  • elements.xml ファイルを使用して展開されたカスタム コンテンツ タイプは ContentTypeRef 要素で参照されます。
  • SPFxAmountSPFxCostCenter と呼ばれるカスタム フィールドが FieldRef 要素で参照されます。

Schema.xml スキーマの詳細については、「Schema.xml ファイルについて」を参照してください。

定義がビルド パイプラインで使用されることを確認する

ここまでで、展開したときにフィーチャー スキーマを使用してソリューションから Share Point アセットをプロビジョニングするためのファイルを作成しました。 次の手順では、それらを SharePoint パッケージ *.sppkg ファイルに含めます。

  1. config フォルダーから package-solution.json を開きます。

    package-solution.json ファイルは、次のコードに示されているようにパッケージ メタデータを定義します。

  2. 新しいフィーチャー フレームワーク ファイルが SharePoint パッケージに含まれていることを確認します。

    ソリューション パッケージに対して、フィーチャー フレームワークの機能定義を含めます。 次のコードに示すように、ソリューション構造で必要なフィーチャーに対して JSON 定義を含めます。

    {
      "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
      "solution": {
        //...
        "version": "1.0.0.0",
        "includeClientSideAssets": true,
        "isDomainIsolated": false,
        // >>> START
        //     add the following to the package-solution.json file
        "features": [{
          "title": "asset-deployment-webpart-client-side-solution",
          "description": "asset-deployment-webpart-client-side-solution",
          "id": "00000000-0000-0000-0000-000000000000",     // <-- Update new GUID
          "version": "1.0.0.0",
          "assets": {
            "elementManifests": [
              "elements.xml"
            ],
            "elementFiles":[
              "schema.xml"
            ]
          }
        }]
        // <<< END
      },
      "paths": {
        "zippedPackage": "solution/asset-deployment-webpart.sppkg"
      }
    }
    

この XML では、注意すべき点がいくつかあります。

  • feature プロパティ内で id プロパティに一意の GUID を必ず定義してください。
  • features プロパティは配列なので、厳密にはパッケージに複数の機能を持つことができます。 しかし、これはお勧めしません。
  • 要素のマニフェスト ファイルとしての機能定義にふさわしくパッケージ化されるように、elements.xmlelementManifests で参照されます。
  • 複数の element.xml ファイルを定義に含めることができ、それらのファイルは JSON 定義に記載されている順序で実行されます。 通常、element.xml が複数あると、不要な複雑さが増すため、複数使用を避ける必要があります。 必要なアセットはすべて、1 つの element.xml ファイルに定義できます。

アセット プロビジョニングの展開およびテスト

ここまでで、ソリューションを SharePoint に展開する準備が整いました。 ソリューションのインストール時にアセットを SharePoint サイトに直接プロビジョニングしているので、ローカルまたはオンラインのワークベンチで機能をテストすることはできません。

  1. コンソールで、次のコマンドを実行して、Web パーツを含むクライアント側のソリューションをパッケージ化すると、パッケージできる基本構造を取得できます。

    gulp bundle
    
  2. 次のコマンドを実行して、ソリューション パッケージを作成します。

    gulp package-solution
    

    このコマンドは、sharepoint/solution フォルダーに asset-deployment-webpart.sppkg パッケージを作成します。

  3. SharePoint でパッケージをテストする前に、定義したフィーチャー フレームワーク要素に関して作成したパッケージの既定の構造を確認してみましょう。

    Visual Studio Code 側に戻り、実際の *.sppkg パッケージに含まれる生の XML 構造を含む sharepoint/solution/debug フォルダーを展開します。

    ソリューション構造で sharepoint フォルダー下にある debug フォルダーを示すスクリーンショット

  4. 生成されたパッケージをアプリ カタログに展開します。

    ブラウザーでテナントのアプリ カタログに移動します。

  5. sharepoint/solution フォルダーにある asset-deployment-webpart.sppkg をアプリ カタログにアップロードするか、ドラッグ アンド ドロップします。 SharePoint はダイアログを表示し、展開するクライアント側ソリューションを信頼するよう求めます。

    ソリューション パッケージ展開のための [信頼] ダイアログ

    注:

    SharePoint は、発行済みパッケージを展開後に検証します。 パッケージが展開に対して有効である場合にのみ、信頼ダイアログが表示されます。 この検証の状態は、アプリ カタログの 有効なアプリ パッケージ 列からも表示できます。

  6. SharePoint アセットのプロビジョニングをテストするサイトに移動します。 このソリューション パッケージを展開したテナント内の任意のサイト コレクションに移動できます。

  7. 上部のナビゲーション バーの右側にある歯車アイコンを選択し、[アプリの追加] を選択して、アプリ ページに移動します。

  8. [検索] ボックスで、「deployment」と入力し、Enter キーを押してアプリをフィルター処理します。

    サイト内のアプリの検索

  9. asset-deployment-webpart-client-side-solution アプリを選択して、アプリをサイトにインストールします。 インストールが完了したら、F5 キーを選択してページを更新します。 ソリューション パッケージ展開の一環として、カスタムの [SPFx List] (SPFx リスト) がサイトにどのようにプロビジョニングされているかを確認してください。

    ソリューションのプロビジョニング後、新しい SPFx リストとアプリがサイトのコンテンツ ページに表示されます。

  10. [SPFx リスト] を選択してリストに移動します。 カスタム フィールド AmountCost Center がリストの既定のビューにどのように自動的に表示されるかに注目してください。

    既定で追加フィールドを示すカスタム リストの既定のリスト ビュー

新しいバージョン用のアップグレード アクションを定義する

SharePoint Framework ソリューションの新しいバージョンを構築するときには、プロビジョニングされた SharePoint アセットに必要な変更を加えることが必要な場合があります。 パッケージの新しいバージョンを展開するときは、フィーチャー フレームワークのアップグレード アクションのサポートを利用できます。

SharePoint Framework ソリューションでは、次のフィーチャー フレームワークのアップグレード アクションの定義をサポートしています:

  • ApplyElementManifest
  • AddContentTypeField

フィーチャー フレームワークのアップグレード アクション定義の詳細については、「SharePoint アドインの更新プロセス」を参照してください。

新しいバージョン用の element.xml ファイルを追加する

  1. Visual Studio Code 内のソリューションに戻ります。

  2. sharepoint\assets フォルダー内に、新しいファイル elements-v2.xml を作成します。

  3. プロビジョニング対象の新しい SharePoint リストを New List のタイトルで定義するため、次の XML 構造を elements-v2.xml にコピーします。

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <ListInstance
        FeatureId="00bfea71-de22-43b2-a848-c05709900100"
        Title="New List"
        Description="New list provisioned from v2"
        TemplateType="100"
        Url="Lists/NewList">
      </ListInstance>
    </Elements>
    

重要

このXML では GUID を変更しないでください。 これは、リスト タイプが定義されている GUID を指定します。

  1. また、実際のフィーチャー フレームワークのアップグレード アクションを定義する必要もあるため、sharepoint\assets フォルダー内に新しいファイル upgrade-actions-v2.xml を作成します。

  2. 次の XML データ構造を upgrade-actions-v2.xml にコピーします。 パス内のフィーチャー GUID 参照は、sharepoint/solution/debug フォルダーの下に自動的に作成されたフォルダーを参照しており、ソリューションに基づいて更新する必要があります。 この GUID は、package-solution.json ファイルで定義したフィーチャーの GUID とも一致しています。

    <ApplyElementManifests>
      <ElementManifest Location="{feature-guid}\elements-v2.xml" />
    </ApplyElementManifests>
    

重要

{feature-guid} は、package-solution.json ファイルに追加したフィーチャーの GUID と一致している必要があります。

SharePoint へ新しいバージョンを展開する

次に、ソリューションのバージョンと、アセットのプロビジョニングを行うフィーチャーのバージョンの両方を更新する必要があります。

重要

ソリューションのバージョンは、入手可能な Framework ソリューションの新しいバージョンがあることを SharePoint に示します。 フィーチャーのバージョンは、既存のサイトでソリューション パッケージがアップグレードされると、それに応じてアップグレード アクションが実行されることを示しています。

  1. config フォルダーで package-solution.json を開き、ソリューションとフィーチャーのバージョンの値を 2.0.0.0 に更新します。

  2. また、elementManifest セクションの下に elements-v2.xml を含め、作成した upgrade-actions-v2.xml ファイルへのポインターとともに upgradeActions 要素を含める必要があります。

    これで、必要な変更を加えた package-solution.json ファイルが完成します。 ソリューションに対して識別子が若干異なる場合があるため、不足しているものだけを追加するようにしてください。

    {
      "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
      "solution": {
        //...
        "version": "2.0.0.0",
        "includeClientSideAssets": true,
        "isDomainIsolated": false,
        "features": [{
          "title": "asset-deployment-webpart-client-side-solution",
          "description": "asset-deployment-webpart-client-side-solution",
          "id": "{feature-guid}",
          "version": "2.0.0.0",
          "assets": {
            "elementManifests": [
              "elements.xml",
              "elements-v2.xml"
            ],
            "elementFiles":[
              "schema.xml"
            ],
            "upgradeActions":[
              "upgrade-actions-v2.xml"
            ]
          }
        }]
        //...
      }
    }
    

    重要

    なお、elementManifest セクションの下には、elements-v2.xml も含めています。 これにより、このパッケージをバージョン 2.0 としてクリーンなサイトにインストールすると、アップグレードされたパッケージと最終的に一致することになります。

  3. コンソール ウィンドウで、次のコマンドを実行して、Web パーツを含むクライアント側のソリューションを再パッケージ化すると、パッケージできる基本構造を取得できます。

    gulp bundle
    
  4. 次のコマンドを実行して、ソリューション パッケージを作成します。

    gulp package-solution
    

    このコマンドによってソリューション パッケージの新しいバージョンが sharepoint/solution フォルダーに作成されます。 なお、更新した XML ファイルがソリューション パッケージに含まれているかどうかは、sharepoint/solution/debug フォルダーから確認できます。

  5. 次に、生成された新しいバージョンをアプリ カタログに展開する必要があります。 テナントのアプリ カタログに移動します。

  6. sharepoint/solution フォルダーにある asset-deployment-webpart.sppkg をアプリ カタログにアップロードするか、ドラッグ アンド ドロップします。 SharePoint は、既存のバージョンをオーバーライドすることの確認を求めます。

    アプリ カタログからの置換の質問

  7. [置換する] をクリックして、アプリ カタログを最新のバージョンに更新します。

  8. [展開] をクリックして最新バージョンを信頼します。

    これで、asset-deployment-webpart-client-side-solution[アプリのバージョン] 列が "2.0.0.0" に更新されます。

    更新されたバージョン番号を示すアプリ カタログのソリューション行の拡大

サイト内の既存のインスタンスを更新する

パッケージがアプリ カタログ内で更新されたため、SharePoint コンテンツ サイトに移動し、既存のインスタンスのアップグレードを行えるようになりました。

  1. SharePoint Framework ソリューションの最初のバージョンを展開したサイトに移動します。

  2. [サイト コンテンツ] ページに移動します。

  3. asset-deployment-webpart-client-side-solution ソリューションのコンテキスト メニューから [詳細] を選択します。

    サイト内の既存のパッケージのコンテキスト メニュー

    これにより、インストールされている SharePoint Framework ソリューションに関する現在の詳細が表示されます。 このページは、[このアプリの新しいバージョンがあります。今すぐ入手してください。] というテキストを表示し、新しいバージョンが入手可能であることも示します。

    アプリ パッケージの詳細

  4. [GET IT] (入手する) ボタンを選択してパッケージの更新プロセスを開始します。

    サイトのコンテンツ ページで更新中になったアプリの状態 (モダン)

    クラシック環境に移動すると、SharePoint Framework ソリューションに適用されている実際のアップグレード操作の詳細が表示されます。

    サイトのコンテンツ ページで更新中になったアプリの状態 (クラシック)

    注:

    SharePoint Framework は SharePoint アドインと同じアプリのインフラストラクチャを使用しているので、アップグレードの状態は、アドインまたはアプリに更新が発生する可能性を示します。

    更新にはしばらく時間がかかりますが、ソリューションの状態が正常に戻ると、サイト コンテンツ ページを更新し、更新プロセスの一環として、[新しいリスト] と呼ばれるリストが正常にプロビジョニングされたことを確認できます。

    新しいリストが追加作成されたサイト コンテンツ ページ

    これで、このインスタンスを最新バージョンにアップグレードできました。 SharePoint アセット プロビジョニングのこのフィーチャー フレームワーク オプションは、SharePoint アドイン モデルのオプションとよく似ています。 主な違いはアセットが通常の SharePoint サイトに直接プロビジョニングされる点です。これは、SharePoint Framework ソリューションでは、アプリまたはアドインの Web といった概念がないためです。

関連項目