Play Storeに公開する:ステップバイステップ
JumPHPのゲームをGoogle Playに載せて、そのまま維持するための完全な手順書です。何を作り、何を保管し、スマートフォンで何を確認し、Play Consoleで何を行うかを、最初から最後まで説明します。2種類のアプリのどちらにも当てはまります。
| Webアプリ(Google Playで) | ネイティブアプリ(ネイティブAndroidアプリ) | |
|---|---|---|
| コマンド | bin/jumphp twa mon-jeu --url https://jumphp.net/mon-jeu |
bin/jumphp android mon-jeu |
| 内容 | ゲームのページを、Chromeでフルスクリーン表示 | PHP、SDL、ゲームがアプリの中にあり、ネットワーク不要 |
| ゲームの更新 | サイトと同時に、すぐ反映(アプリの新バージョンは不要) | アプリの新しいバージョンで更新 |
あなたのClaudeはこのガイドを知っています(お使いのプロジェクトのAGENTS.mdとdocs/google-play.mdに入っています):「ゲームをGoogle Playに載せて」と頼んでください。技術的な作業はClaudeが行い、選択と送信はあなたが行います(最後の節を参照)。
0. 始める前に
- Google Playのデベロッパーアカウント:play.google.com/console、一度だけ25ドル、本人確認つき。あなた自身のアカウントなので、Googleの利用規約に同意するのもあなたです。
- 新しい個人アカウントは、本番公開の前に、12人以上のテスターで14日間のクローズドテストを行う必要があります。早めに始めましょう。
- パッケージ名(
io.github.<あなたのGitHubアカウント>.<mon_jeu>):Google Play上でのアプリのIDです。二度と変えられません。初回にコマンドが尋ねます。 - Android SDKのライセンス:初回に、あなた自身がターミナルで同意します(SDKは約1 GBで、
~/.jumphpに入ります)。Claudeは、あなたにコマンドを実行するよう頼みます(! bin/jumphp twa …)。 - 公開アドレスのプライバシーポリシー:ゲームが何も収集しなくても、Googleは提出を求めます。短いページで十分です:ゲームは個人情報を収集せず、送信せず、共有しません。アカウントも広告も追跡もありません。設定とセーブデータは端末の中にだけ残ります。連絡先のアドレスを書きます。ゲームのサイト
games/mon-jeu/site/privacy.htmlに置くと、https://play.jumphp.net/mon-jeu/privacy.htmlで公開されます(または、公開リポジトリのPRIVACY.md)。Googleに伝える前に、一度そのアドレスを開いて確認してください:404エラーだと審査が止まります。
1. キー:最初にバックアップを取る
最初のビルドで、アップロード用のキーが作られます:~/.jumphp/android/keys/<パッケージ名>.keystoreと、そのパスワードが入った<パッケージ名>.envです。
- gitには絶対に入れないでください。メモやメッセージにも書かないでください。2つのファイルを別の場所(パスワードマネージャー、暗号化されたディスク)にバックアップしてください。なくすと、次のビルドでは別のキーが作られ、Google Playが更新を拒否します。
- Google Playによるアプリの署名(初期設定)では、Googleが自分のキーを保管し、スマートフォン上のアプリにはそれで署名します。あなたのキーは、アップロードがあなたからのものであることを証明するだけです。なくした場合は、Googleが置き換えられます(設定 > アプリの署名)が、数日かかります。
- そのため、SHA-256フィンガープリントが2つあります:あなたのキーのもの(コマンドが表示します)と、Googleのキーのもの(Play Console > 設定 > アプリの署名。最初のアップロードのあとに見られます)。
2. アプリを作る
bin/jumphp twa mon-jeu --url https://jumphp.net/mon-jeu # Webアプリ
bin/jumphp android mon-jeu # またはネイティブアプリ
- ビルドのたびに、バージョン番号が1つ上がります(Google Playは、すでに送ったバージョン番号を拒否します。失敗した試行でも番号は消費されますが、問題ありません)。
- バージョンのファイルは、すぐにコミットしてください:
games/mon-jeu/android/twa-manifest.json(Webアプリ)またはgames/mon-jeu/android/app.json(ネイティブアプリ)。dist/は決して入れないでください。 - アイコンの下の名前:
game.yamlのpwa: {short_name: …}(12文字なら、全体が表示されます)。アイコン:assets/icon.png。
3. Webアプリの場合のみ:サイトがアプリを保証する
Androidは、サイトがそのアプリを宣言している場合にだけ、ページをフルスクリーンで開きます:パッケージ名と2つのフィンガープリント(あなたのものとGoogleのもの)が必要です。あなたのものだけだと、.apkからインストールしたアプリは動きますが、Google Playからインストールしたアプリは、アドレスバーつきで開きます(または「アプリで開く」の選択肢が出ます)。
スタジオのゲームのページにあるAndroidアプリの欄に入力します(またはClaudeがupdate_projectで行います)。サイトは、それをhttps://jumphp.net/.well-known/assetlinks.jsonに公開します。自分のサーバーの場合:https://あなたのドメイン/.well-known/assetlinks.json。
4. 実際のスマートフォンで試す
USBデバッグを有効にし、adbを使います。
adb install -r games/mon-jeu/dist/android/mon-jeu-<version>.apk
adb shell pm get-app-links <パッケージ名> # Webアプリ:「jumphp.net: verified」
adb exec-out screencap -p > capture.png # 画像を確認:ゲームが表示されているはずです
- アプリは、ゲームのタイトル画面で開くはずです。
- あなたのキーで署名した
.apkは、Google Playから入った同じアプリの上にはインストールできません(INSTALL_FAILED_UPDATE_INCOMPATIBLE):先にアンインストールしてください(アプリのセーブデータは失われます)。 - Webアプリが開いてすぐに閉じる、または「アプリで開く」の選択肢が出る場合:スマートフォンにChromeが2つあります。多くはクローン領域 / セカンドスペース / アプリの2重化(Xiaomi、Samsungなど)が原因です。JumPHPのアプリはメインプロフィールのChromeを指定するので、プレイヤーにとっては解決します。ご自身のテスト用スマートフォンでは、クローン領域を削除すると、その中のすべてのアプリが消えます。
- ゲームがChromeで開くからといって、アプリが動いている証拠にはなりません:アプリで試してください。
5. Play Console:初回
ダッシュボードの「アプリを設定する」のリスト(全11項目のうちX項目)で、残っている作業がわかります。足りないものがあるうちは、「審査に送信」はグレーのままです。
- アプリを作成:名前、デフォルトの言語、ゲーム、無料、各種の宣言。
- アプリのコンテンツ(ポリシー > アプリのコンテンツ)、それぞれの申告:
- プライバシーポリシー:手順0の公開アドレス。
- 広告:広告なし(JumPHPは広告を追加しません)。
- アプリへのアクセス:特別なアクセスなしにすべて利用可能(アカウントなし)。
- ターゲット ユーザー:ゲームが対象とする年齢。13歳未満を選ぶと、アプリはファミリー向けプログラムの対象になります(ルールが厳しく、露出は減ります):本当に子ども向けのゲームの場合だけにしてください。
- コンテンツのレーティング(IARCの質問票):カテゴリはゲーム。ご自身のゲームについて、正直に答えてください(アニメ調やファンタジー調の暴力、流血、恐怖、ギャンブル、ユーザー生成コンテンツ、プレイヤー同士のやり取り、位置情報、課金)。
- データ セーフティ:アカウントも統計もないJumPHPのゲームは、データを一切収集も共有もしません(セーブデータは端末内に残ります。ゲームがWebサービスを呼び出す場合は、その旨を申告してください)。
- 広告ID:使用しない。
- 政府系アプリ、金融機能、ヘルスケア:いずれもなし。
- ストアの設定(開発 > Playストアでの表示 > 設定):カテゴリ(アーケード、アクション、パズルなど)と連絡先のメールアドレス。どちらも必須で、ないと「Your app cannot be published yet」と表示されます。メールアドレスは公開されます。
- メインのストア掲載情報:タイトル(30文字)、短い説明(80文字)、詳しい説明(4000文字)、512 × 512のPNGアイコン(
bin/jumphp buildが作ります:dist/web/icon-512.png)、1024 × 500の画像、スマートフォンのスクリーンショット2枚以上(bin/jumphp shot mon-jeuを整数倍に拡大したもの、またはスマートフォンで撮影したもの)。次のバージョンで作り直せるように、画像はゲームの中(games/mon-jeu/store/)に保管しておきましょう。 - テスト:テストとリリース > テスト > 内部テスト(新しいアカウントで12人のテスターが必要な場合は、クローズドテスト) > 新しいリリースを作成 >
.aab> リリースノート > 保存 > 確認 > ロールアウトを開始。テスターはメールアドレスのリストです。各自がそのGoogleアカウントでログインした状態で招待リンクを開き、テスターになるをタップします。 - Webアプリ:この最初の送信のあとで、Googleのキーのフィンガープリントを追加し(手順3)、テスト用のリンクからインストールして、フルスクリーンで動くことを確認します。
- 本番公開:本番 > 国 / 地域 > 追加、選択、保存(国のないリリースは拒否されます)。続いて新しいリリースを作成 >
.aab> リリースノート > 次へ > 保存。 - 公開の概要 > 審査に送信、確認します。審査には数時間から7日間かかります。アプリが公開されたときは、コンソールとアカウントのメールでわかります。
6. リリースノート
言語ごとに1ブロック。タグは、それぞれ別の行に書きます。
<fr-FR>
Première version.
</fr-FR>
<en-US>
First release.
</en-US>
7. 次のバージョン
- Webアプリ:ゲームはサイトと同時に更新されます(pushすれば公開されます):新しいアプリは不要です。名前、アイコン、色、開始アドレス、パッケージ名が変わる場合だけ、新しいアプリが必要です:
bin/jumphp twa mon-jeu。 - ネイティブアプリ:ゲームを変更するたびに、新しいアプリになります:
bin/jumphp android mon-jeu --version-name 1.1。
そのあとは:バージョンのファイルをコミットし、.apkをスマートフォンで試し、Play Console > 同じトラック > 新しいリリースを作成 > 新しい.aab > リリースノート > 審査に送信。各種の申告は引き続き有効です。ただし、ゲームの内容が申告した事項(オンラインゲーム、課金、データ)に変わった場合は、先に更新してください。
8. これまでに出会った落とし穴
| 症状 | 原因と対処 |
|---|---|
| アプリがアドレスバーつきで開く | サイトに、フィンガープリント(Googleのもの)またはパッケージ名がありません:手順3 |
| Webアプリが開いてすぐに閉じる | スマートフォンにChromeが2つあります(クローン領域):手順4 |
INSTALL_FAILED_UPDATE_INCOMPATIBLE |
インストール済みのアプリはGoogle Play版です(別のキー):先にアンインストールしてください |
| 「バージョン コードはすでに使用されています」 | 作り直してください(バージョン + 1) |
| Google Playが更新のキーを拒否する | アップロード用のキーを紛失または再作成した:バックアップを復元するか、Googleにリセットを依頼してください |
| 「Your app cannot be published yet」 | ストアの設定:カテゴリと連絡先のメールアドレス |
| 「審査に送信」がグレーのまま | 「アプリを設定する」の手順のどれかが未完了、または国のないリリース |
| 「アセットを1つ以上アップロードしてください」 | 画像はライブラリにありますが、掲載情報に添付されていません:ライブラリのパネルから追加してください |
| テスターが追加されない | アドレスを入力してEnterを押し(チップになります)、保存して確認してください |
| プライバシーポリシーが却下される | そのアドレスが404を返すか、公開されていません:プライベートブラウジングで開いて確認してください |
あなたのClaudeが、あなたに無断では行わないこと
- Android SDKのライセンスやGoogleの規約への同意、また、分類の質問票への回答(回答内容を伝えずに行うこと)。
- ターゲット ユーザーの選択(ゲームが「子ども向け」だと伝えると、ルールと露出が変わります)。
- 本番公開への送信(その送信について、あなたの同意を得ずに行うこと)。
- クローン領域の削除や、スマートフォンのアプリのアンインストール(データが失われます)。
- キー、パスワード、
dist/をgitに入れること。