msstore-cli について
msstoreは、Microsoft Storeでアプリを公開・管理する開発者向けのクロスプラットフォームCLIです。プロジェクトの初期化やパッケージ化、申請、テスト用フライト、段階的な公開を扱い、CI/CDでの自動化にも対応します。
主な機能
- 01Partner Center認証情報の設定
- 02プロジェクトの初期化とパッケージ化
- 03申請の公開と状況確認
- 04テスト用フライトと段階公開の管理
- 05アプリのメタデータ更新
活用シーン
- 01Store申請用のプロジェクト準備
- 02CI/CDによるアプリ更新の公開
- 03フライトグループへのベータ版配布
- 04段階的なリリースの実施
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill msstore-cliインストール後、Claude Code で/msstore-cliを入力して読み込まれたか確認します。
詳細
Microsoft Store Developer CLI (msstore)
Microsoft Store Developer CLI(msstore)は、Microsoft Store でアプリケーションを公開、管理するためのクロスプラットフォーム対応コマンドラインインターフェイスです。Partner Center API と連携し、さまざまな種類のアプリケーションに対応した公開ワークフローを自動化できます。
このスキルを使用する場面
次のような場合に、このスキルを使用します。
- API アクセス用の Store 認証情報を設定する
- Store アカウント内のアプリケーションを一覧表示する
- 申請のステータスを確認する
- 申請を Store に公開する
- Store への申請用にアプリケーションをパッケージ化する
- Store で公開するプロジェクトを初期化する
- パッケージフライト(ベータテスト)を管理する
- Store への公開を自動化する CI/CD パイプラインを設定する
- 申請の段階的なロールアウトを管理する
- 申請のメタデータをプログラムで更新する
前提条件
- Windows 10 以降、macOS、または Linux
- .NET 9 Desktop Runtime(Windows)または .NET 9 Runtime(macOS/Linux)
- 適切なアクセス許可を持つ Partner Center アカウント
- Partner Center API にアクセスできる Azure AD アプリ登録
- 次のいずれかの方法でインストールした msstore CLI:
- Microsoft Store:ダウンロード
- WinGet:
winget install "Microsoft Store Developer CLI" - 手動:GitHub Releases からダウンロード
Partner Center のセットアップ
msstore を使用する前に、Partner Center にアクセスできる Azure AD アプリケーションを作成する必要があります。
- Partner Center にアクセスします
- Account settings > User management > Azure AD applications に移動します
- 新しいアプリケーションを作成し、Tenant ID、Client ID、Client Secret を控えます
- アプリケーションに適切なアクセス許可を付与します(Manager または Developer のロール)
コアコマンドのリファレンス
info - 構成を表示する
現在の認証情報の構成を表示します。
msstore info
オプション:
| オプション | 説明 |
|---|---|
-v, --verbose | 詳細な出力を表示します |
reconfigure - 認証情報を設定する
Microsoft Store API の認証情報を設定または更新します。
msstore reconfigure [options]
オプション:
| オプション | 説明 |
|---|---|
-t, --tenantId | Azure AD テナント ID |
-s, --sellerId | Partner Center の販売者 ID |
-c, --clientId | Azure AD アプリケーションのクライアント ID |
-cs, --clientSecret | 認証用のクライアントシークレット |
-ct, --certificateThumbprint | 証明書の拇印(クライアントシークレットの代替) |
-cfp, --certificateFilePath | 証明書ファイルのパス(クライアントシークレットの代替) |
-cp, --certificatePassword | 証明書のパスワード |
--reset | 完全な再構成を行わずに認証情報をリセットします |
例:
# Configure with client secret
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --clientSecret $CLIENT_SECRET
# Configure with certificate
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --certificateFilePath ./cert.pfx --certificatePassword MyPassword
settings - CLI の設定
Microsoft Store Developer CLI の設定を変更します。
msstore settings [options]
オプション:
| オプション | 説明 |
|---|---|
-t, --enableTelemetry | テレメトリを有効(true)または無効(false)にします |
発行元の表示名を設定する
msstore settings setpdn <publisherDisplayName>
init コマンドの既定の発行元の表示名を設定します。
apps - アプリケーション管理
アプリケーション情報を一覧表示、取得します。
アプリケーションを一覧表示する
msstore apps list
Partner Center アカウント内のすべてのアプリケーションを一覧表示します。
アプリケーションの詳細を取得する
msstore apps get <productId>
引数:
| 引数 | 説明 |
|---|---|
productId | Store の製品 ID(例:9NBLGGH4R315) |
例:
# Get details of a specific app
msstore apps get 9NBLGGH4R315
submission - 申請管理
Store への申請を管理します。
| サブコマンド | 説明 |
|---|---|
status | 申請のステータスを取得します |
get | 申請のメタデータとパッケージ情報を取得します |
getListingAssets | 申請のストア掲載用アセットを取得します |
updateMetadata | 申請のメタデータを更新します |
poll | 完了するまで申請のステータスをポーリングします |
publish | 申請を公開します |
delete | 申請を削除します |
申請のステータスを取得する
msstore submission status <productId>
申請の詳細を取得する
msstore submission get <productId>
メタデータを更新
msstore submission updateMetadata <productId> <metadata>
ここで、<metadata>は更新後のメタデータを含むJSON文字列です。JSONにはシェルが解釈する文字(引用符、波括弧など)が含まれるため、値を適切に引用符で囲むか、エスケープする必要があります。
- Bash/Zsh:JSONをシングルクォートで囲むと、シェルはそのまま渡します。
msstore submission updateMetadata 9NBLGGH4R315 '{"description":"My updated app"}' - PowerShell:シングルクォートを使用します(または、ダブルクォートで囲んだ文字列内のダブルクォートをエスケープします)。
msstore submission updateMetadata 9NBLGGH4R315 '{"description":"My updated app"}' - cmd.exe:各内側のダブルクォートをバックスラッシュでエスケープします。
msstore submission updateMetadata 9NBLGGH4R315 "{\"description\":\"My updated app\"}"
ヒント: 複雑なメタデータや複数行のメタデータの場合は、JSONをファイルに保存し、その内容を渡すことで引用符の問題を回避できます。
msstore submission updateMetadata 9NBLGGH4R315 "$(cat metadata.json)"
オプション:
| オプション | 説明 |
|---|---|
-s, --skipInitialPolling | 初回のステータスポーリングをスキップします |
申請を公開
msstore submission publish <productId>
申請をポーリング
msstore submission poll <productId>
申請のステータスがPUBLISHEDまたはFAILEDになるまでポーリングします。
申請を削除
msstore submission delete <productId>
オプション:
| オプション | 説明 |
|---|---|
--no-confirm | 確認プロンプトをスキップします |
init - ストア用にプロジェクトを初期化
Microsoft Storeで公開するためにプロジェクトを初期化します。プロジェクトの種類を自動検出し、ストアのIDを設定します。
msstore init <pathOrUrl> [options]
引数:
| 引数 | 説明 |
|---|---|
pathOrUrl | プロジェクトディレクトリのパスまたはPWAのURL |
オプション:
| オプション | 説明 |
|---|---|
-n, --publisherDisplayName | 発行元の表示名 |
--package | プロジェクトもパッケージ化します |
--publish | パッケージ化して公開します(--packageを含みます) |
-f, --flightId | 特定のフライトに公開します |
-prp, --packageRolloutPercentage | 段階的なロールアウトの割合(0~100) |
-a, --arch | アーキテクチャ:x86、x64、arm64 |
-o, --output | パッケージの出力ディレクトリ |
-ver, --version | ビルド時に使用するバージョン |
対応するプロジェクトの種類:
- Windows App SDK / WinUI 3
- UWP
- .NET MAUI
- Flutter
- Electron
- React Native for Desktop
- PWA(プログレッシブウェブアプリ)
例:
# Initialize WinUI project
msstore init ./my-winui-app
# Initialize PWA
msstore init https://contoso.com --output ./pwa-package
# Initialize and publish
msstore init ./my-app --publish
package - ストア用にパッケージ化
Microsoft Storeへの申請用にアプリケーションをパッケージ化します。
msstore package <pathOrUrl> [options]
引数:
| 引数 | 説明 |
|---|---|
pathOrUrl | プロジェクトディレクトリのパスまたはPWAのURL |
オプション:
| オプション | 説明 |
|---|---|
-o, --output | パッケージの出力ディレクトリ |
-a, --arch | アーキテクチャ:x86、x64、arm64 |
-ver, --version | パッケージのバージョン |
例:
# Package for default architecture
msstore package ./my-app
# Package for multiple architectures
msstore package ./my-app --arch x64,arm64 --output ./packages
# Package with specific version
msstore package ./my-app --version 1.2.3.0
publish - ストアに公開
アプリケーションをMicrosoft Storeに公開します。
msstore publish <pathOrUrl> [options]
引数:
| 引数 | 説明 |
|---|---|
pathOrUrl | プロジェクトディレクトリのパスまたはPWAのURL |
オプション:
| オプション | 説明 |
|---|---|
-i, --inputFile | 既存の.msixまたは.msixuploadファイルのパス |
-id, --appId | アプリケーションID(初期化されていない場合) |
-nc, --noCommit | 申請を下書きの状態に保ちます |
-f, --flightId | 特定のフライトに公開します |
-prp, --packageRolloutPercentage | 段階的なロールアウトの割合(0~100) |
例:
# Publish project
msstore publish ./my-app
# Publish existing package
msstore publish ./my-app --inputFile ./packages/MyApp.msixupload
# Publish as draft
msstore publish ./my-app --noCommit
# Publish with gradual rollout
msstore publish ./my-app --packageRolloutPercentage 10
flights - パッケージフライトの管理
パッケージフライト(ベータテストグループ)を管理します。
| サブコマンド | 説明 |
|---|---|
list | アプリのすべてのフライトを一覧表示します |
get | フライトの詳細を取得します |
delete | フライトを削除します |
create | 新しいフライトを作成します |
submission | フライトの申請を管理します |
フライトを一覧表示
msstore flights list <productId>
フライトの詳細を取得
msstore flights get <productId> <flightId>
フライトを作成
msstore flights create <productId> <friendlyName> --group-ids <group-ids>
オプション:
| オプション | 説明 |
|---|---|
-g, --group-ids | フライトグループID(カンマ区切り) |
-r, --rank-higher-than | これより上位に設定するフライトID |
フライトを削除
msstore flights delete <productId> <flightId>
フライトの申請
# Get flight submission
msstore flights submission get <productId> <flightId>
# Publish flight submission
msstore flights submission publish <productId> <flightId>
# Check flight submission status
msstore flights submission status <productId> <flightId>
# Poll flight submission
msstore flights submission poll <productId> <flightId>
# Delete flight submission
msstore flights submission delete <productId> <flightId>
フライトのロールアウト管理
# Get rollout status
msstore flights submission rollout get <productId> <flightId>
# Update rollout percentage
msstore flights submission rollout update <productId> <flightId> <percentage>
# Halt rollout
msstore flights submission rollout halt <productId> <flightId>
# Finalize rollout (100%)
msstore flights submission rollout finalize <productId> <flightId>
共通のワークフロー
ワークフロー1:ストアを初めて設定する
# 1. Install the CLI
winget install "Microsoft Store Developer CLI"
# 2. Configure credentials (get these from Partner Center)
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --clientSecret $CLIENT_SECRET
# 3. Verify configuration
msstore info
# 4. List your apps to confirm access
msstore apps list
ワークフロー 2: 新しいアプリの初期化と公開
# 1. Navigate to project
cd my-winui-app
# 2. Initialize for Store (creates/updates app identity)
msstore init .
# 3. Package the application
msstore package . --arch x64,arm64
# 4. Publish to Store
msstore publish .
# 5. Check submission status
msstore submission status <productId>
ワークフロー 3: 既存アプリの更新
# 1. Build your updated application
dotnet publish -c Release
# 2. Package and publish
msstore publish ./my-app
# Or publish from existing package
msstore publish ./my-app --inputFile ./artifacts/MyApp.msixupload
ワークフロー 4: 段階的ロールアウト
# 1. Publish with initial rollout percentage
msstore publish ./my-app --packageRolloutPercentage 10
# 2. Monitor and increase rollout
msstore submission poll <productId>
# 3. (After validation) Finalize to 100%
# This completes via Partner Center or submission update
ワークフロー 5: フライトによるベータテスト
# 1. Create a flight group in Partner Center first
# Then create a flight
msstore flights create <productId> "Beta Testers" --group-ids "group-id-1,group-id-2"
# 2. Publish to the flight
msstore publish ./my-app --flightId <flightId>
# 3. Check flight submission status
msstore flights submission status <productId> <flightId>
# 4. After testing, publish to production
msstore publish ./my-app
ワークフロー 6: CI/CD パイプラインとの統合
# GitHub Actions example
name: Publish to Store
on:
release:
types: [published]
jobs:
publish:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Install msstore CLI
run: winget install "Microsoft Store Developer CLI" --accept-package-agreements --accept-source-agreements
- name: Configure Store credentials
run: |
msstore reconfigure --tenantId ${{ secrets.TENANT_ID }} --sellerId ${{ secrets.SELLER_ID }} --clientId ${{ secrets.CLIENT_ID }} --clientSecret ${{ secrets.CLIENT_SECRET }}
- name: Build application
run: dotnet publish -c Release
- name: Publish to Store
run: msstore publish ./src/MyApp
winapp CLI との統合
winapp CLI (v0.2.0+) は、winapp store サブコマンドを介して msstore と統合されています:
# These commands are equivalent:
msstore reconfigure --tenantId xxx --clientId xxx --clientSecret xxx
winapp store reconfigure --tenantId xxx --clientId xxx --clientSecret xxx
# List apps
msstore apps list
winapp store apps list
# Publish
msstore publish ./my-app
winapp store publish ./my-app
パッケージングと公開の両方で統一された CLI エクスペリエンスを求める場合は、winapp store を使用してください。
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
| 認証に失敗しました | msstore info で資格情報を確認し、msstore reconfigure を再実行してください |
| アプリが見つかりません | 製品 ID が正しいことを確認し、msstore apps list を実行して検証してください |
| 権限が不足しています | パートナーセンターで Azure AD アプリのロールを確認してください (マネージャーまたは開発者が必要です) |
| パッケージの検証に失敗しました | パッケージがストアの要件を満たしていることを確認し、詳細はパートナーセンターで確認してください |
| 申請が停滞しています | msstore submission poll <productId> を実行してステータスを確認してください |
| フライトが見つかりません | msstore flights list <productId> でフライト ID を確認してください |
| ロールアウトの割合が無効です | 値は 0 から 100 の間である必要があります |
| PWA の初期化に失敗しました | URL が一般公開されており、有効な Web アプリマニフェストがあることを確認してください |
環境変数
CLI は資格情報用の環境変数をサポートしています:
| 変数 | 説明 |
|---|---|
MSSTORE_TENANT_ID | Azure AD テナント ID |
MSSTORE_SELLER_ID | パートナーセンターの販売者 ID |
MSSTORE_CLIENT_ID | Azure AD アプリケーションのクライアント ID |
MSSTORE_CLIENT_SECRET | クライアントシークレット |