By 37Design |

SnapPress 2.0.1:App Storeを9言語ローカライズした記録

2.0.1で何が変わったか。アプリの機能は変えていません。変えたのはApp Storeのメタデータです。空欄だったサブタイトルを9ロケール全部埋め、キーワード・説明文・プロモーションテキスト・What's Newも英語と日本語以外の7言語に展開しました。あわせて、App Store Connect APIとApple Search Ads APIを叩く自前のCLIを書き、リリースごとに同じ作業をコマンドラインで再現できる状態にしました。

このリリースの裏側を書いておきます。SnapPress自体の成り立ちは3月のApp Storeローンチ記録、フリーミアム化の経緯はv2フリーミアム公開のメモに書いています。

前提

SnapPress は2026年3月にローンチしました。コンセプトはシンプルで、「WordPress に写真を1枚ずつ上げて30分使うのをやめよう、iPhone から20枚を10秒でメディアライブラリに送り込もう」というもの。4月末に出した 2.0 ではフリーミアム化、買い切りプラン、Share Extension の堅牢化を行いました。売上は控えめながら確実に立っていて、ほとんどは日本の WordPress ブロガーが日本の App Store から直接買ってくれているケースでした。

意外な出来事

オーストラリアから2件の購入が入りました。広告は出していない。プレスもない。知り合いでもない。買ってくれた人たちは、自力で App Store 検索から SnapPress を見つけてくれた。しかも、後から振り返るとほとんどローカライズされていないメタデータの状態で。

そこで初めて App Store Connect のダッシュボードを「外から来た人の目線」で見直してみました。その日のタスクの優先順位を入れ替えるくらいの問題に気づきました。

問題

App Store のサブタイトル枠(アプリ名の下に出る30文字、検索結果やカテゴリ閲覧で必ず目に入るあの行)が、空欄でした。全ロケールで。App Store がローカライズ枠を提供している9言語すべて、しかも既存ユーザーが最も多い英語と日本語も含めて、全部。

サブタイトルは App Store 検索ランキングで最も重みのあるフィールドのひとつです。Apple はこれをアプリ名と同等の重みでインデックスしますし、検索ユーザーがタップ前に最初に目にする補助コピーでもある。空欄ということは、SnapPress は1ロケールあたり30文字のキーワード枠を放棄していたわけで、それが9ロケール分、しかも関連するすべての検索クエリに対して機会損失していた、ということになります。

キーワードは部分的には埋まっていたものの、英語と日本語だけで、しかも "bulk"、"iPhone"、"blogger" のようなコア単語が抜けていました。説明文も英語と日本語のみ。プロモーションテキストはどのロケールも空欄。皮肉なことに、全ロケールでちゃんと埋まっていたのは過去に書いたリリースノートだけでした。

修正

日曜の午後を使って、小さな CLI ツールキットを2つ書きました。

1つ目は App Store Connect API を叩くやつです。各ローカライゼーションの現状を取得して、新しいアプリバージョンを生成し、サブタイトルを appInfoLocalizations エンドポイントに、キーワード/説明文/プロモーションテキスト/What's New/サポートURL/マーケティングURL を appStoreVersionLocalizations エンドポイントに投入し、新しくアーカイブしたビルドを紐付ける、までを一気通貫でやります。認証は App Store Connect API キー方式なので、人間が介在せず、途中で2要素認証のプロンプトも出ない。WordPress 側の接続についてはSnapPress Connect 公式プラグインの解説に書いています。

2つ目は Apple Search Ads Advanced API を叩くやつ。同じパターンで、ES256 で署名した JWT、OAuth クライアントクレデンシャルズグラント、X-AP-Context ヘッダー付きのベアラートークン。資格情報の保管は 1Password CLI を経由させているので、平文でディスクに落ちることはありません。結果として「キャンペーン作成」「キーワード一覧取得」「昨日のレポート取得」が、ダッシュボードクリックの代わりにワンライナーのシェルコマンドになります。

9ロケール全部にメタデータを流し込むのに3分未満。バイナリのアーカイブと新規ビルドのアップロードまで含めても約10分。2.0.1 リリース全体をコマンドラインから組み立てて提出しました。

9言語のサブタイトル

新しいサブタイトル、いずれも30文字制限内に収めています:

  • English: Bulk Upload to WordPress Media(WordPressメディアへ一括アップロード)
  • Japanese: WordPressに写真を一括アップロード
  • Spanish: Sube fotos a WordPress en masa(WordPressへ写真を一括アップロード)
  • German: Foto-Upload für WordPress(WordPress向け写真アップロード)
  • Portuguese (Brazil): Upload em massa para WordPress(WordPressへ一括アップロード)
  • French: Photos en masse vers WordPress(WordPressへ写真を一括)
  • Korean: 워드프레스 사진 일괄 업로드(WordPress 写真一括アップロード)
  • Italian: Foto in blocco su WordPress(WordPressへ写真を一括)
  • Traditional Chinese: 批次上傳照片到 WordPress(WordPressへ写真を一括アップロード)

各ロケールにはこれに加えて、専用の説明文(英語と欧州各言語で約1,400文字、日本語・韓国語・中国語は言語特性で自然に短くなる)、その市場の検索行動に合わせた100文字のキーワード文字列、現地通貨価格に触れたプロモーションテキスト、多言語対応を告知する What's New 行、を用意しています。

得た教訓

App Store にアプリを出していて、自分のサブタイトルを「公開している全ロケールで」自分の目で確認したことがないなら、これがそのリマインダーです。確認は5分で終わるし、空欄のサブタイトルというのは Apple が放置を許してくれる中で最も安いタダ働きの不動産です。同じことがキーワード、プロモーションテキスト、リリースごとの What's New にも当てはまります。

もうひとつの教訓は、App Store Connect も Apple Search Ads も、フル機能のAPIを公開していて、認証セットアップさえ一度通せば Web ダッシュボードよりも圧倒的に速い、ということ。年に数本以上リリースしているなら、APIをラップした100行のbashスクリプトでリリースごとに数時間は浮きますし、ドロップダウンを27回クリックしている間に紛れ込む「気づきにくいけど後で痛い」ミスもなくなります。

次の打ち手

Apple のレビューは24〜48時間。2.0.1 が公開されたらフェーズ1として日本で Apple Search Ads を小さく回します。月額予算 7,500円、CPI 目標は250円前後、「ワードプレス アプリ」「wordpress 写真 アップロード」など日本語キーワード10個から開始。狙いはスケールではありません。獲得したユーザーごとの実 LTV と ROAS のデータを取って、次の予算判断を楽観ではなく数字で決めること。

そこの数字が回れば、同じ自動化パイプラインで米国に展開し、その次に ASO トラフィックが見込めそうなロケールを2〜3個追加します。回らなければ予算は止め、スクリーンショットや価格を見直し、より安いインプットで実験を続けます。

個人で小さなプロダクトを回すことの楽しい部分は、こういう変更を午後イチで出せること。本当に大事な地味な部分は、その後60日でデータが入ってきてからの動きです。

App Store で SnapPress をダウンロード →