stamp-rally-ramen-jiro
WIP(現在進行中)
Work In Progress
このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。
現在の状況
2026-08-31 15:40 時点
- 企画・設計フェーズ完了: 技術スタック(SwiftUI 先行 / Kotlin 後追い)、GPS 押印、Cloudflare Workers + D1、匿名 + Apple/Google 連携、アプリ名「二郎スタンプ」まで決定済み(
DECISIONS.md) - 店舗マスタ
data/stores.json(46 店、座標・住所・公式 X)作成済み。data/README.mdに更新手順 - MVP 設計
docs/DESIGN.md確定済み ios/JiroStamp/に演出確認用プロトタイプあり(台紙・朱印・押印演出・正の字・ダークモード)。シミュレータで全パターン確認済み、スクショはdocs/prototype/。GPS・サーバー・設定は未実装- 次にやること: ① You がプロトタイプを触って演出フィードバック → 調整 → ② 本実装の足場(位置判定・地図・店舗詳細・設定)と
server/(Hono + D1、stores.json 投入) - 未決事項: 演出の細部(降下速度・滲み・カバー遷移・正の字サイズ)は You の感触待ち。営業時間データはソース間で食い違いがあり参考値扱い
過去のWIPアーカイブ
(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)
2026-08-31 15:00 時点のスナップショット
2026-08-31 時点
- 技術スタック・スタンプ取得方式・バックエンド・認証方針を決定済み(
DECISIONS.md参照) - 店舗マスタ
data/stores.json(直系 46 店、座標・住所・公式 X 付き)をインターネットから収集して作成済み。収集ソースと検証内容はdata/README.md - MVP 設計
docs/DESIGN.mdを確定(未決事項もすべて判断済み) ios/JiroStamp/に演出確認用プロトタイプを作成(xcodegen、SwiftUI、iOS 17+)。台紙・手続き描画の朱印・押印演出・正の字・節目3種・ダークモードをシミュレータで確認済み。スクショはdocs/prototype/- 次にやること: ① You がプロトタイプを触って演出のフィードバック → ② 本実装(位置判定・地図・店舗詳細・設定)と
server/(Workers + D1)の足場 - 詰まっていること: なし。営業時間データはソース間で食い違いがあり参考値扱い(公式 X 導線で代替)
ROADMAP(計画)
ロードマップ
今週
- 技術スタック・スタンプ取得方式・バックエンド・認証の決定
- 店舗マスタ
data/stores.jsonの収集 - MVP 設計
docs/DESIGN.md - 演出確認用プロトタイプ
ios/JiroStamp/ - プロトタイプを実機/シミュレータで触って演出を調整
- iOS 本実装の足場(位置判定・地図・店舗詳細・設定・アカウント削除)
-
server/の雛形(Hono + D1、店舗マスタ配信・匿名ユーザー・スタンプ同期・失敗ログ)と stores.json の D1 投入
今月
- iOS MVP を通しで動かす(GPS 判定 + サーバー同期 + Apple/Google 連携)
- 検知失敗ログを見て店舗ごとの半径を調整
- App Store 提出準備(アイコン・スクショ・審査ノートに押印動画・プライバシーポリシー)
- TestFlight で実店舗(三田本店など都心)での押印を実地確認
今四半期
- iOS リリース
- v1.1: 丼写真の後貼り、共有画像(台紙)
- Android 版(Kotlin / Compose)着手
いつか
- ランキング・友達共有・全ユーザー統計(店別押印数のような全体統計を優先)
- メモ(コール・メニュー)の後貼り
- ウィジェット / Live Activity
- 手動チェックイン救済(失敗ログで半径を直しても解決しない場合)
- リジェクト時の表示名差し替え候補: 黄看板スタンプ / 直系スタンプ帳
DECISIONS(意思決定)
意思決定記録
このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。
2026-08-31: アプリ名は「二郎スタンプ」、Bundle ID は jp.co.ramanu.jirostamp
決定: App Store 表示名・ホーム画面名は「二郎スタンプ」、Bundle ID は jp.co.ramanu.jirostamp、Xcode プロジェクト名は JiroStamp。
理由: 分かりやすさを優先。「二郎」を表示名に含めることによる審査 5.2.1(第三者商標)のリスクは認識した上での判断。表示名は後から変更できるため、リジェクト時は表示名のみ中立名(候補: 黄看板スタンプ / 直系スタンプ帳)に差し替える。Bundle ID はユーザーに見えないため審査上の実害は小さい。接頭辞は pocket-museum と同じ jp.co.ramanu。
見送った選択肢: 最初から中立名にする案(design-expert の推奨)。
2026-08-31: MVP の設計方針(docs/DESIGN.md)
決定: game-design-expert / design-expert の提案を統合した docs/DESIGN.md を MVP の設計とする。主な判断:
- 2タブ(スタンプ帳 / 地図)+ 設定。46枠の台紙は空枠も全部見せ、県別セクション
- 検知は自動、押印は手動タップ。判定は「距離 − 精度 ≤ 半径」の寛容側 + 30分のラッチ。失敗ログをサーバーに送り半径を実運用で調整
- 位置情報権限は初めて押そうとした瞬間に要求。近接カードがプレパーミッションを兼ねる
- 派手な演出は 1店目・23店・46店 の3つ。10店 / 35店(首都圏制覇)/ エリア制覇は静かな記録として MVP に含める
- ベテランもゼロから(自己申告レイヤーなし)。押印タイミングの案内はしない
- アカウント連携は Sign in with Apple と Google の両方。未連携なら5店ごとに訴求カード
- 丼写真は MVP から外し v1.1 で「後貼り」方式。データモデルにスロットだけ用意
- ビジュアルは「判子文化」を根拠に朱を使い、看板は再現しない。アプリ名・アイコンに「二郎」は入れない
- 文化的禁じ手: 店の格付け・混雑投稿・来店を煽る通知・営業時間の断言・コール解説
理由: 詳細は docs/DESIGN.md。要点は「自己満・報酬なし・低頻度」の性質に合わせ、DAU 施策や派手なゲーミフィケーションを捨て、台紙と正の字に集中すること。
2026-08-31: バックエンドは Cloudflare Workers + D1、認証は匿名スタート + Apple 紐付け任意
決定:
- サーバーを持つ(端末ローカル完結にしない)。構成は Cloudflare Workers(Hono)+ D1
- 認証は初回起動時に端末側で鍵を生成して匿名ユーザーを作成し、ログイン画面なしで開始。機種変更の引き継ぎ・将来の友達機能のために Sign in with Apple での紐付けを任意提供(Android 版では Google に置き換え)
- 匿名でもアカウントを持つため、審査要件の「アカウント削除機能」を設定画面に最初から用意する
サーバーが持つデータ:
- 店舗マスタ(座標・営業情報・閉店フラグ)→ 開店・閉店対応をアプリ審査なしで反映
- ユーザーのスタンプ記録(店舗 ID・取得日時・訪問回数)
- 将来: 集計テーブル(店舗別訪問数・ランキング)。D1 の集計 + Cron Trigger で日次集計
クライアント側: スタンプは端末にも保存し、サーバー同期は非同期(圏外でも押せる)
理由:
- 将来ランキング・友達共有・全ユーザー統計をやりたい可能性があるため、ローカル完結は見送り
- Supabase の無料枠(2 プロジェクト)は subnote / sisters-book-cafe で使い切っており、3 つ目は Pro($25/月〜)が必要で自己満アプリには重い
- Cloudflare は既に 14 プロジェクトで運用中で慣れており、Workers 日 10 万リクエスト・D1 5GB の無料枠で十分
- 匿名スタートにするのは初回起動の離脱を防ぐため。Apple 必須は実装が単純だが摩擦が大きい
見送った選択肢:
- 端末ローカル完結 + iCloud: 運用コストは最小だが将来のソーシャル機能に対応できない
- Supabase: 無料枠を使い切っている
- Sign in with Apple 必須: 初回離脱が増える
2026-08-31: スタンプ取得方式は GPS 位置判定
決定: スタンプ取得は GPS 位置判定(店舗座標を中心としたジオフェンス)で行う。店舗掲示の QR コードや手動チェックインは採用しない。
理由:
- ラーメン二郎は各店独立運営で、QR 掲示などの店舗協力は現実的に取り付けられない
- 本アプリは「自己満足」のためのもので、達成者へのプレゼント等の金銭的インセンティブは付けない。よって位置偽装をしてまで不正する動機が弱く、厳密な不正対策は不要
- 位置情報権限は「使用中のみ」で足りるため審査負担も軽い
暫定の細部(変更可):
- 判定範囲: 店舗座標から半径 100m 程度(店内滞在時間の判定はしない)
- 同一店舗の再取得: 1 店舗 1 スタンプの制覇型。訪問回数はカウントとして保持
- 丼・食券の写真添付: 検証目的ではなく記念・コレクション用として任意添付(MVP に含めるかは未定)
見送った選択肢:
- 店舗掲示 QR: 店舗協力が必須で非現実的
- 手動チェックイン: ラリーとしての達成感を担保できない(救済用に後日追加する余地は残す)
2026-08-31: モバイルの技術スタックはネイティブ別実装(iOS 先行)
決定: iOS は SwiftUI ネイティブで先行開発・先行リリースし、Android は Kotlin / Jetpack Compose でその後に順次対応する。Flutter / React Native などのクロスプラットフォーム FW は採用しない。
理由:
- 過去プロジェクト(pocket-museum / subnote / kowai)がすべて「SwiftUI + Kotlin 別実装」で、実績とツール資産(XcodeBuildMCP、ios-debugger、store-screenshots、codex-qa-loop)がこの構成向き
- 中核機能(位置情報 / カメラ(QR) / 地図 / プッシュ通知)はネイティブ API との相性が最も良く、審査対応の知見も流用できる
- ロジック量は小さく、データをサーバー側に寄せれば両 OS は薄いクライアントで済むため二重実装コストは限定的
- iOS/Android の同時リリースは必須ではない(順次でよい)と確認済み
見送った選択肢:
- Flutter: 同時リリース必須なら有力だったが、今回はその制約がない
- React Native (Expo): Web 版同時展開の予定がない
- KMP: この規模ではオーバーエンジニアリング
DEVLOG(作業ログ)
開発日誌
このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。
2026-08-31
14:10 - 企画・設計の確定、店舗マスタ収集、演出プロトタイプ
やったこと
- プロジェクト概要を CLAUDE.md に記入(ラーメン二郎専用スタンプラリー、iOS/Android、作成から運用まで一元管理)
- 技術スタック・スタンプ取得方式・バックエンド・認証を順に決定(詳細は DECISIONS.md)
- 直系 46 店の店舗マスタ
data/stores.jsonを作成。Wikipedia(店舗一覧)→ まとめサイト(住所・営業時間・公式X)→ OSM Overpass(座標)→ 国土地理院 API(住所ジオコーディング)で収集し、42 店は2ソースの座標が 110m 以内で一致、OSM 未登録の 4 店は Yahoo!マップ等で住所を裏取り。収集手順と更新手順はdata/README.md - game-design-expert / design-expert に並行で壁打ちし、統合した MVP 設計を
docs/DESIGN.mdに作成。未決 4 点(ベテラン問題・押印タイミング・静かな記録・連携訴求)も You の判断で確定 - アプリ名「二郎スタンプ」・Bundle ID
jp.co.ramanu.jirostampを決定 ios/JiroStamp/に演出確認用プロトタイプを作成(xcodegen + SwiftUI、iOS 17+)。台紙 46 枠、手続き描画の朱印(層ごとに円/角丸四角/八角、シード付き掠れ)、押印演出(降下・触覚・滲み・数字ロール・節目 3 種)、正の字の加算、ダークモード。XcodeBuildMCP でシミュレータ操作して全パターンを確認し、スクショをdocs/prototype/に保存
気づき
- まとめサイトの WebFetch 抽出で 1 店の住所が隣の行と混ざった(小滝橋通り店)。一覧系は必ず別ソースで突合する
- Wikipedia の wikitext は
<gallery>が複数あり、index('<gallery>')で範囲を切ると空になる。開始位置以降で検索すること - SwiftUI の
onTapGestureはアクセシビリティ要素にならず XcodeBuildMCP の tap ターゲットに出ない。touchでテキスト要素に直接イベントを送れば動くが、本実装ではセルを Button にすべき - 縦組み店名を 5 文字で機械的に折ると「京成大久保/店」のように偏る。列数を先に決めて均等割りにした
- 審査員は日本にいないので GPS 押印を試せない。App Review 情報に動画を添付する前提(DESIGN.md §9)
次回やること
- You がプロトタイプを触って演出のテンポ・印影の雰囲気をフィードバック(候補: 降下 0.22s→0.3s、滲みの表現、fullScreenCover のスライド除去、正の字のサイズ)
- 本実装の足場(位置判定・地図・店舗詳細・設定)と
server/(Hono + D1)の雛形、stores.json の D1 投入 - expert から依頼のあった知識ベース登録(design: 有限コレクションでは空枠を全部見せる 等 / game-design: 低頻度高強度ループ 等)
最近のコミット
- e79d34c .devnotes を更新(企画・設計確定、店舗マスタ収集、演出プロトタイプ作成分) 2026/8/31
- f29ddda 演出確認用の iOS プロトタイプ ios/JiroStamp を追加(台紙・朱印・押印演出・正の字) 2026/8/31
- 85be75d アプリ名「二郎スタンプ」と Bundle ID jp.co.ramanu.jirostamp を決定し記録 2026/8/31
- fc576c9 設計の未決事項を確定(ベテランはゼロから・静かな記録を含める・Apple/Google 連携を5店ごとに訴求)し DECISIONS に記録 2026/8/31
- 5936908 MVP 設計ドキュメント docs/DESIGN.md を作成(コアループ・画面構成・押印UX・ビジュアル方針・MVP線引き) 2026/8/31
- 66b52e9 直系46店の店舗マスタ data/stores.json を収集・作成し、ソースと更新手順を README に記録 2026/8/31
- 88e6593 技術スタック・スタンプ取得方式・バックエンド構成を決定し CLAUDE.md と DECISIONS.md に記録 2026/8/31
- d045d27 Initial commit 2026/8/31
README
stamp-rally-ramen-jiro(ラーメン二郎スタンプラリー)
概要
(記入予定)
セットアップ
(記入予定)
使い方
(記入予定)