タップをやめ、1日1玉にした。iPhoneの花火ゲーム「花火師」を作って出すまでの記録
目次(19)
白紙から、1日半で審査に出すまで
「花火師:夜空の花火づくり」は、昼の工房で花火の玉に星を並べ、夜にその形のまま打ち上げるiPhoneのゲームです。この記事では遊び方ではなく、作る途中で何を決め、何を測り、何を直したかを、開発の記録に残る日付と数字のまま書きます。
始まりは2026年9月23日です。条件は、iPhoneとSteamの両方に出すこと、毎日少しずつ長く遊べること、集める・育てる楽しさと操作の気持ちよさがあること。AIのClaude Codeに3つの案を出してもらい、12時40分に花火師を選びました。実装もClaude Codeに任せています。道具はUnityです。私の役目は、案から選ぶことと、区切りごとに撮ってもらった動画を見て「この形で進める」かどうかを決めることでした。
審査に出したのは翌日9月24日の23時15分です。そこから2回出し直し、App Storeに並んだのは10月5日の15時48分でした。本体は無料で、画面の下に広告が出ます。広告を消す買い切りは160円です。Steam版はまだ作っていません。
花火の見た目を決める
最初の試作は1発と重ねだけ
最初の試作は夜空1画面だけでした。押した所で1色160粒の菊が開き、開く瞬間の差が0.15秒以内なら「ぴったり」、0.5秒以内なら「重ね」として歓声のバーが伸びます。
動かすとすぐ、星が止まらずに画面の外まで飛びました。Unityの空気抵抗の設定は、そのままでは一定の減速にしかなりません。測ると、速さ20が1秒後も17.4でした。速さの2乗で効く抵抗に変えて、星が止まるようにしています。Macで1秒に約6発を28秒打ち続けても、20ミリ秒を超える遅れは0回でした。私の判定は「改善の余地はあるがいい感じ」です。
並べて見比べてから選ぶ
見た目は、言葉で注文するより、並べて見比べて選ぶ形にしました。4種類の花火を同じ時刻に1発ずつ開かせ、2×2に並べた1本の動画にしてもらいます。芯入りの菊、色が金から桃、紫、青と変わって最後に点滅する変化菊、消え際にきらめいて星が残るもの、などです。私は変化菊の色の変わり方と、星が空に残る所を組み合わせて標準にしました。
作った玉の花火は、もっと苦労しました。玉に置いた形のまま開かせるため、星の速さを時間とともに弱めて止めています。速さの倍率を決まった曲線で下げると、進む距離がちょうど初速に比例し、どの時点でも形が保たれます。測ると初速20で7.27、10で3.64、5で1.82でした。2乗の抵抗のままでは内側の星ほど遠くへ行き、形が膨らみます。
それでも私は「作った花火のビジュアルがよくないです」と伝えました。形が出るのが遅く、小さく暗い点で終わっていたからです。4通りを見比べて1つを選び、「花火っぽく最後に垂れながら消えてほしい」と足しました。垂れを小・中・大の3通り作ってもらい、おすすめは中でしたが、私は大を選びました。
ここで1つ罠がありました。止めるための速さの倍率は、重力で付いた速さにも掛かります。下向きの力を足しても、3秒たって0.09しか下がりませんでした。倍率なしなら16.9下がる所です。そこで、星の止まる所に見えない粒を先に置いておき、星が燃え尽きた瞬間から見せて落とす形にしました。入れ替わりの瞬間に両方が見えると1コマだけ明るさの合計が170から291に跳ねたので、30分の1秒かけて入れ替えています。
町を3Dで作り、広げる
町並みはBlenderの台本で作る
夜の下には町があります。自作の玉が開くと金の星が空に戻り、星の数が決まった数に届くと、町の場所が1つずつ戻ります。平面の見本を見た私は「街並みは3D模型で作成してください。その場合pythonで作るのが妥当かも確認して」と頼みました。
Claude Codeは、無料のBlenderを画面なしでPythonから動かし、形を作り、Unityが読める形式で書き出せることを実際に試してから案を出しました。台本なら何度でも作り直せて、同じ物が必ずできます。有料の3D生成も比べましたが、建物ごとに絵柄がばらつき、窓の明かりを部品に分けにくいので採りませんでした。まだ戻っていない場所は空き地にして、戻ると地面からせり上がって灯ります。
9か所から45か所へ
最初の町は9か所でした。見た私は「狭くてやりがいがない」と伝えました。広げ方のおすすめは3倍でしたが、長く遊べる5倍を選び、5区画・45か所になりました。1回目の見本には「家の形が同じすぎます」と返し、区画ごとに家の作りを変えてもらっています。港町は板壁と蔵、宿場町は二階の町家、山の里は茅葺きと合掌です。
広げると、夜のカメラから見た奥の丘と山は、画面の下から30〜55%の細い帯に重なりました。山の頂の塔は、高さ9.5だと花火の開く所まで届いたので、6に下げました。空に戻る金の星は最大1,950粒あり、見せるのは600粒までにして、後の星ほど小さく淡くしています。
毎日開く理由を作り直す
30秒に1粒をやめて、1日1玉に
毎日の流れは、最初は星の粒が干し場で30秒に1粒ずつ乾き、最大300粒たまる形でした。iPhoneで遊んでみて、私はこう伝えました。「アプリを1日開く理由がないです。30秒で粒ができるので開きたいときに開くことが多くなります。改善が必要。1日1回花火玉を作る工程を入れましょう」。
決めた形は次のとおりです。
- 夜に上げる棚へ仕舞えるのは1日1玉。朝5時に新しい日になる。試し打ちは何回でもできる
- 星は朝5時にその日の分がまとめて乾く。はじめは80粒、区画が1つ戻り切るごとに20粒増え、最大160粒
- 使わなかった星は次の日に持ち越さない
- 町が戻る速さの数字は変えない
この数字のままだと、最初の区画が戻るまで約2週間、町ぜんぶで約5か月という見込みでした。
タップで打つのもやめた
最初の試作の中心は、押して開く瞬間を重ねる操作でした。それを9月24日の朝、私は「花火をタップするをやめたい」と伝えてやめています。おすすめはボタン1つで始まる形でしたが、私はボタンも無しを選びました。夜の画面に来ると1秒後に始まり、前座のあとで棚の玉が順に上がります。自作の玉は、歓声がいちばん上がった所で開きます。
同じ日の11時台には「花火が打ち上がるときに重ねやピッタリなどの文字と丸い枠は不要です」と伝え、重ねの字と開く所の輪も消しました。重なると歓声が上がる仕組みだけは残しています。
「重い」を測ってから直す
重く見えたのは撮影中の画面だった
タップをやめると伝えたとき、私は「花火の後に星にするとアプリ重くなる」とも言っていました。測ると、ふつうに動かした場合は町が全部戻っても毎秒120コマで、最悪でも16ミリ秒でした。私が見ていたのは、動画を撮っている最中の画面だったのです。1コマごとに絵を保存して待つので、毎秒20コマのゆっくりした動きになっていました。撮影の作りを変えて、撮っている間も毎秒30コマで動くようにしました。
もう1つ見つかったのは、新しいビルドを初めて動かしたときだけの引っかかりです。初めて玉が開くときや金の星が届くときに30〜38ミリ秒、初めて町の画面を開くときに114ミリ秒止まりました。2回目の起動からは出ないので、ふつうに測ると見落とします。起動の時に黒い幕の下で全部を2コマずつ描いておくようにすると、遊んでいる間の最悪は21ミリ秒になりました。
iPhone 16で測った
iPhoneでの計測では失敗が1つありました。測るための指示がアプリに届かず、ふつうに起動したうえ、2回目の起動で、私が遊んでいる途中のアプリを閉じてしまいました。それからは、iPhoneで起動する前に私に聞く決まりになり、指示は別の渡し方で届くように直しています。
| 測ったこと(iPhone 16) | 結果 |
|---|---|
| 私が遊んだ196秒の記録 | ずっと毎秒60コマ。34ミリ秒を超えたコマは4回(最長38ミリ秒) |
| 花火を30秒打ち続ける(約2,900粒) | 毎秒60コマ。20ミリ秒を超えたコマは0回 |
| 初めて動かした夜の流れ | 毎秒60コマ。最初の自作の玉が上がった時に78ミリ秒が1回 |
78ミリ秒の引っかかりには、出す前に字の絵の下準備を足しました。ただ、iPhoneで測り直して消えたかを確かめるのは、まだ残っています。起動してから画面が出るまでの長さも、iPhoneがロック中だったので測れていません。
音も数えて直す
音は、有料の生成サービスも金額と使える条件を調べたうえで、無料の効果音ラボとOpenTracksにしました。効果音16と曲3つで、音にかかったお金は0円です。打ち上げの「ドッ」は、夜の流れの26発で26回鳴っていました。私の「連続で聞こえて不快」という一言で、0.45秒以内に続けて上がる玉は1回にまとめ、10回に減らしています。5発が同時に開くと音が割れかけたので、近い時刻に開いた数だけ1発ずつを小さくしました。
iPhoneとiPadの画面に合わせる
iPhoneで遊んで「文字の見切れがありました。スマホ画面とあってない」と伝えました。原因は、Macの1280×720の窓でしか見ていなかったことです。iPhone 16の横持ちは窓より横長で、並びの下が切れ、切り欠きや角の丸みにも字がかかっていました。直し方は、どの画面も字とボタンを、切り欠きや下の線をよけた内側に並べることです。Macの窓の見た目は1画素も変えていません。
字の見切れを調べる確かめも作りました。確かめが正しく落ちるかを見るため、直す前の並びをiPhone 16の形で調べさせると、横持ちで1,732か所、縦持ちで755か所の外れが出ました。もう1つ、Unityの字を枠に合わせる設定は、入らない行を黙って消すことがありました。消えた行は見ても気づけないので、字を自分で小さくしながら高さを測る形にしています。
iPadも必ず確かめる門にしました。iPhone向けのアプリでも、審査はiPadで動かされることがあります。私のほかのアプリでは、このことで3回落ちていました。iPadのシミュレータ3台で、縦横と日本語・英語の12通りを撮ってもらいました。iPadOS 26では窓の左上のボタンが題名に重なるので、iPadのときだけ上を24ポイントよけています。端末の記録にだけ出ていたエラーも、ここで見つかりました。
広告と英語、3回の提出
おすすめと違う方を選んだ所
広告は、全部の画面の下に出すことにしました。夜の花火の間も出ます。広告を消す買い切りの値段は、おすすめが300円でしたが160円にしました。出す国も、おすすめは日本だけでしたが、全部の国に出して英語版を作ると決めました。端末の言葉が日本語でなければ英語になります。画面に見える文は約370、手紙は42通です。英語では題と数字の重なりなどが出て、直してから私が「この英語でよい」と答えました。
名前の「花火師」は、App Store Connectで「すでに使われています」と出て作れませんでした。そこで「花火師:夜空の花火づくり」にし、ホーム画面の名前は「花火師」のままにしています。英語のサブタイトルは33字で、上限の30字を超えたので短くしました。
出し直しの経過
| 日時 | できごと |
|---|---|
| 9月24日 23時15分 | 版1.0(ビルド1)を、広告を消す買い切りと一緒に審査へ |
| 9月25日 11時台 | 私が試して、工房から町に戻れない不具合を見つけた。審査中の版を取り下げた |
| 9月25日 13時12分 | 工房に「町へ」「夜へ」の戻るボタンを足したビルド2で出し直し |
| 10月1日 | 却下(ガイドライン5.1.2(i)) |
| 10月4日 3時26分 | トラッキングの許可を足したビルド3で出し直し |
| 10月5日 15時48分 | App Storeで公開 |
工房の不具合は、1日1玉にしたことから生まれていました。工房を出る道が「仕舞う」しか無く、その日の玉を仕舞ったあとは閉じ込められていたのです。
却下の要旨はこうです。ヨーロッパ向けに出しているGoogleの同意の画面に、広告のために追跡するという文があるのに、Appleのトラッキングの許可をたずねていない。審査はヨーロッパから、iPadで行われていました。私は「許可をたずねる」を選びました。起動の最初に1回たずね、ヨーロッパでは同意の画面のあとにし、同意の画面で断った人にはたずねません。買い切りを買った人にはどちらも出しません。
このとき、App Storeに出しているプライバシーの申告も、Googleの広告の部品が持っている申告に合わせて直しました。前に入れた答えは、すべて「追跡しない・結び付けない」でした。もう1つ、Googleのテスト用の広告IDで組むと、出す版とは違う画面が出ることもわかりました。そこで本物のIDでシミュレータ用に組み、たずね方の6通りを撮って確かめています。
作ってわかったこと
- 見た目は、言葉で注文するより、同じ時刻の動画を並べて選ぶ方が速く決まりました。標準の花火も、作った玉の垂れ方も、そうして選んでいます。
- 「重い」と感じた理由は、測ると別の所にありました。何を見て重いと感じたかを先に伝えると、直す所が早く見つかります。
- Macの窓だけで見ていると、iPhoneとiPadの画面のずれに気づけません。字の見切れは、確かめの道具に入れて毎回調べる形にしました。
- 毎日開く理由は、作った仕組みをiPhoneで実際に遊んで初めて足りないとわかりました。直し方は「1日1玉」という短い一言から決まりました。
- その直しが、工房から出られない不具合を生み、審査を1回取り下げることになりました。仕組みを変えたら、画面の出入り口も見直す必要があります。
公開後の10月9日には、作り直せる物を消して、54GBあったフォルダを0.78GBにしました。ソースと、判定に使った動画と見本の絵は残しています。遊び方と機能は紹介ページにまとめています。