本文へスキップ
AppFoyer
無料で開始

コーディングエージェントからアプリをストア対応にする

エージェントは目の前のアプリ(SDK、パーミッション、バンドル ID)を読み、見つけた内容からすべてのコンプライアンスページを下書きします。下書きを読んで公開するのはあなたです。エージェントにはできません。

始める前に

Claude Code と AppFoyer のアカウントが必要です。無料プランで十分です。アカウントを作成してください。作成するキーはありません。エージェントが初めて接続するときに、ブラウザで承認を求められます。

コーディングエージェントがまったくない場合は? ブラウザで 6 つの項目に入力すれば、プラグインなしで同じ 5 つのページができます。

Claude Code を使っていない場合は? プラグインには Claude Code が必要ですが、プライバシーポリシーと利用規約のページには必要ありません。ダッシュボードのそれぞれのエディタに、アプリの情報が入ったプロンプトがあり、どのアシスタントでも実行して貼り戻せます。全文はプライバシーポリシーのガイドと利用規約のガイドに掲載しています。

インストール

claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer

始めるのにアカウントは不要です。エージェントはあなたのマシン上でビルドを読み、見つけたものを示して質問し、保存するものができたときに初めて接続を求めます。初めて AppFoyer を呼び出すとき、ブラウザで承認ページが開きます。サインインするか無料アカウントを作成し、名前とブラウザの戻り先を確認して、承認してください。Claude Code は接続を保持し、自動で更新します。何もコピーせず、シェルにも何も保存しません。ブラウザが開かない場合は、/mcp を実行し、appfoyer を選んで Authenticate を選んでください。Claude Code デスクトップアプリでは、ターミナルからこの方法で一度接続してから、アプリで新しいセッションを開始してください。すでに実行中のセッションは新しい接続を認識しません。ダッシュボードの Agent ページで接続を解除すると、次の呼び出しはすぐに失敗します。Claude Code はサードパーティのマーケットプレイスを自動では更新しません。新しいバージョンを受け取るには、/plugin → Marketplaces → appfoyer で Enable auto-update を選んでください。

そのマシンにブラウザがない場合(リモートサーバー、コンテナ、スクリプトでの実行など)は、代わりに API キーを使います。Agent → API key — for CI and headless use でキーを作成し、ワークフローのために上と同じようにプラグインをインストールし、ヘッダーにキーを入れてサーバーをもう一度追加します:

export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY"

プラグインはその環境変数からのみキーを読みます。スキルがキーを目にすることはなく、キーは Claude Code が設定する Authorization ヘッダーでのみ送られます。

他の MCP クライアント(claude.ai、Claude Desktop、Cursor、VS Code)も、同じ承認ページを使って同じ方法で https://app.appfoyer.com/mcp に接続できます。ツールは使えますが、ビルドファイルを読む手順どおりのワークフローは Claude Code のプラグインに含まれています。

何と言うか

空のディレクトリではなく、アプリのリポジトリの中で実行してください:

言うこと起きること
Make this app store-ready ビルドファイルをスキャンし、導き出せなかった事実を確認し、すべてのページを下書きして、レビュー用のリンクを返します。
Is this app store-ready? コンプライアンスチェックリストに照らした読み取り専用の監査。何も書き込みません。
Wire the store-ready links into the app 公開後:アプリ内のプライバシーとサポートのリンクを、レビューできる差分として提案します。
Add the AppFoyer drift check ページで扱っていない可能性のある SDK やパーミッションを追加するプルリクエストを知らせる GitHub ワークフローを提案します。仕組み。

例

自分の言葉で言って構いません。以下はスキルが対応するケースです。

アプリ 1 つ、初回の実行

> Make this app store-ready
  • ビルドファイルで見つけたもの(SDK、パーミッション、バンドル ID)を、それぞれファイルと行番号つきで一覧表示します。
  • 見つけられなかったことだけを尋ねます:会社名、サポートのメールアドレス、準拠法の地域、ストアのリンク。やりとりは最大 2 往復です。
  • アプリを作成し、リポジトリからアイコンをアップロードし、5 つのページすべてを下書きします。
  • 最後にレビュー用のリンクを返します。そこであなたが公開するまで、何も公開されません。

変更後にもう一度実行する

> Make this app store-ready
  • アプリケーション ID で既存のアプリを見つけ、新しい事実を保存済みのものと比較します。
  • 変更の影響を受けるページだけを書き直します。たとえば、新しいアナリティクス SDK を入れた後のプライバシーポリシーです。
  • 頼まない限り、アイコンとアドレスはそのままにします。

複数のフレーバー、プロンプトで指定

> Make com.acme.weather.free and com.acme.weather.pro store-ready
  • アプリを 2 つ作成し、選択については何も尋ねません。
  • 各フレーバー自身のフォルダ、名前、依存関係を読みます。free フレーバーだけが使う広告 SDK を、pro フレーバーのプライバシーポリシーに入れることはありません。
  • フレーバーごとに、レビュー用のリンクとコンソール用 URL の表を返します。

複数のフレーバー、指定なし

> Make this app store-ready
  • フレーバーをアプリケーション ID とともに、すべて選択済みの状態で一覧表示し、どれにサイトを作るかをあなたが選びます。
  • debug や staging などのビルドタイプは、選択肢としてではなく除外として表示されます。

ブランド × 環境のディメンション

> Make every brand store-ready
  • 単一のフレーバーではなく、組み合わせ(brandAProd、brandBProd)を一覧表示します。
  • 提案するのは本番環境だけです。dev と qa がストアに出ることはありません。
  • ビルドがそこに置いている場合は、Gradle(resValue、manifestPlaceholders)や移動したソースセットからアプリ名を読みます。
  • ディメンションが環境なのかブランドなのか判断できない場合は、尋ねます。

カスタムアドレス(Pro と Advanced)

> Make this app store-ready
  • アプリの英語名からアドレスを組み立てます。たとえば weather-now です。
  • それが使用済みか、ブランド名に近すぎる場合は、次の候補(weather-now-app、acme-weather)を試します。最大 5 回試してから、あなたに尋ねます。
  • 無料プランでは app-… のアドレスのままにし、カスタムアドレスは Pro で使えると伝えます。
  • app-… のアドレスは引き続き同じサイトを配信します。

すでに使っているアドレスを変更する

> Change the address to weather-radar
  • まず尋ねます。古いカスタムアドレスはすぐに解放され、それを記載したままのストアの掲載情報は機能しなくなります。
  • あなたが承諾してから変更します。

アイコンを更新する

> Update the app icon
  • ランチャーアイコンを見つけます:Play 用の 512 アイコン、最大の mipmap 画像、または iOS の AppIcon のマーケティング画像。フレーバー独自のものを優先します。
  • 512 KB を超える場合は、一時フォルダでコピーを縮小します。リポジトリには触れません。
  • どのファイルをアップロードしたかを伝えます。公開中のアプリでは、新しいアイコンがすぐに反映されます。

広告のあるアプリ

> Make this app store-ready. AdMob publisher id pub-0000000000000000
  • あなたが渡した行から app-ads.txt を書きます。パブリッシャー ID はコードにないので、推測することは決してありません。
  • ストアの掲載情報のデベロッパーのウェブサイトにサイトを設定するよう、念押しします。
  • AdMob は私たちのアドレス上の app-ads.txt ファイルを検証済みです。クロールには最大 24 時間ほど見ておいてください。

ページをビルドと同期させる

> Add the AppFoyer drift check
  • “make this app store-ready” を実行するたびに、リポジトリのルートに appfoyer.json を書き込みます。ページの根拠となった SDK、データの種類、パーミッションの記録です。チェックが使うのと同じスキャナーが書き込み、手書きされることはありません。
  • このプロンプトは、無料の appfoyer/check-action を使う GitHub ワークフローを示し、あなたが承諾すると .github/workflows/appfoyer.yml を書き込みます。既存のものを上書きすることはありません。
  • 以降、すべてのプルリクエストで、ページを書いた時点から追加・削除されたものが、ファイルと行番号つきで一覧表示されます。プラグインをもう一度実行すれば、下書きと appfoyer.json が更新されます。
  • あなたの代わりにコミットすることはありません。詳細と他の CI システムでの設定は、プライバシーポリシーを同期させるガイドにあります。

何も変えずに確認する

> Is this app store-ready?
  • 該当する各アプリについてチェックリストを実行し、足りないものを報告します。何も書き込みません。
  • まだアプリのないフレーバーは、不足として報告されます。

アプリにリンクを入れる

> Wire the store-ready links into the app
  • 公開済みのページが必要です。
  • 設定画面や文字列リソースに入れるプライバシーとサポートのリンクを差分として提案します。適用するのはあなたが承諾したときだけで、コミットすることはありません。

あなたのマシンから外に出るもの

導き出した事実だけです:

  • アプリの名前、プラットフォーム、バンドル ID またはアプリケーション ID
  • ビルドファイルで見つかった SDK とパーミッションの名前
  • あなたが確認した回答:会社名、サポートのメールアドレス、準拠法の地域、ストアの URL
  • エージェントが下書きしたページのテキスト(下書きとしてアカウントに保存されます)
  • アプリ自身のアイコン(使い捨てのアップロードリンクで一度だけ送信)

それ以外のファイルは送りません。ソースコードも、リポジトリで見つかったシークレットやキーも決して送りません。エージェントが送るのは、いずれにせよプライバシーポリシーに書かなければならない内容です。

リポジトリの中に書き込まれ、そのまま残るファイルが 1 つあります。appfoyer.json です。ページの根拠を記録したもので、プラグインに同梱されたスキャナーが作成します。どこにも送信されません。エージェントがそれやその他のものをコミットすることはなく、コミットするのはあなたです。

エージェントにできないこと

ブラウザ経由で接続しても API キーで接続しても、プラグインが持つのはエージェント用の認証情報です。そのため、公開はまったくできません。これはエージェントに丁寧にお願いすることではなく、サーバー側で強制されています:

  • 公開ツールは存在しません。エージェントが書くのは下書きで、公開中のページは変わりません。
  • 下書きのないものが 2 つあります:アイコンとカスタムアドレスです。公開中のアプリでは、これらは公開中のサイトをすぐに変更し、エージェントは設定したときにそう伝えます。すでに使っているカスタムアドレスを、あなたの承諾なしに置き換えることはできません。
  • ページを公開する REST ルートは、エージェント用の認証情報を一切受け付けません。セッションのみです。
  • どのページも、公開時には手で編集したものと同じコンテンツ審査を通ります。
  • エージェントのすべての呼び出しは、それを行った接続またはキーとともに、アカウントの監査ログに記録されます。

つまり、接続やキーが漏えいした場合の最悪のケースは、破棄すべき下書き、間違ったアイコン、新しいアドレスです。あなたの名前でページが公開されることではありません。

エージェントが使えるツール

プラグインは、次のツールだけを公開する MCP エンドポイントに接続します:

ツール機能
list_apps 読み取り アカウントのすべてのアプリと、そのスラッグ、公開 URL、何かが公開されているかどうか。
get_app 読み取り 1 つのアプリ:設定、保存されたデータ収集の事実、各ページの公開中のテキスト、公開状態、保留中の下書き。
create_app 書き込み テンプレートのページつきでアプリを作成します。何も公開されません。
create_apps 書き込み 1 回の呼び出しで最大 10 個のアプリを、プロダクトフレーバーごとに 1 つずつ作成します。どれも未公開の状態で始まります。
update_app 書き込み 設定、保存されたデータ収集の事実、または SDK リストを変更します。ページのテキストを編集することはありません。
set_page 書き込み 1 つのページの下書きを書き込みます。公開中のページには触れません。
set_ad_lines 書き込み app-ads.txt を置き換えます。広告 SDK があり、あなたがパブリッシャー ID を渡した場合にのみ使われます。
get_checklist 読み取り サーバーが計算したストア対応チェックリストと、未公開の下書きが残っているページ。
get_store_forms 読み取り 事実と SDK リストから、Google Play の Data safety フォームと Apple の App Privacy の詳細の回答を下書きします。コンソールへの入力はご自身で行います。
request_publish 書き込み 下書きが完了したことを伝え、レビュー用の URL を返します。何も公開しません。
set_icon 書き込み アプリのアイコン用の使い捨てアップロード URL を返します。すぐに反映されます。アイコンには下書きがありません。
check_slug 読み取り カスタムアドレス(Pro と Advanced)を、ダッシュボードと同じルールでチェックします。
set_slug 書き込み カスタムアドレスを取得します。すぐに反映されます。あなたが同意していない限り、既存のものを置き換えることは拒否します。

うまくいかないとき

症状原因
ツールに “needs authentication” と表示される 接続が一度も承認されていないか、接続が解除されています。/mcp を実行し、appfoyer を選んで Authenticate を選んでください。
承認ページに、このリクエストは使用できないと表示される リンクの有効期限が切れたか、2 回開かれました。エディタからやり直してください。何も接続されていません。
API キーで unauthorized になる キーがダッシュボードで無効にされたか、別のアカウントのものです。新しいキーを作成し、もう一度 export してください。
公開するとクォータのエラーが返る プランの公開アプリ数の上限に達しています。アプリとその下書きは保持されます。別のアプリを非公開にするかアップグレードしてから、レビュー画面で公開してください。
下書きが拒否または保留されて返ってくる コンテンツ審査で何かが一致しました。理由の一覧に、何が一致したかと直し方が示されます。編集して送り直してください。公開中のものは何も変わっていません。

これでも変わらないこと

下書きはコードをもとに仕上げたテンプレートであり、法的助言ではありません。エージェントが素早く書いたからといって、内容が正しくなるわけではありません。公開する前に、特にアプリが収集するものの一覧を、エージェントが書いた内容を読んで確認してください。ストアが責任を問うのはあなたです。

ご質問は support@appfoyer.com まで。