ソリューション YAML ソース管理の形式リファレンス

この記事は、次の場合に使用される YAML ベースのソース管理形式のリファレンスです。

  • Power Appsでネイティブ Dataverse Git integration を使用してソリューションをコミットします。
  • pac solution cloneまたはpac solution syncを使用してソリューションを抽出します。
  • YAML マニフェスト ファイルを含むフォルダーに対して SolutionPackager を手動で実行します。

YAML 形式は、従来の XML レイアウトとは異なります。 この構造を理解することは、Dataverse がインポートできる .zip ファイルに YAML フォルダーを手動でパックする場合に重要です。

Important

pac CLI での YAML ソース管理形式のサポートには、Microsoftが必要です。PowerApps.CLI バージョン 2.4.1 以降。 最新バージョンを NuGet 経由で更新します。 nuGet パッケージに付属する SolutionPackager.exeは、同じバージョンの YAML 形式をサポートしています。

フォルダー構造の概要

YAML 形式のリポジトリ ルートには、次の最上位のディレクトリが含まれています。

<repositoryRoot>/
├── solutions/
│   └── <SolutionUniqueName>/       (one subfolder per solution)
│       ├── solution.yml
│       ├── solutioncomponents.yml
│       ├── rootcomponents.yml
│       └── missingdependencies.yml
├── publishers/
│   └── <PublisherUniqueName>/      (one subfolder per publisher)
│       └── publisher.yml
├── entities/                        (entity components, if any)
│   └── <entity_schema_name>/
│       ├── attributes/
│       ├── formxml/
│       ├── savedqueries/
│       └── ...
├── workflows/                       (classic workflow definitions, if any)
├── modernflows/                     (Power Automate cloud flows, if any)
├── canvasapps/                      (canvas app .msapp files, if any)
│   └── <canvas_app_schema_name>/
│       └── <name>.msapp
├── environmentvariabledefinitions/  (environment variable definitions, if any)
├── connectors/                      (custom connectors, if any)
└── [other component folders]/

solutions/ディレクトリとpublishers/ ディレクトリが必要です。 ルートのすべてのコンポーネント フォルダーは省略可能であり、ソリューションに含まれている内容によって異なります。

Important

すべての YAML マニフェスト ファイル (solution.ymlpublisher.ymlなど) は、それぞれのサブディレクトリ (solutions/<name>/publishers/<name>/) の下に配置する必要があります。 リポジトリ のルートに配置すると、形式の検出が防止され、SolutionPackager ツールが XML 形式にフォールバックし、不足している Customizations.xmlに関する誤解を招くエラーが発生します。 詳細情報: SolutionPackager ツールのトラブルシューティング

自動検出の書式設定

SolutionPackager (および pac solution pack) は、次のように形式を自動検出します。

状態 検出された形式 行動
solutions/*/solution.yml found — 1 つのソリューション YAML サブフォルダー名から推論されたソリューション名
solutions/*/solution.yml found — 複数のソリューション YAML /SolutionName パックするソリューションを指定するために必要な引数
サブディレクトリ solutions/ 存在しない XML (レガシ) Other\Solution.xmlOther\Customizations.xml

マニフェスト ファイル

solution.yml

solutions/<SolutionUniqueName>/solution.ymlにあります。 最上位レベルのソリューション メタデータ (XML 形式の solution.xml に相当する YAML) が含まれています。

キー フィールドには、ソリューションの一意の名前、バージョン、フレンドリ名、説明、および発行元への参照が含まれます。

solutioncomponents.yml

solutions/<SolutionUniqueName>/solutioncomponents.ymlにあります。 このソリューションに含まれるすべてのコンポーネント ファイルへの相対パスを一覧表示します。 SolutionPackager はパック中にこのファイルを読み取り、コンポーネント ソースを見つけます。

抜粋の例:

- Path: entities/account
- Path: entities/contact
- Path: canvasapps/myapp_<guid>
- Path: publishers/MyPublisher

rootcomponents.yml

solutions/<SolutionUniqueName>/rootcomponents.ymlにあります。 このソリューションに属するルート レベルのコンポーネント (通常はテーブルとその他の最上位オブジェクト) を一覧表示します。

コンポーネントがrootcomponents.ymlで宣言されているが、そのソース ファイルがフォルダーに存在しない場合 (たとえば、canvasapps/<name>/の下のキャンバス アプリ .msapp ファイル)、SolutionPackager は警告を出力し、パックされた.zipからそのコンポーネントを省略します。 パック操作は終了コード 0 で正常に完了します。

パックの成功では、インポートの成功は保証されません。 solutioncomponents.ymlが必要な依存関係パス (親エンティティ フォルダーやentityrelationships/下のリレーションシップ定義など) を省略した場合、ソリューションはエラーなしでパックされますが、インポート時に "属性が関連付けられているリレーションシップ定義がありません" のようなメッセージで失敗します。solutioncomponents.ymlには、ソリューション所有のエンティティだけでなく、すべての依存エンティティとリレーションシップが常に含まれていることを確認してください。

missingdependencies.yml

solutions/<SolutionUniqueName>/missingdependencies.ymlにあります。 ソリューションの最後のエクスポート時に存在しなかったソリューションの依存関係を記録します。 情報を提供し、インポートの完全性を検証するために使用されます。

publisher.yml

publishers/<PublisherUniqueName>/publisher.ymlにあります。 パブリッシャー定義 (一意の名前、表示名、カスタマイズ プレフィックス、およびオプション値プレフィックス) が含まれます。

最低限必要な構造:

Publisher:
  UniqueName: mypublisher
  LocalizedNames:
    LocalizedName:
      '@description': My Publisher
      '@languagecode': '1033'
  Descriptions:
  EMailAddress:
    '@xsi:nil': 'true'
    '@xmlns:xsi': http://www.w3.org/2001/XMLSchema-instance
  SupportingWebsiteUrl:
    '@xsi:nil': 'true'
    '@xmlns:xsi': http://www.w3.org/2001/XMLSchema-instance
  CustomizationPrefix: myp
  CustomizationOptionValuePrefix: '12345'
  Addresses:

コンポーネントの種類のサポート

次の表に、各コンポーネントの種類を YAML 形式で処理する方法を示します。

コンポーネント タイプ YAML 形式 メモ
エンティティ (テーブル)、属性、フォーム、ビュー ✓ YAML ファイル サブコンポーネントごとに個別の YAML ファイルとして格納される
ワークフロー (クラシック) ✓ YAML ファイル workflows/ の下
最新のフロー (Power Automate クラウド フロー) ✓ — YAML 形式のみ modernflows/では、XML 形式ではサポートされていません
キャンバス アプリ ✓ — YAML 形式のみ .msapp canvasapps/<name>/下のバイナリ。XML 形式ではサポートされていません
環境変数の定義 ✓ XML ファイル の下の個々の .xml ファイル environmentvariabledefinitions/
環境変数の値 ✓ JSON ファイル [次のユーザーとして保存] environment_variable_values.json
カスタム コネクタ connectors/ の下
プラグイン アセンブリ 既定で再マップされる完全修飾型名 (/remapPluginTypeNames)
Web リソース webresources/ の下
セキュリティ役割 XML として内部的に格納されます。ソリューションごとにフィルター処理
オプション セット (グローバル) XML として格納されます。ソリューションごとにフィルター処理
ダッシュボード XML として格納されます。ソリューションごとにフィルター処理
サイト マップ XML として格納されます。ソリューションごとにフィルター処理
リボンのカスタマイズ XML として格納されます。ソリューションごとにフィルター処理
エンティティのリレーションシップ entityrelationships/ の下

XML として内部的に格納されたコンポーネントは、パックおよびアンパック操作中に XML と YAML の間で自動的に変換されます。 YAML ファイルとして作成できます。ツールが変換を処理します。

マルチソリューション リポジトリ

1 つのリポジトリ ルートに複数のソリューションを含めることができます。 すべてのソリューションは同じコンポーネント フォルダーを共有します。各ソリューションの solutioncomponents.yml は、そのソリューションに属するコンポーネント パスを制御します。

2 つのソリューションを含む構造体の例:

<repositoryRoot>/
├── solutions/
│   ├── SolutionA/
│   │   ├── solution.yml
│   │   ├── solutioncomponents.yml    ← references entities/account, entities/contact
│   │   ├── rootcomponents.yml
│   │   └── missingdependencies.yml
│   └── SolutionB/
│       ├── solution.yml
│       ├── solutioncomponents.yml    ← references entities/lead, workflows/myflow
│       ├── rootcomponents.yml
│       └── missingdependencies.yml
├── publishers/
│   └── SharedPublisher/
│       └── publisher.yml
├── entities/
│   ├── account/
│   ├── contact/
│   └── lead/
└── workflows/
    └── myflow/

複数ソリューション フォルダーから特定のソリューションをパッキングする

SolutionPackager.exeの使用:

SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA

pac solution packを使用する (単一ソリューション フォルダーのみ — マルチソリューションの場合は、/SolutionNameで直接 SolutionPackager.exe を使用します)。

pac solution pack --zipfile SolutionA.zip --folder C:\repos\myrepo

ネイティブの Dataverse Git と環境バインドの統合を使用する場合、環境内のすべてのソリューションは、マルチソリューション レイアウトを使用して 1 つのリポジトリ ルートを共有します。 ソリューション バインドを使用する場合は、各ソリューションを個別のフォルダーにバインドできます。

YAML 形式のフォルダーの操作

YAML フォルダーを .zip ファイルにパックする

# Using pac CLI (single solution in folder)
pac solution pack --zipfile C:\output\MySolution.zip --folder C:\repos\myrepo

# Using SolutionPackager.exe directly (also works for multi-solution with /SolutionName)
SolutionPackager.exe /action:Pack /zipfile:C:\output\MySolution.zip /folder:C:\repos\myrepo

Dataverse から完全な YAML フォルダーを取得する

完全でパック可能な YAML フォルダーを取得するには、 pac solution cloneを使用することをお勧めします。

pac solution clone --name MySolutionUniqueName --outputDirectory C:\repos\myrepo

これにより、ソリューションが YAML 形式 (すべてのコンポーネント ソース ファイルを含む) に抽出されます。 または、ネイティブ Git 統合を使用してPower Appsからコミットします。コミットされたファイルは YAML 形式で完全にパック可能です。

パッキングする前にフォルダーを確認する

solutions/<name>/ フォルダーが存在し、solutioncomponents.yml内のすべてのパスが実際のファイルに解決されることを確認します。 パスが見つからないと、パック中に警告が表示され、それらのコンポーネントは省略されます。

Dataverse Git 統合との関係

YAML ソース管理形式は、 Dataverse Git 統合で使用される正規形式です。 作成者がPower Appsからソリューションをコミットすると、Azure DevOpsに書き込まれたファイルはこの形式を使用します。 コード優先の開発者は、ここで説明する CLI ツールを使用して、同じリポジトリを操作できます。

環境を Git に接続する方法については、「 Dataverse Git 統合のセットアップ」を参照してください。