パッケージ マニフェストを作成する

ソフトウェア パッケージを Windows パッケージ マネージャー コミュニティ リポジトリに送信する場合は、まずパッケージ マニフェストを作成します。 マニフェストは、インストールするアプリケーションについて説明する YAML ファイルです。

Windows パッケージ マネージャー マニフェスト作成ツールまたは YAMLCreate PowerShell スクリプトのいずれかを使用するか、以下の手順に従ってマニフェストを手動で作成することができます。

注意

マニフェスト、パッケージ、およびバージョンに関する一般的な概要については、以下のマニフェストに関する FAQ を参照してください。

マニフェスト作成のオプション

WinGetCreate ユーティリティを使用する

次のコマンドを使用して、wingetcreate ユーティリティをインストールできます。

winget install wingetcreate

インストール後、wingetcreate new を実行して新しいパッケージを作成し、プロンプトに入力することができます。 WinGetCreate プロンプトの最後のオプションを使用して、マニフェストをパッケージ リポジトリに送信できます。 [はい] を選択すると、Pull Request (PR) が Windows パッケージ マネージャーのコミュニティ リポジトリに自動的に送信されます。

YAMLCreate.ps1 を使用する

マニフェスト ファイルを作成するために、YAMLCreate.ps1 powershell スクリプトが、Windows パッケージ マネージャー コミュニティ リポジトリの [Tools] フォルダーに用意されています。 このスクリプトを使用するには、PC でリポジトリを複製し、[Tools] フォルダーからスクリプトを直接実行します。 スクリプトによって、インストーラーの URL の入力が求められ、次にメタデータを入力するように求められます。 WinGetCreate の使用と同様に、このスクリプトではマニフェストを自動的に送信するオプションが提供されます。

YAML の基本

パッケージ マニフェストに YAML 形式が選択された理由は、人間が比較的簡単に読みやすく、他の Microsoft 開発ツールと一貫性があるためです。 YAML 構文に詳しくない場合は、YAML を Y 分で学習するためのページで基本を学習できます。

Note

現時点では、Windows パッケージ マネージャーのマニフェストでは一部の YAML 機能がサポートされていません。 サポートされていない YAML の機能には、アンカー、複合キー、セットなどがあります。

表記規則

この記事では、次の表記規則を使用します。

  • : の左側は、マニフェストの定義で使用されるリテラル キーワードです。
  • : の右側は、データ型です。 データ型は、string などのプリミティブ型の場合と、この記事の別の場所で定義されているリッチ構造への参照の場合があります。
  • 表記 [datatype] は、言及したデータ型の配列を示します。 たとえば、[ string ] は文字列の配列です。
  • 表記 {datatype:datatype} は、あるデータ型から別のデータ型へのマッピングです。 たとえば、{ string: string } は文字列から文字列へのマッピングです。

マニフェストの内容

パッケージ マニフェストは、必須の項目とオプションの項目で構成されます。これらは、ソフトウェア インストールのカスタマー エクスペリエンスを向上させるために役立ちます。 このセクションでは、必要なマニフェスト スキーマと完全なマニフェスト スキーマについて簡単にまとめ、それぞれの例を示します。

マニフェスト ファイルの各項目は、パスカル ケースである必要があり、重複させることはできません。

マニフェスト内の項目の完全な一覧と説明については、Windows パッケージ マネージャー コミュニティ リポジトリマニフェスト仕様を参照してください。

最低限必要なスキーマ

シングルトン JSON スキーマで指定されているように、特定のフィールドのみが必要です。 最低限サポートされる YAML ファイルは、次の例のようになります。 シングルトン形式は、1 つのインストーラーと 1 つのロケールが含まれるパッケージに対してのみ有効です。 複数のインストーラーまたはロケールを提供する場合は、複数の YAML ファイル形式とスキーマを使用する必要があります。

GitHub の UX を支援するため、パーティション構成が追加されました。 何千もの子が含まれるフォルダーは、ブラウザーで正しくレンダリングされません。

PackageIdentifier:  # Publisher.package format.
PackageVersion:     # Version numbering format.
PackageLocale:      # BCP 47 format (e.g. en-US)
Publisher:          # The name of the publisher.
PackageName:        # The name of the application.
License:            # The license of the application.
ShortDescription:   # The description of the application.
Installers: 
 - Architecture:    # Enumeration of supported architectures.
   InstallerType:   # Enumeration of supported installer types (exe, msi, msix, inno, wix, nullsoft, appx).
   InstallerUrl:    # Path to download installation file.
   InstallerSha256: # SHA256 calculated from installer.
ManifestType:       # The manifest file type
ManifestVersion: 1.0.0

複数のマニフェスト ファイル

最適なユーザー エクスペリエンスを提供するには、マニフェストにできるだけ多くのメタデータを含める必要があります。 インストーラーの検証とローカライズされたメタデータの提供に関することを分離するため、マニフェストを複数のファイルに分割する必要があります。 この種のマニフェストのための YAML ファイルの最小数は 3 です。 追加のロケールも指定する必要があります。

次に示すのは、多くのオプションのメタデータフィールドと複数のロケールの例です。 既定のロケールには、追加のロケールより多くの要件があることに注意してください。 show コマンドでは、追加ロケールでは提供されない必須フィールドには、既定のロケールのフィールドが表示されます。

パス: manifests / m / Microsoft / WindowsTerminal / 1.6.10571.0 / Microsoft.WindowsTerminal.yaml

PackageIdentifier: "Microsoft.WindowsTerminal"
PackageVersion: "1.6.10571.0"
DefaultLocale: "en-US"
ManifestType: "version"
ManifestVersion: "1.0.0"

Note

インストーラーが .exe で、Nullsoft または Inno を使用してビルドされている場合は、これらの値を代わりに指定できます。 Nullsoft または Inno が指定されている場合、クライアントは、インストーラーに対してサイレントおよびサイレントの進行状況のインストール動作を自動的に設定します。

インストーラーのスイッチ

多くの場合、コマンド ラインからインストーラーに -? を渡すことにより、インストーラーで使用できるサイレント Switches を判別することができます。 さまざまなインストーラーの種類で使用できる一般的なサイレント Switches の一部を次に示します。

インストーラー コマンド ドキュメント
MSI /q MSI のコマンドライン オプション
InstallShield /s InstallShield のコマンドライン パラメーター
Inno Setup /SILENT or /VERYSILENT Inno Setup のドキュメント
Nullsoft /S Nullsoft サイレント インストーラー/アンインストーラー

ヒントとベスト プラクティス

  • パッケージ識別子は一意である必要があります。 同じパッケージ ID で複数の送信を行うことはできません。 パッケージのバージョンごとに 1 つの pull request のみが許可されます。
  • 複数の発行元フォルダーを作成しないでください。 たとえば、"Contoso" というフォルダーが既にある場合、"Contoso Ltd." は作成しないでください。
  • すべてのツールでサイレント インストールがサポートされている必要があります。 サイレント インストールをサポートしていない実行可能ファイルがある場合、現時点でそのツールを提供することはできません。
  • できるだけ多くのフィールドを提供してください。 提供するメタデータが多いほど、ユーザー エクスペリエンスが向上します。 場合によっては、フィールドが Windows パッケージ マネージャー クライアント (winget.exe) によってまだサポートされていないことがあります。 たとえば、AppMoniker フィールドはオプションです。 ただし、このフィールドを含めると、顧客が search コマンドを実行したときに Moniker 値に関連付けられた結果が表示されます (例: Visual Studio Codevscode)。 指定された Moniker 値を持つアプリが 1 つしかない場合、顧客は完全修飾パッケージ ID ではなく、モニカーを指定してアプリケーションをインストールできます。
  • この指定に含まれる文字列の長さは、改行の前までで 100 文字に制限する必要があります。
  • PackageName は、エクスポートアップグレードをサポートするためのマニフェストとの相関関係に役立つよう、 [プログラムの追加と削除] で作成されるエントリと一致しているる必要があります。
  • Publisher は、エクスポートアップグレードをサポートするためのマニフェストとの相関関係に役立つよう、 [プログラムの追加と削除] で作成されるエントリと一致しているる必要があります。
  • MSI 形式のパッケージ インストーラーでは、製品コードを使用してアプリケーションを一意に識別します。 アップグレードのエクスペリエンスが最適になるよう、パッケージの特定のバージョンの製品コードを、マニフェストに含める必要があります。
  • マニフェストでは、改行前の文字列の長さを 100 文字に制限します。
  • 指定したバージョンのパッケージに、複数のインストーラーの種類がある場合は、それぞれの Installers の下に InstallerType のインスタンスを配置できます。

マニフェストに関する FAQ

マニフェストとは何ですか?

マニフェストは、Windows オペレーティング システム上でソフトウェアをインストールおよびアップグレードするために、Windows パッケージ マネージャーによって使用されるメタデータを含む YAML ファイルです。 これらのファイルは、GitHub の winget-pkgs リポジトリの manifests ディレクトリの下にパーティション分割されています。 Windows パッケージ マネージャーのディレクトリ構造はパーティション分割する必要があるため、マニフェストを探すときにサイト内でそれほどスクロールする必要はありません。

パッケージとは何ですか?

パッケージはアプリケーションまたはソフトウェア プログラムと考えてください。 Windows パッケージ マネージャーでは、"PackageIdentifier" を使用して一意のパッケージを表します。 これらは一般的に Publisher.Package の形式になります。 場合によっては、2 番目のピリオドで区切られた追加の値が表示されることがあります。

バージョンとは何ですか?

パッケージのバージョンは、特定のリリースに関連付けられています。 完全に形成されたセマンティック バージョン番号が表示される場合もあれば、何か異なるものが表示される場合もあります。 これらは日付を基にして決められる場合もあれば、パッケージ固有の意味を持つ他の文字を使用する場合もあります。 パッケージ バージョンの YAML キーは "PackageVersion" です。

ディレクトリ構造および最初のマニフェストの作成の詳細については、GitHub の winget-pkgs リポジトリのマニフェストの作成に関するページを参照してください。