Stripe Appsを公開アプリとしてアップロードする際の、distribution_typeに関する注意点

Stripe Appsでは、作成したアプリを第三者がインストールして利用できるようにする公開設定が行えます。公開したアプリは、[Stripe App Marketplace](https://marketplace.stripe.com/)からインストールできるようになります。

https://marketplace.stripe.com/

## 初めてStripe Appsアプリをアップロードする際の注意点

Stripe Appsアプリを初めて`stripe apps upload`でアップロードする際、`stripe-app.json`の`distribution_type`設定内容に関わらず、「プライベートアプリ」として１度アップロードされます。

そのため、次のように`distribution_type=public`を設定していた場合、`stirpe apps upload`コマンドを実行すると、`distribution_type`が削除されます。

```diff_json
{
  "id": "com.example.wordpress-plugin-oauth",
  "version": "0.0.2",
  "name": "Example Wordpress Plugin",
  "icon": "",
  "permissions": [
    {
      "permission": "customer_read",
      "purpose": "List the customer names"
    }
  ],
  "ui_extension": {
    "views": [
      {
        "viewport": "stripe.dashboard.customer.detail",
        "component": "App"
      }
    ],
    "content_security_policy": {
      "connect-src": null,
      "image-src": null,
      "purpose": ""
    }
  },
  "allowed_redirect_uris": [
    "https://hidetaka.dev/callback"
  ],
-  "distribution_type": "public"
}
```

## なぜ初回アップロードは、プライベートアプリ扱いになるのか

これはStripeのシステム制約からくるもので、意図しない公開アプリのアップロードを防止するためです。Stripe AppsアプリはStripeアカウントに紐づいて管理されています。そして各Stripeアカウントでは公開アプリを一つしか持てないため、誤ってテスト目的で作成したアプリを公開設定にしてしまった場合、本来公開する予定でいたアプリを、そのStripeアカウントでアップロードすることができなくなります。

## 公開設定は、「2回目の`stripe apps upload`」で実施する

まず初めに、`stripe apps upload`を実行して初期バージョンをアップロードします。そして、次にStripe CLIで`"distribution_type": "public"`の指定を追加し、再アップロードを行います。

```bash
$ stripe apps upload
$ stripe apps set distribution_type public
```

この設定を追加すると、以下のような確認メッセージが表示されて、初めて公開設定を行うための注意事項が表示されます。

```bash
$ stripe apps upload

 ⓘ  You have selected public distribution for this app. Please note the
    following:
    * After you upload, you cannot change the distribution to private.
    * You can only upload one public app per Stripe account.

? Would you like to proceed? [y/N] y█
```

## 注意点 - アカウントの本番環境が有効化されていること

上記手順で公開設定を行う場合でも、Stripe アカウントが本番環境に有効化されていないと、次のエラーメッセージが表示されてしまいます。

```bash
× Failed to upload Example Wordpress Plugin
Request failed, status=400, body={
  "error": {
    "message": "9:Please activate your account to select public distribution.",
    "request_log_url": "https://dashboard.stripe.com/test/logs/req_M1a4rmrgujMU9t?t=1706856009",
    "type": "invalid_request_error"
  }
}
```

Stripeのアプリを公開配布設定する際は、Stripe アカウントが本番環境に有効化されていることを確認するようにしましょう。

## 関連するStripeドキュメント記事

1.[Distribution options](https://stripe.com/docs/stripe-apps/distribution-options): アプリの配布タイプを設定する方法について説明しています

https://stripe.com/docs/stripe-apps/distribution-options

2.[Publish your app to the Stripe App Marketplace](https://stripe.com/docs/stripe-apps/publish-app): StripeアプリをStripe App Marketplaceに公開する手順について詳しく説明しています。

https://stripe.com/docs/stripe-apps/publish-app

3.[Upload and install your Stripe App](https://stripe.com/docs/stripe-apps/upload-install-app): Stripe Appをアップロードし、インストールするための詳細な手順が記載されています。

https://stripe.com/docs/stripe-apps/upload-install-app

4.[Test your app externally](https://stripe.com/docs/stripe-apps/test-app): アプリを他のアカウントにインストールしてテストするための外部テストの設定方法について説明しています。

https://stripe.com/docs/stripe-apps/test-app

5.[Stripe App Marketplace review requirements](https://stripe.com/docs/stripe-apps/review-requirements): Stripe App Marketplaceにアプリを掲載するために満たすべきレビュー要件について詳しく説明しています。

https://stripe.com/docs/stripe-apps/review-requirements