個人開発 / Free 1.0 App Store提出準備中・VPS本番運用

「今日、子どもとどう過ごそう?」を、
5分で決められるアプリ。

天気・予算・親の体力・子どもの興味——バラバラの条件をミックスして、いま現実にできる「あそび体験」を提案する、保護者のためのiOSアプリです。

SwiftUI FastAPI PostgreSQL Docker / VPS Cloudflare Tunnel Codemagic CI TestFlight AIエージェント駆動開発
アプリの世界観を見る 開発の見せ所へ
WHY

「どこ行く?」が決まらないまま、
土曜の朝が過ぎていく。

子どもとの休日は楽しいはずなのに、行き先を決めるまでがいちばん疲れる。あそびミックスは、この「意思決定コスト」に絞って作られています。

🌀

条件がいつもバラバラ

天気、予算、移動手段、親の体力、子どもの気分。検索サイトはスポットは教えてくれても、「今日のうちの条件」では絞ってくれません。

調べているうちに午前が終わる

候補を見つけても、営業しているか、予約は要るか、雨でも大丈夫かの確認で時間が溶ける。決められないまま「また今度ね」に。

📅

情報の鮮度が命

子連れのお出かけ情報は、イベント終了・時間変更・予約枠の変化が激しい。古い情報を信じて出かけた失敗は、親の信頼を一発で失います。

5分
DECISION TIME

🎯 KPIは機能数ではなく「意思決定時間」

家庭内パイロットの完了条件を「アプリ起動から5分以内に、今日の予定を決められること」と定義。3回の実利用検証で「候補を実際の行動判断に使えるか」を記録票つきで確認するプロセスを設計し、実施済みです。機能を足すことではなく、保護者の朝の5分を取り戻すことをゴールにしています。

iOS APP

水彩の街を眺めていたら、
今日のあそびが灯っている。

検索結果のリストではなく、「あそびマップ」から始まる体験。SwiftUIで、絵本のような世界観と実用性を両立させました。

9:41
きょう 0円 徒歩・自転車 体力すくなめ
🏠
🌳
📚
🎪
そとあそび

大宮公園で どんぐり&まつぼっくり さがし

🚶 徒歩12分💰 0円✅ 予約不要
☀️ きょうの天気なら気持ちいいはず

※ 実装済みホーム画面(あそびマップ + 推薦カルーセル)の構成を再現したイメージ

🗺️

あそびマップ

推薦された体験が、水彩の街にピンとして灯る。ピンチ・ドラッグで探索でき、ピンとカードの選択が連動してぽんっと弾みます。

🎛️

条件ミックス

今日/今週末/今月 × 予算 × 天気 × 移動手段 × 親の体力 × 興味タグ。未指定の条件は家庭プロフィールから自動補完します。

📌

保存 と 実施メモ

気になる体験を保存し、実際にやってみた記録を実施メモに。家庭の「あそびの履歴」が次の推薦の材料になります。

🎯

季節ビンゴ

「春のあそびビンゴ」のように、季節ごとのあそびをビンゴ形式で。子どもと一緒に埋めたくなる仕掛けです。

🤝

失敗に寄り添う接続設計

Wi-Fi切断・スリープ復帰・サーバ再起動を想定し、再接続導線とエラー文言を人の言葉で設計。設定復旧フローはUIテストで担保しています。

🗾

地域ピッカーと正直な空状態

住んでいる地域を選ぶと、マップも推薦もその地域仕様に。データがまだ薄い地域では、それらしい候補で取り繕わず「準備中」と正直に伝える文言設計にしています。

川辺で親子が水あそびをしている水彩イラスト
晴れた日は川へ
0円・徒歩圏のリアルな提案
雨の日に家の中で親子が工作をしている水彩イラスト
雨なら家で工作
悪条件でも「逃げ道」を出す
科学館で父親と子どもが展示を見ている水彩イラスト
学びたい日は科学館へ
興味タグ×学び志向の推薦
公園の遊具で父親と子どもが遊んでいる水彩イラスト
体力があまってる日は公園
親の体力も条件のひとつ

アプリ内イラストはすべてAI生成。スタイル定義を「スキル」として整備し、量産しても世界観が崩れない仕組みにしています。

AI ENGINEERING

AIを使う場所使わない場所を、
設計で決める。

このプロダクトのAI活用は2層あります。プロダクトの中でのAIの役割設計と、開発プロセスそのもののAIエージェント活用です。

プロダクト内のAI

AIに「事実」を語らせない、
反ハルシネーション設計

子連れのお出かけは、料金や予約要否をひとつ間違えるだけで実害が出るドメイン。だからAIの権限を意図的に絞りました。

  • 事実の選定はルールベース。候補抽出→ハードフィルタ→スコアリング→カテゴリ配分まで、決定的なロジックで実装。
  • AIの役割は表示コピーの整形に限定。料金・日時・公式URL・予約要否をAIが「創作」する余地を構造的に排除。
  • AI呼び出しはすべてログに記録。プロバイダ設定はDeveloper API(scope分離されたトークン)でのみ変更可能。
  • 条件正規化 + SHA-256ハッシュのキャッシュ設計。プロフィール更新でバージョンが上がり、キャッシュが自然に無効化される仕組み。
  • オープンデータにもライセンスの門番。出典・ライセンスを検証したデータセットだけを取り込み、出典ページを自動公開。データセット単位で非公開化もできる。
開発プロセスのAI

契約とテストでAIを縛る、
エージェント駆動開発

設計・実装・検証の大部分をAIエージェント(Claude / Codex)と協働。ただし「任せ方」に一貫したルールを敷いています。

  • 先に契約を固める。OpenAPI仕様と設計ドキュメント21本を先行整備し、AIはその契約の中で実装する。
  • 1タスク = 成果物 + 実装 + 検証 + コミット。T04〜T31のバックログからP1〜P7のフェーズ計画まで完了条件つきで定義し、迷子にならない開発単位を維持。
  • 検証スクリプト44本で人間が判定。AIの成果は verify_all.sh からリリースゲートまで、再現可能なスクリプトで確認。
  • イラスト生成もスキル化。水彩スタイルの定義を再利用可能なスキルとして整備し、世界観の統一を仕組みで担保。

思想は一貫して、「AIに任せる範囲を、契約とテストで縛る」
速度は借りて、品質の責任は人間が持つ。

ARCHITECTURE & OPS

家庭内LANのMac miniから、
VPSの本番環境へ育てる。

個人開発でも、落ちたら直る・追跡できる・安全に公開できる基盤を整備。家庭内LANで始めたMVPをDocker化してVPS本番へ移行(復元訓練込み)し、同じコードベースでTestFlight配信まで運用しています。

📱

iPhone
SwiftUI App

MVVM / XCUITest E2E / 再接続リカバリ

☁️

Cloudflare Tunnel

本番の公開経路 / レートリミット適用 / オリジン非公開

⚙️

FastAPI on VPS

Docker Compose 4コンテナ / 3種トークン認証 / 公開時はdocs閉鎖

🗄️

PostgreSQL

migration 15本 / seed分離 / R2へ日次バックアップ

🚀 CI/CD — Codemagic → TestFlight 署名証明書の取得からIPAビルド、ビルド番号の自動加算、TestFlight配信までをCIで自動化。build 12までApp Store Connectへ配信済み。バックエンドのseed検証もパイプラインに組み込み。
🖥️ 管理コンソール — 5タブの日本語運用UI 下書き→承認→公開を扱うAdmin API群と非同期ジョブに加え、承認キュー・地域・データセットを束ねる5タブ構成のコンソールを実装。日本語ラベル・用語集・朝レビューガイドで、毎朝の運用を1人で回せます。
🔄 地域鮮度パイプライン(下で詳説) 地域の一次情報を定期取得し、差分検知→ドラフト→人間レビュー→公開。「情報の鮮度が命」への回答です。
🚦

リリースゲート

隔離したPostgreSQLでAPI検証 → 管理コンソールのdry-run → L3公開/修正/ライフサイクル → SwiftUI XCUITestまでを一気通貫で流すE2Eプロファイル。リリース前の「全部つないで動くか」を1コマンドで判定します。

🔎

観測性 — 追える、けど覗かない

JSON Linesの構造化ログにX-Request-IDがAPI応答まで貫通。一方でトークン・リクエスト本文・IP・子どものメモは記録しないことを明文化。障害切り分けとプライバシーを両立します。

🔁

自動復旧とバックアップ

コンテナ再起動で自己回復し、UptimeRobotの5分間隔外形監視で異常に気づける。DBはCloudflare R2へ日次バックアップし、復元訓練も実施済み。iOS側の再接続もUIテストで担保しています。

🛡️

公開時の防御

App / Admin / Developerの3種トークン + scope判定で権限を分離。公開環境ではOpenAPIドキュメントを閉じ、ヘルス応答の情報量も削減。Cloudflareのレートリミットも適用済みです。

📜

出典とライセンスの門番

オープンデータの取り込みはライセンス検証を通過したデータセットのみ。首都圏108スポットを冪等importとrun履歴で管理し、出典ページを自動公開。データセット単位で公開/非公開を切り替えられます。

👤

匿名アカウントと削除権

氏名・メール不要の端末ごと匿名アカウント。トークンはKeychainに保存し、アプリ内からデータ削除まで完結。利用規約・プライバシーポリシーに子どもデータの扱いと利用状況計測を明記しています。

🔄 地域鮮度パイプライン — Human-in-the-loopのデータ運用

推薦の信頼はデータの鮮度で決まる。大宮エリアで確立した更新パイプラインを浦和・新都心/与野のsource台帳へ拡張し、日次の自動ジョブ(一次情報の取得→ドラフト生成→品質スナップショット→計測集計)と人間レビューの組み合わせで運用しています。

1
定期取得

地域情報ソースを優先度つきで巡回取得

2
差分検知

コンテンツのハッシュ比較で変化だけを抽出

3
ドラフト生成

変更点からイベント下書きを自動作成

👤 人間レビュー
4
確認・修正

事実確認と修正を経てはじめて公開可能に

5
公開・再検証

推薦へ反映後も再検証ジョブで鮮度を監視

🧪 バックエンドテスト 332件

契約テスト・ユニット・PostgreSQL統合の3層、テストファイル49本で推薦コアからスポットimportまで固定。

📲 実機E2E

シミュレータに加え、LAN接続の実機iPhoneで保存〜メモ削除までのタップ操作E2Eを自動化。

👨‍👩‍👧 家庭内パイロット

自動テストでは測れない「本当に決められるか」を、実利用3回の記録票で検証済み。

📐 ドキュメント駆動

API契約・テスト設計・運用手順まで設計ドキュメント21本+フェーズ完了レポート群。実装と同一タスク内で同期。

ROADMAP

現在地と、これから。

無料版「Free 1.0」のApp Store提出準備まで進みました。できていること・これからやることを正直に分けて示します。

完了 — 2026.06 上旬

設計とコア実装

OpenAPI契約・推薦ロジック仕様・DB設計を先行整備。決定的な推薦コア、条件正規化とキャッシュ、SwiftUI MVPの主要画面を実装。

完了 — 2026.06 中旬

LAN家庭内パイロットと運用基盤

家庭内LANで実運用を開始。構造化ログ、launchd自動復旧、実機受入テスト、再接続リカバリを整備し、実利用3回のパイロット検証を実施。

完了 — 2026.06 下旬

TestFlight配信と鮮度パイプライン

Codemagic CIで署名〜TestFlight配信を自動化し、公開リハーサルを完了。大宮L3鮮度パイプライン、管理コンソール、リリースゲートを実装。

完了 — 2026.07 上旬

VPS本番移行と公開の土台

バックエンドをDocker化してVPSへ移行し、外形監視・R2日次バックアップ・復元訓練まで整備。匿名アカウントとデータ削除を実装し、利用規約・プライバシーポリシーを公開。

完了 — 2026.07(P1〜P7)

地域プラットフォーム化

地域マスタ10地域と出典・ライセンス基盤を整備し、首都圏の公開スポット108件をライセンスゲート付きで取り込み。マルチ地域推薦と利用計測を実装し、大宮のL3運用をさいたま市内(浦和・新都心/与野)へ拡張。

🚧 いまここ

Free 1.0 をApp Storeへ提出する

登録不要・課金なしの無料版1.0。TestFlight build 12をApp Store Connectへアップロード済みで、実機での最終確認とストア情報の整備を経て審査提出へ。ここを越えると「知らない誰か」に使われ始めます。

計画 — Free 1.0 公開後(P8〜P9)

通知基盤とAI運用の本格化

APNsプッシュ通知の基盤を整備し、利用計測の日次集計をもとに推薦品質と情報鮮度の運用を検証。反ハルシネーションのガードレールを維持したまま、AIによる表示コピー生成を本番へ投入します。

計画 — 拡大期(P10〜P12)

Plus 1.1 — サブスクリプションとエリア拡大

StoreKit 2によるPlusプラン(サブスクリプション)を実装してPlus 1.1を申請。さいたま市で確立した地域パイプラインを他エリアへ横展開します。

※「計画」の項目は現時点で未実装の構想です。実装済みの範囲と混ざらないよう、明確に分けて記載しています。

108
公開スポット
(首都圏オープンデータ)
10地域
地域マスタ
(首都圏〜生活圏)
332
バックエンド
テスト
51
APIエンドポイント
(OpenAPI契約)
3.4万行
Python
バックエンド
5.5千行
SwiftUI
iOSアプリ

2026年7月時点のリポジトリ実測値