子ども向けiOSアプリの保護者ゲートとプライバシーポリシーをAIと作る

私は、子ども向けのiOSのボードゲームアプリを作っています。App Store に出すには、プライバシーポリシー(アプリが個人の情報をどう扱うかを書いた文書)とサポートページが要ります。さらに子ども向けのアプリでは、外へのリンクを保護者だけが開けるようにする決まりがあります。この記事では、Claude Code にその文面と仕組みを作らせたときに、どこで迷い、どう決めたかを書きます。

作りたかったもの

作りたかったものは3つです。

1つ目は、プライバシーポリシーの文面です。このアプリは情報を集めず、通信もせず、記録は端末の中にだけ保存します。その内容を、正確な言葉で書く必要がありました。

2つ目は、サポートページの文面です。困ったときにどこへ問い合わせればよいかを書く場所です。

3つ目は、アプリの中からこの2つのページへ行く入り口です。App Store には子ども向けのアプリを集めた「Kids カテゴリ」があります。Apple の審査ガイドラインでは、このカテゴリのアプリは、アプリの外へのリンクを、「ペアレンタルゲート」を通らないと開けない場所に置くことになっています。ペアレンタルゲートは、大人なら通れて、子どもだけでは通りにくい関門のことです。

AIへの頼み方

作業は Claude Code に頼みました。文面の下書きと、アプリの中の入り口と関門の実装です。

どういう方式にするかは、ChatGPT にも相談しました。関門をどんな問題にするか、入り口を画面のどこに置くか、掲載先のURLが決まっていない間どうするか、文面の骨組みをどうするか、の4つです。この4つとも、ChatGPT の助言を採用しました。関門をかけ算の入力にしたことや、入り口をタイトル画面に置いたことは、あとの見出しで書きます。

運営者名、問い合わせ先、掲載先のURL、制定日は、私が決めることにしました。AIには、その欄を「(未記入)」のまま残すように頼みました。AIが勝手に埋めると、事実と違う名前やURLが入るおそれがあるからです。

つまずいたところ

「収集しません」だけでは足りない

最初に迷ったのは、プライバシーポリシーの書き方です。情報を集めないアプリなので、「個人情報を収集しません」の一文で済ませたくなります。

ただ、Apple の審査ガイドラインは、プライバシーポリシーに次のことをはっきり書くよう求めています。どんなデータを集めるか(集めないならそう書く)、どう使うか、どれくらい残すか、どう消せるか、です。一文だけでは、この項目に答えきれません。

そこで、次の内容を書くことにしました。

  • 端末の中に保存するもの:アプリに入っているマインスイーパーの最短時間
  • 保存する場所と期間、消し方(アプリを削除すると消える)
  • 広告、解析(使われ方を調べる仕組み)、通信、ほかの会社が作ったプログラムの部品(SDK)は使っていない
  • 第三者に渡さない
  • 子どもに個人の情報を求めない
  • 問い合わせは保護者が行う

「絶対に端末の外に出ない」とは書けない

もう1つ迷ったのが、言い切り方です。「データは絶対に端末の外に出ません」と書けば、保護者は安心するかもしれません。

でも、それは正確ではありません。iPhone には、端末の中身をまとめて保存するバックアップの機能があります。アプリの記録も、その中に入ることがあります。これはアプリではなく、OSの機能です。

そこで「アプリ自身は外部へ送信しない」と書きました。アプリがしていることだけを約束する書き方です。

間違えたら案内が消えていた

関門は、不正解のときに案内の文を出す作りにしていました。ところが画面を自動で操作するテスト(UIテスト)で、案内が出ないことが分かりました。

原因は、案内を消す処理の条件でした。不正解のときに入力欄を空にすると、「入力が変わった」と判断して、案内を消す処理が動いていました。案内を出した直後に、自分で消していたわけです。見つけたのはテストで、Claude Code に直させました。

1回だけ出た「FAILED」

テストをまとめて実行したとき、1回だけ「FAILED(失敗)」と表示されたことがありました。ところが、失敗したテストは1件もありません。もう一度実行すると、すべて通りました。

原因は特定できていません。分からないまま「一時的なもの」と片付けたくはないので、未解決のこととして記録しておきます。

どう判断したか

関門は2桁×1桁のかけ算にした

関門は、毎回変わるかけ算の答えを数字で入力する方式にしました。2つの数は、21〜59の2桁の数と、3〜9の1桁の数です。九九より大きい問題になるので、小さい子がすぐに答えるのは難しくなります。

細かい決まりは次のとおりです。

  • 時間の制限はつけない。大人が落ち着いて計算できるようにするため。
  • 不正解でも、答えやヒントは出さない。何度も試せば答えが分かってしまうため。
  • 保護者向けの画面を離れたら、関門をもう一度出す。通った状態を持ち越すと、あとで子どもがそのまま入れてしまうため。
  • 全角の数字や、前後の空白が入っていても正解として扱う。大人が入力でつまずかないため。

関門の流れを図にすると、次のようになります。

flowchart TD
  A["タイトル画面"] --> B["おうちの ひとへ"]
  B --> C["かけ算の問題(毎回ちがう)"]
  C -- "正解" --> D["保護者向けの画面"]
  C -- "不正解" --> E["答えもヒントも出さない"]
  E --> C
  D -- "画面を離れる" --> A

入り口の名前は「おうちの ひとへ」にしました。場所はタイトル画面の下です。

URLが決まるまでは、ボタンを出さない

掲載先のURLは、まだ決めていません。仮のURLを入れておけば、見た目は完成します。ですが、そのまま審査に出すのは避けたいと考えました。

Apple の審査ガイドライン2.1には、審査に出すものは完成版であること、URLはきちんと働くこと、仮の文章や空のWebサイトは消しておくこと、と書かれています。

そこで、URLを入れる場所は「空(まだ無い)」にしておきました。空のときはリンクのボタンを出さず、「準備中」と表示します。これなら、存在しないページへのリンクが残ったまま審査に出ることはありません。

保護者向けの画面にはバージョン番号を出す

保護者向けの画面には、アプリの概要と、バージョン番号を出しました。問い合わせのときに、どの版を使っているかを伝えてもらうためです。

できたもの

できたものは次のとおりです。

  • プライバシーポリシーとサポートページの文面の下書き。運営者名、問い合わせ先、掲載先のURL、制定日は「(未記入)」のまま。
  • タイトル画面の下の「おうちの ひとへ」の入り口と、かけ算の関門。
  • 保護者向けの画面(概要、バージョン番号、URLが決まるまでは「準備中」の表示)。

確かめたことは2種類です。

1つ目は、部品ごとの動きを確かめるテスト(ユニットテスト)です。全部で110件あり、今回7件を足しました。足したのは次のような確認です。問題が九九より大きいこと。問題が毎回変わること。正解で通れること。全角の数字や空白が入っていても通れること。不正解、空欄、小数、マイナスの数では通れないこと。問題文に答えが出ていないこと。URLが決まるまでは外へのリンクが無いこと。すべて通りました。

2つ目は、画面を実際に操作するUIテストです。全部で26件あり、今回3件を足しました。正しい答えで保護者向けの画面に入れて、「準備中」が出て、仮のリンクが無いこと。不正解では入れず、案内に答えが含まれないこと。戻って入り直すと、また関門が出ること。こちらもすべて通りました。

まだ確かめていないこともあります。iPhone の画面を読み上げる機能(VoiceOver)で関門を操作できるかどうかは、実機で試していません。文字の大きさを最大にしたときの入力欄の使いやすさも未確認です。テストは標準の文字サイズで行いました。

運営者名、問い合わせ先、掲載先のURL、アプリの表示名は、これから私が決めます。

まとめ

  • プライバシーポリシーは「収集しません」の一文で済ませず、保存するもの、場所、期間、消し方まで書くと、審査ガイドラインの項目に答えられます。
  • 言い切れないことは言い切らない。「絶対に端末の外に出ない」ではなく、「アプリ自身は送信しない」のように、アプリがしていることだけを書きます。
  • 名前やURLなど自分が決めることは、AIに「(未記入)」で残させます。決まるまでは、仮のリンクを出さない作りにしておくと、審査に仮のものが残りません。

次は、掲載先のURLと運営者名などを決めて、空欄を埋めます。

参考にした資料

この記事は、筆者の開発記録をもとにAI(Claude)が下書きし、筆者が確認して公開しています。