お急ぎですか?ブラウザでそのままキーワードのバイト数を数えられます。無料・登録不要で、何もアップロードされません。
Apple の説明(と実際の観察)
単純な質問に見えますが、Apple 自身のページの記述が食い違っています。
- App Store Connect のリファレンスは、キーワード欄を「You can provide up to 100 bytes of content.」と説明しています。バイトです。
- Creating Your Product Page のページでは 100 文字とされています。
- デベロッパフォーラムでは 2022 年、Apple のスタッフが API でタイ語のキーワードを試し、100 文字は通り、106 文字は拒否されました。タイ語 100 文字は 100 バイトをはるかに超えます。
つまり、リファレンスはバイトと書いていて、少なくとも 1 つの観察では文字数で数えられていました。Apple がはっきりさせるまでは、どちらかのルールを選ぶ必要があります。
違いが重要になる理由
UTF-8 では、アクセントのないラテン文字は 1 バイト、アクセント付きの文字は 2 バイト、日本語やタイ語の文字は 3 バイトです。
| キーワード | 文字数 | バイト数 |
|---|---|---|
| shopping | 8 | 8 |
| épicerie | 8 | 9 |
| supermarché | 11 | 12 |
| Einkaufsliste | 13 | 13 |
| 買い物リスト | 6 | 18 |
| รายการ | 6 | 18 |
英語ではこの問題はまず起きません。フランス語やスペイン語では、リスト全体で数バイトの差です。日本語やタイ語では、バイトで数えると同じ欄に入るテキストが 3 分の 1 になります。100 バイトに収まる日本語は 33 文字(99 バイト)までで、カンマも 1 バイトずつ使います。どちらのルールを選ぶかで実際に差が出るのは、こうした言語です。
自分で数える
ターミナルで fastlane のファイルを数えます($(cat …) で末尾の改行が取り除かれます)。
printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -c # bytes
printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -m # characters
wc -m はターミナルのロケールに従って文字数を数えます。UTF-8 以外のロケールでは wc -c と同じ数を返します。Dart では次のとおりです。
import 'dart:convert';
final keywords = 'courses,épicerie,liste,famille,partagée';
print(utf8.encode(keywords).length); // 41 bytes
print(keywords.runes.length); // 39 characters
私たちが採用しているルール
バイトで数えます。リファレンスにそう書かれており、最も厳しい選択肢でもあります。100 バイトに収まる欄は必ず 100 文字にも収まるので、拒否されることはありません。LocalePilot は App Store 掲載情報画面でこのルールを採用し、入力中に「94 / 100 bytes」のように表示します。
ただし日本語、中国語、韓国語、タイ語では、使えるはずの枠を余らせているかもしれません。これらの市場が重要なら、App Store Connect で長めのリストを試してください。長すぎる欄はその場で拒否されるので、現時点で何が通るかがわかります。
単位に関係なく言えること
- カンマで区切り、前後にスペースを入れない。カンマの後のスペースは 1 つごとに 1 バイトを無駄にします。
- 名前とサブタイトルを繰り返さない。多くの ASO ガイドが、その 2 つの欄にすでにある語をキーワードで繰り返さないよう勧めています。
- 言語ごとに 1 ファイル。fastlane では、ローカライズごとに
fastlane/metadata/<locale>/keywords.txtがあります。英語のリストを逐語訳しても、ユーザーが実際に入力する語になることはまれです。ターゲット言語での検索から始めてください。