はじめに
個人開発・インディーズのスマホゲームとアプリだけを集めた紹介サイト IndiePick を公開しました。
個人でゲームを作っていると、開発以外にもやることがたくさんあります。
- リリースしても、ストアのランキングに埋もれて見つけてもらえない
- 宣伝に回す時間がない
- ストア審査のたびに、プライバシーポリシーやサポートページを用意しなければならない(英語版も求められる)
IndiePick は、こうした 「開発以外のめんどう」を減らして、面白いゲームづくりに集中してもらう ことを目指して作りました。
この記事では、サイトの機能と、実装で使った App Store の情報取得まわりを紹介します。
IndiePick でできること
プレイヤー向け
| 機能 | 内容 |
|---|---|
| ランダムピックアップ | 開くたびに違う作品が表示されます。シャッフルボタンで何度でも引き直せます |
| 新着・盛り上がりランキング | 直近24時間の新着と、掲示板が活発なアプリのランキング |
| 検索・絞り込み | アプリ名・開発者名・タグで検索。カテゴリや無料/有料で絞り込めます |
| アプリごとの掲示板 | ログインなし・匿名でも書き込めます。攻略情報や感想、要望の交換に |
ランダム表示にしているのは、評価件数が少ない作品にも表示のチャンスを作るためです。
開発者向け(すべて無料)
| 機能 | 内容 |
|---|---|
| 無料掲載 | Google アカウントでログインし、マイページで開発者登録するだけで掲載できます |
| App Store 自動連携 | ストアのURLを入れると、アイコン・評価・スクリーンショットを取得し、毎日自動で更新します |
| プライバシーポリシー作成 | 「広告を配信しますか?」などの質問に答えると、日本語と英語 のページが完成します。URLをストアの申請画面に貼るだけです |
| サポートページ作成 | お問い合わせ先、動作環境、よくある質問を日英で作れます |
| ストアのプライバシー回答ガイド | App Store の「App のプライバシー」、Google Play の「データ セーフティ」で何を選べばよいかの目安を表示します |
Google Play のみのアプリや、ブラウザゲームも掲載できます(Steam は対象外です)。
作成されるプライバシーポリシーは、ストア審査に提出するページづくりを助けるものです。内容がアプリの実態と合っているかは、公開前に必ずご自身で確認してください。
掲載のしかた
- https://indiepick-oms.com/for-developers を開く
- Google アカウントでログインする
- マイページで開発者登録をする
- App Store の URL(またはアプリ情報)を入力する
詳しい手順はガイドページにまとめています。
- アプリ登録の手順:https://indiepick-oms.com/for-developers/guide/app
- プライバシーポリシーの作り方:https://indiepick-oms.com/for-developers/guide/privacy
- サポートページの作り方:https://indiepick-oms.com/for-developers/guide/support
技術的な話:App Store の情報を自動で取得する
App Store のアプリ情報は、Apple が公開している iTunes Search API の Lookup で取得できます。認証もAPIキーも不要です。
https://itunes.apple.com/lookup?id={アプリID}&country=jp
アプリIDは、ストアURL https://apps.apple.com/jp/app/xxxx/id123456789 の id に続く数字です。
レスポンスには、紹介ページに必要な情報がほぼそろっています。
| フィールド | 内容 |
|---|---|
trackName |
アプリ名 |
artistName |
開発者名 |
artworkUrl512 |
アイコン画像 |
screenshotUrls |
スクリーンショットのURL配列 |
averageUserRating / userRatingCount
|
評価と評価件数 |
price / formattedPrice
|
価格 |
genres |
ジャンル |
PHP で取得する場合は、ざっくり次のような形です。
<?php
function fetchAppStoreApp(string $storeUrl): ?array
{
if (!preg_match('/id(\d+)/', $storeUrl, $m)) {
return null;
}
$url = 'https://itunes.apple.com/lookup?id=' . $m[1] . '&country=jp';
$json = @file_get_contents($url);
if ($json === false) {
return null;
}
$data = json_decode($json, true);
if (empty($data['results'][0])) {
return null;
}
$app = $data['results'][0];
return [
'name' => $app['trackName'],
'developer' => $app['artistName'],
'icon' => $app['artworkUrl512'] ?? null,
'screenshots' => array_slice($app['screenshotUrls'] ?? [], 0, 3),
'rating' => $app['averageUserRating'] ?? null,
'ratingCount' => $app['userRatingCount'] ?? 0,
'isFree' => ($app['price'] ?? 0) == 0,
];
}
IndiePick では、これを1日1回のバッチで回して、評価やスクリーンショットを最新の状態に保っています。
一方、Google Play には同じような公式の公開APIがないため、Google Play のみのアプリは手入力で登録する形にしています。
構成
- PHP(フレームワークなし)+ MySQL
- レンタルサーバー(ロリポップ)で運用
- ログインは Google アカウント(OAuth)
小さく始めたかったので、フレームワークを使わずにシンプルな構成にしています。
おわりに
IndiePick は公開したばかりで、現在は100本以上の個人開発ゲームを掲載しています。
- 個人開発のゲームを探しているプレイヤーの方は、ぜひランダムピックアップで遊んでみてください
- ゲームを作っている方は、作品の掲載や、ストア審査用ページの作成に使ってもらえるとうれしいです
不具合やご要望は、お問い合わせページからお寄せください。