最終更新: 2026年10月31日
夕暮れの部屋で、一匹の猫が気ままに暮らしている。ごはんを食べ、キャットタワーの麻縄で爪をとぎ、タワーでくつろぎ、眠くなったらベッドで丸くなる。画面にふれると、こちらに気づいて駆け寄ってくる。
猫のいる音は、そんな「猫のいる時間」をiPhoneの中につくるアプリです。この記事では、動画生成で作ろうとしていた最初の構想が、写真の部屋の中を3Dの猫が歩き回るUnityアプリになるまでを、判断の理由と失敗も含めて記録します。
2026年10月8日にバージョン1.0がApp Storeで公開されました。その後も実機で見つけた違和感を直し、毛色、朝の部屋、環境音、自分で録音した猫の生活音などを追加して、10月27日に1.0.7を公開しています。この記事は、最初の構想から公開後の改善まで、何を選び、どこでつまずき、どう直したかの記録です。
以前作った瞑想BGMアプリは、音を選んで静かに聴くことが中心でした。今回の大きな違いは、そこに Unityで動く3Dの猫 を入れたことです。音だけで癒すのではなく、部屋の中で猫が歩き、ごはんを食べ、タップに反応する。つまり、BGMアプリというより「小さな猫のいる生活」をiPhoneの中に作る試みになりました。
パソコンでこの記事を読んでいる場合は、QRコードをiPhoneで読み取るとApp Storeを開けます。
App Storeで開く前提: 今回作ったもの
一言で表すと、次のようなアプリです。
写真のように描かれた部屋で、3Dの猫が自分の意思で暮らし、さわると応えてくれる。雨の音と猫のゴロゴロを聞きながら眠れる、癒しのアプリ。

| 項目 | 内容 |
|---|---|
| 対応端末 | iPhone(縦向き) |
| エンジン | Unity 6.6(6000.6.0f1)、Built-in レンダーパイプライン |
| 画面 | UI Toolkit(コードだけで組み立て) |
| 猫のモデル | Somali Cat Animated ver 1.2(DreamNoms、CC BY 4.0)を glTFast で読み込み |
| 猫の動き | モデル付属の5クリップ+骨の補正と経路探索で、十数種類の行動を組み立て |
| 料金 | すべて無料。App内課金も広告もなし |
| ビルド | Windowsで Xcode プロジェクトを書き出し、GitHub Actions の macOS で署名して App Store Connect へ |
| 規模 | C# 37ファイル・約6,500行(Editor向け支援コードを含む、コミット100件超) |
アーキテクチャ構成
大きく見ると、素材をUnityへ入れ、iPhone内で猫の行動・描画・音を動かし、公開時だけGitHub ActionsとApp Store Connectを使う構成です。アカウント登録、広告、外部サーバー連携はありません。
このアプリの中心は、本物の3Dの猫です
先に、このアプリでいちばん手のかかった部分を書いておきます。画面の中の猫は、録画した映像でも、パラパラ漫画の絵でもありません。iPhoneの中で毎秒何十回も計算されて動いている、3Dのキャラクターです。今回の開発でいちばん時間を使ったのは、音楽アプリのように再生ボタンを置くことではなく、この猫を「部屋にいる生き物」に見せることでした。
この違いは、見ているとすぐに分かります。
- 同じ場面になりにくい仕組みです。どこへ行くか、どの道を通るか、途中で立ち止まるか、何秒座っているかは、そのつど決まります。決まった順番で流れる映像ではないので、毎回少しずつ違う時間になります。
- さわった場所に反応します。画面をタップすると、猫は今いる場所からその方向へ向きを変え、家具をよけながら歩いてきます。あらかじめ用意した「寄ってくる映像」を再生しているのではありません。
- 行動が途中で変わります。ごはんへ向かう途中でタップすれば、そこで向きを変えます。眠っている猫を起こすこともできます。
一方で、部屋まで3Dで作り込むと制作量と描画負荷が増え、今回目指した絵本のような質感からも離れます。そこで「部屋は絵、猫だけ3D」という形にしました。計算するのは猫一匹分に絞り、背景のやわらかな雰囲気も保てる組み合わせです。
この構成を成立させるために、次のような仕組みを作りました。
| 仕組み | していること |
|---|---|
| 猫モデルの読み込み | glTF形式(.glb)の猫を、glTFastというライブラリでアプリ起動時に読み込み、骨とアニメーションを組み立てる |
| 絵とカメラの一致 | 部屋の絵を描いたときのカメラの高さ・角度・画角をUnityのカメラに合わせ、絵の上の座標から床の3D座標を計算する |
| 歩く場所の管理 | 床を多角形、家具を円として持ち、目的地まで家具をよけた道順を可視グラフとダイクストラ法で求める |
| 家具との前後関係 | 家具の絵を「奥」と「手前」の2枚に分け、描画の順番をずらして、猫をその間に挟む |
| 足りない動き | モデルに入っている5つの動きを再生しながら、首や背骨の骨だけを計算で足して、食べる・毛づくろいなどの姿勢を作る |
つまり、3Dの猫を1匹だけ、絵の部屋の中で正しく生活させることに、開発のほとんどの時間を使っています。瞑想アプリでは音源と画面構成が中心でしたが、今回はUnityの座標、カメラ、アニメーション、当たり判定、iOSビルドまでを全部つなぐ必要がありました。以降は、その試行錯誤の記録です。
最初の構想と、Unityを選んだ理由
最初は、動画生成(Sora)で猫の映像を作る案を考えていました。ところが、SoraのVideos APIは2026年9月24日に提供終了となることが発表されました。そこで「動画を流す」のではなく、「猫をその場で動かす」方向へ切り替えました。
この時点で迷ったのは、UnityとBlenderの役割です。
- みんな Blender を使っているようだけれど、Unity でなくてもいいのか。
- Blender で猫を作って、普通のアプリで動かせないのか。
整理すると、Blender は猫のモデルや動きを 作る 道具で、Unity は作った猫を その場で動かし、さわると反応させる 道具です。アプリの画面そのものも Unity で作れます。
私がいちばん実現したかったのは「猫が自由に歩き回って、さわると反応する」ことでした。それには、決まった映像を流すのではなく、毎回その場で猫の行動を組み立てる必要があります。そこで Unity を選びました。Blender は、将来モデルに手を入れるときの道具として残しています。
写真の部屋に、3Dの猫を置く
部屋まで3Dで作り込むと制作量と描画負荷が増え、今回目指した絵本のような雰囲気から離れます。そこで、背景は一枚の絵(Codexが用意した夕暮れの部屋)にして、その絵の中を3Dの猫が歩く形にしました。
ポイントは、絵を描いたときのカメラと、Unityのカメラを一致させる ことです。床の傾きと遠近感を絵に合わせると、絵の上の点(横と縦の位置)から、3D空間の床の上の点を計算できます。ごはんの器、ベッドの上、爪とぎの前など、猫が行く場所はすべて「絵のどこか」で指定しています。
家具も絵です。キャットタワーや爪とぎ用の小物は、必要に応じて 奥の絵と手前の絵の2枚を重ねる 形にしています。猫が台や小物の近くに立つと、奥の絵より手前に、手前の縁より奥に描かれるので、本当にその場所にいるように見えます。タワーの台の位置は、絵を描いたあとに座標を測って小さなJSONに書き、アプリがそれを読みます。
flowchart LR PHOTO["部屋の絵"] --> CAM["絵に合わせたカメラ"] CAM --> FLOOR["絵の位置 → 床の3D座標"] PROPS["家具の絵(奥・手前の2枚)"] --> FLOOR FLOOR --> CAT["3Dの猫が歩く・座る・跳び乗る"]
猫のモデル選び
最初の猫は、無料素材の四角い「キューブ猫」でした。動きの確認には役立ちましたが、試作品らしさが強く、私が求める猫の可愛らしさには届きませんでした。
そこで、複数の3D素材サイトで、リアルで可愛い猫モデルを比較しました。本当はラグドールやサイベリアンのような、ふわっとした長毛の猫にしたい気持ちがありました。動きが100種類以上入ったものや長毛種に近いものもありましたが、品質の高いモデルは価格も高く、まず無料版を公開する段階で購入するのは見送りました。
最終的に採用したのは、Sketchfabで見つけた無料のソマリ猫「Somali Cat Animated ver 1.2」です。商用利用できるCC BY 4.0のモデルで、クレジットはアプリの「このアプリについて」に表示しています。最初のキューブ猫より自然になりましたが、理想としているラグドールのような可愛らしさにはまだ届いていません。無料モデルなので、毛並みや顔立ちは妥協しています。また、入っている動きも 立つ・歩く・座る・座ったまま・立ち上がる の5つだけです。この制約が、後の開発の大部分を決めることになりました。
今後、見た目・利用条件・動きの種類・iPhoneでの軽さを満たす、より可愛いモデルが見つかれば、差し替えを検討します。まずは無料モデルでアプリの体験を完成させ、実際に使ってもらうことを優先しました。
ない動きを、どう作るか
寝る、ごはんを食べる、毛づくろい、爪とぎ、へそ天。欲しい動きの多くは、モデルに入っていません。
最初は、骨(ボーン)を一本ずつ曲げて姿勢を作りました。首を下げ、前足を上げ、体を横に倒す。画面上ではそれらしく見える場面もありましたが、実際に確認すると、私は次のような違和感を持ちました。
- 寝ている姿が「物を横に倒しただけ」に見える
- へそ天が普通の猫の姿勢に見えない
- ごはんの時、前足がL字に長く伸びている
調べると、このモデルは前足の先が腕とは別の骨になっていて、腕を曲げると間の皮が引き伸ばされる作りでした。骨を曲げるほど不自然になるのは、作り方ではなくモデル側の限界だったのです。
そこで方針を変えました。
| 動き | 最終的な作り方 |
|---|---|
| 眠る | 3Dの猫を消し、Codexが描いた「丸まって眠る猫」の絵をベッドの上に表示する |
| へそ天 | このモデルでは自然に作れないため、入れない |
| ごはん | 前足は動かさず、首を前下に伸ばして口だけ器に届かせる |
| 毛づくろい | 前足を口元へ。数秒ごとに耳からほほへなでおろす「顔洗い」 |
| ボール遊び | 身を低くしてお尻をふりふり、跳びかかって毛糸玉を転がす |
「3Dで作れないところは絵に任せる」という判断は、部屋も家具も絵でできているこのアプリだからこそ自然になじみました。

私とClaude Code × Codexの役割分担
このアプリは、私と2つのAIで作っています。途中でどちらかのAIが利用上限に達すると、もう一方が作業を引き継ぎました。
| 担当 | 主な仕事 |
|---|---|
| 私(企画・開発) | 何を作るか・何をやめるかの判断、実際に触った感想、Unity Hub の操作、秘密情報の登録 |
| Codex | 絵と音素材の制作・加工、Unity機能の実装と修正、App Store用の文章・画像・申請自動化 |
| Claude Code | Unity機能の実装と動作確認、素材の組み込み、設計と引き継ぎ用の指示書作成 |
Codexへの依頼は、docs/codex/ に指示書(Markdown)として書き、私がその1行をCodexへ貼る形にしました。音源、アイコン、肉球、部屋、スクリーンショットなど、指示書は26本まで増えました。
同時に作業するためのルールも、失敗から生まれています。
- 同じファイルを2つのAIが同時に書き換えない(指示書で、触ってよいファイルを明記する)
- Unity Hub と Unity エディターの起動・終了は、作業前に担当を決める(テスト中の再起動や二重起動を防ぐ)
- 私のマウスやキーボードに頼らず、できるだけ自動確認する
マウスを使わずに動作を確かめる
私が同じパソコンで別の作業をしている間も、動作確認を続けられるようにしました。Unityのエディター内に DevBridge という小さな仕組みを作り、決まったフォルダに小さなファイルを置くと、Unityがそれを読んで操作します。
- 再生の開始・停止、スクリプトの再読み込み
- 猫に「ごはん」などの行動をさせる、ボタンを押す、猫をタップする
- iPhone と同じ縦長の比率で画面を撮影する(画面上下の、ホームバーなどの危険な領域を赤く塗る)
- App Store 用のサイズ(1290×2796)で撮影する
- 猫を真横から撮影する(足の長さや、床から浮いていないかの確認)
- ボタンの真ん中をタップしたら、本当にそのボタンに届くかを調べる
- 猫が各場所へ家具を避けて行けるかを一覧にする
姿勢の調整は、ほぼすべてこの「真横からの撮影」で確認しました。人の目で見て不自然なものは、数値ではなく画像で判断するのがいちばん確実でした。
見つかった問題と、その原因
| 症状 | 原因 | 直し方 |
|---|---|---|
| 猫がソファをすり抜ける | 立ち位置が、ソファの絵2枚の間(奥行きの帯)に入っていた | 立ち位置を手前の絵より前に出す |
| キャットタワーのボタンを押しても動かない | ソファの範囲を広げた結果、タワー前の立ち位置が「家具の中」と判定された | 家具の中の地点へは、外側から近づく場合だけ入れるようにする |
| Unity が何度も落ちる | 画面の部品が失われると毎フレームエラーが出て、ログが64MBまで膨らんでいた | 部品がないときは何もしないようにする |
| ボタンが押せない | テスト中に Unity の画面が横向きのまま残っていた | 縦向きに戻すメニューを追加 |
| ゴロゴロが鳴りっぱなし | 座るたびに毎回ゴロゴロを鳴らしていた | なでた時・ボタンを押した時・寝ている時だけ鳴らす |
| 眠る猫がベッドから落ちそう | 表示位置が布団の端だった | 布団の真ん中へ移動 |
| ごはんやミルクへ向かう途中で器と重なる | 器の障害物半径に猫の胴体ぶんの余白が入っていなかった | 器と猫の大きさを含む範囲を通行禁止にし、その外側で止める |
どれも、私が実際に触って「おかしい」と感じたところから見つかりました。
足し算より、引き算
開発の後半は、機能を増やすよりも減らす判断が多くなりました。
- 甘噛み:猫が指を甘噛みする動きでしたが、「何が違うのかよくわからない」ためメニューから外しました。
- くるくるおもちゃ:輪の中をボールが回るおもちゃを、Codexが絵を描き、動きまで組み込みました。でも、入れてみて不要と判断しました。
- クッションベッド:丸いクッションで眠る絵まで作りましたが、「寝るのはベッドの上で」と判断し、外しました。
- へそ天・2匹目の猫:不自然さが残るため、今回は入れません。
作ってから外すのは一見むだに見えます。でも、実物を見て決められるのは、AIと一緒に速く作れるからこその進め方でした。
猫の音をどう集めたか
このアプリは「猫のいる音」という名前なので、音もかなり時間を使いました。最初はネット上の猫動画から音を集める案もありましたが、権利的に危険です。SNSの動画やYouTubeの音を抜き出すと、個人利用ならともかく、App Storeで公開するアプリには使えません。
外部から使う素材は CC0またはパブリックドメイン に絞りました。猫の鳴き声、ゴロゴロ、足音、爪とぎ、雨、夜の虫、暖炉などを探し、使えるライセンスのものだけを選んでいます。さらに、水を飲む音、ウェットフードを食べる音、毛づくろいの舐める音のようなASMR寄りの音も加えました。出典はアプリ内とリポジトリに残し、あとから確認できるようにしています。
ただ、実際に使い続けると、猫の生活音は素材よりも自分の耳で選んだ録音のほうが自然に感じました。そこで、自分の猫を録った長い音声から、カリカリ、チュール、ミルク、顔洗いの4種類を切り出し、1.0.7で差し替えました。元の録音は残したまま、聞き取りやすい12秒を選び、低い雑音を除き、繰り返しの継ぎ目と音量を整えています。特にカリカリは、均一なざわつきではなく、一粒ずつ噛む音が分かる箇所を選びました。
集めて終わりではありません。実際にアプリへ入れると、音量がばらばらだったり、ループのつなぎ目でプツッと鳴ったり、短すぎて同じ音の繰り返しに聞こえたりします。そこで次の加工をしました。
| 音 | 加工したこと |
|---|---|
| 雨・夜の虫・暖炉・波・遠い街・雪の夜 | ループのつなぎ目を整え、長時間流しても耳につきにくい音量へ調整 |
| ゴロゴロ | なでた時や眠っている時だけ自然に鳴るようにし、iPhoneの振動とも合わせる |
| 鳴き声 | 19種類を用意し、毎回少しだけ高さを変えて、同じ声の連発に聞こえないようにする |
| カリカリ・チュール・ミルク・顔洗い | 自分の猫の長い録音から場面を選び、行動中に自然につながる12秒へ加工 |
| 足音・爪とぎ | 猫の行動に合わせて短く鳴らし、画面の動きとずれないようにする |
録音は長ければそのまま使えるわけではありません。空調や床の低い音を除き、行動がよく伝わる部分を探し、カリカリだけは噛む間隔を壊さないよう長いクロスフェードを使わずに仕上げました。素材の権利だけでなく、どの場面をどう加工したかも記録し、同じ音を再現できるようにしています。
音と、手ざわり
- 環境音は6種類(雨、夜の虫、暖炉、波、遠い街、雪の夜)。公開ライセンスを確認した素材を、ループのつなぎ目や音量をそろえて加工しています。長い音は、iPhoneのメモリを使いすぎないよう、少しずつ読み込みながら再生します。
- 猫の声は19種類。やわらかい鳴き声、のどを鳴らす声、トリル、ごはんをねだる声などを、毎回ランダムに選び、声の高さも少しずつ変えています。カリカリ、チュール、ミルク、顔洗いには自分の猫の録音を使い、爪とぎや足音も別に用意しました。
- 猫をなでると、iPhoneの振動でゴロゴロが手に伝わります。
- おやすみタイマーを使うと、音がゆっくり小さくなって止まります。画面を消しても、マナーモードでも音は流れ続けます。
アイコンと、アプリの顔
もう一つ時間がかかったのが、アイコンです。猫アプリは、アイコンの印象でかなり期待値が変わります。最初は手描き感のある猫、次に少しスタイリッシュな猫、さらに窓辺・猫・音の波が一目で分かる平らな線の猫へと、何度も方向を変えました。
ここで難しかったのは、かわいければよいわけではないことです。アイコンは1024×1024ではよく見えても、ホーム画面では小さくなります。細いひげや淡い毛並みはつぶれやすく、背景とのコントラストが弱いと印象が残りません。そこで、猫を大きくし、窓は小さくし、音の波は残す、という引き算をしました。アプリ内のやわらかい雰囲気を保ちつつ、App Store上でも一目で「猫のアプリ」と分かる形を探しました。
審査の途中で一度提出を取り下げたのも、アイコンを差し替えるためです。中身の機能だけでなく、最初に目に入る顔を整えることも、公開前の大きな作業になりました。
肉球とねこあし
猫アプリとして譲れなかったのが「肉球」です。画面いっぱいの白い前足を押すと、指がキュッと閉じます。むちむちの「ねこあし」は、画面の左右をさわると、そちら側の足がふみふみします。どちらもCodexが描いたオリジナルの絵で、ずれないよう複数の絵をぴったり重ねて切り替えています。
ぷにぷに
そっと押してみてね
もどる
課金を、1.0では見送りました
当初は買い切りの「プラス」(610円)を用意し、夜の虫と暖炉の音、30分・60分のタイマー、肉球とねこあしの無制限を有料にする予定でした。実装も、価格の取得も、購入の復元も、ひととおり動く状態まで作りました。
ところが提出の直前で、Appleの決まりに行き当たりました。そのアプリで初めての買い切り商品は、アプリのバージョンと一緒に審査へ出さなければならないのです。ところがAPIからも管理画面からも、課金をこの1.0の提出物に加えることができませんでした。
ここで私は、公開を優先することに決めました。判断の軸は、まず無料で体験してもらい、使い続けてもらえるかを確かめる。課金はその後に考える、というものです。
そこで1.0は、すべての機能を無料にしました。押しても何も起きない購入ボタンを残すより、全部開けてしまうほうが筋が通っています。有料化は、無料版とはっきり区別できる新しい内容を用意できた場合に改めて検討します。いま無料で使えるものを、あとから有料に戻すことはしません。
- 広告は入れず、登録やログインもありません。
- 猫の名前やなつき度などの設定は、iPhoneの中にだけ保存します。
Macを持たずに、iPhoneアプリを出す
開発に使っているのは Windows のパソコンで、Mac はありません。当初の計画は、GitHub Actions の Linux で Unity から Xcode プロジェクトを書き出し、macOS で署名して送る、というものでした。
この計画は、途中で崩れました。Unity の無料ライセンスが、CI(クラウドのビルド機)で有効化できなくなっていたのです。手動での有効化そのものが廃止されており、どう設定しても「ライセンスファイルがない」と言われます。
そこで、役割を分けました。
- Windows の Unity で Xcode プロジェクトを書き出す(ライセンスは手元にある)
- それを圧縮して GitHub のリリースに置く
- GitHub Actions の macOS が受け取り、証明書を作って署名し、App Store Connect へ送る
ここでも、小さな落とし穴がいくつもありました。
| つまずき | 原因 | 直し方 |
|---|---|---|
| macOS で解凍できない | PowerShellで作ったZIP内のパスがWindows形式の「\」になった | tar 形式で固める |
| 署名が通らない | Xcodeの自動署名が開発用証明書と端末登録を求めた | 配布用の証明書とプロファイルを毎回その場で作って指定する |
| アップロードは成功するのに、ビルドが現れない | Xcode がビルド番号を勝手に次の空き番号へ振り直していた | その自動採番を切り、Unity 側の番号を正とする |
| 審査へ出せない | ビルドに暗号化の申告が付いていなかった | 添付と同時に申告を自動で付ける |
App Store Connect 側の作業も、管理画面を手で触るのではなく、API を呼ぶスクリプトにまとめました。バージョンの作成、日本語の説明文、スクリーンショットの差し替え、価格と配信地域、ビルドの紐づけ、審査への提出まで、すべて何度でもやり直せます。
- App Store の紹介文とキーワード
- アプリの実画面から撮ったスクリーンショット6枚(iPhone)とiPad用1枚
- 公開前チェック用のスクリプト(40項目)
- サポートページとプライバシーポリシーの公開

現在の状況と、これから
2026年10月8日、バージョン1.0が App Store で公開されました。審査は一度も差し戻されず、提出から約5日で通りました。その後も、言語表示、猫の動き、毛色、朝の部屋、環境音、生活音を順に改善し、2026年10月27日に1.0.7が公開されました。
提出したのは無料のアプリ本体1件だけで、買い切りの「プラス」は含めていません。審査の途中で一度だけ提出を取り下げています。アイコンを、手描きの猫から平らな線の猫へ差し替えたためです。審査が始まる前だったので、取り下げて新しいビルドで出し直しました。
公開してすぐ、product ページで一つ間違いが見つかりました。「言語:英語」と表示されていたのです。App Store はアプリの対応言語を、ストアに登録した文章ではなく、アプリ本体の中の設定から読みます。Unityが書き出す初期値が英語のままでした。日本語を書き込むようにして、1.0.1として出し直し、こちらも公開まで完了しました。
これからの予定です。
- 実機で使ってみて、気になるところを直す
- 猫の移動や食事など、毎日見る動きを少しずつ自然にする
- より可愛いモデルが見つかった場合は、動きとiPhoneでの軽さを確認して差し替えを検討する
まとめ
「猫が自由に歩き回って、さわると反応する」。この一文から始まったアプリは、2週間で審査に出せるところまで来ました。残ったのは、次の3つの判断です。
- 猫だけを3Dにして、部屋は絵に任せる
- 3Dで無理のある姿勢は作らず、絵に置きかえる
- 触ってみて、いらないものは外す。出せないものは、出せる形に変える
AIが得意なのは、速く作って、速く直すことです。何を残して何をやめるかを決めたのは、毎回、実際に画面を触った私でした。
クレジット
- 猫のモデル:Somali Cat Animated ver 1.2 by DreamNoms(CC BY 4.0)
- 環境音・猫の鳴き声・効果音:CC0/パブリックドメインの素材と、開発者自身の猫を録音した音(出典と加工内容はリポジトリに記載)
- フォント:M PLUS Rounded 1c(SIL Open Font License)
- 部屋・家具・肉球・ねこあし・眠る猫の絵:このアプリのために作成したオリジナル