定番メシ MVP仕様書 v1
定番メシ MVP仕様書 v1
1. アプリ概要
定番メシは、日本向けiPhoneアプリとして、自分のお気に入りの店で「いつもの注文」をすぐ思い出すための個人用メモアプリである。
食べたものを日記的に残すことではなく、店に入る直前、レジ前、券売機前、注文直前に、過去に自分が頼んでよかった注文セットや次に試したい注文を即参照することを最大の価値とする。
- アプリ名: 定番メシ
- サブタイトル: いつもの注文メモ
- コア価値: 注文前に迷う時間を減らす
- 保存方針: ログインなし、ローカル保存
- 主役: 店舗レビューではなく、店ごとの自分の注文セット
2. MVPの基本方針
MVPでは、以下を最優先する。
- すぐ見つかる
- すぐ読める
- すぐ登録できる
- 登録内容が増えてもごちゃつかない
- ログインやSNS要素で即時性を損なわない
2.1 MVP設計の非交渉条件
このMVPは、簡素な食事記録プロトタイプではなく、注文直前に使う即参照ツールとして成立している必要がある。
- ホームは検索と最近見た店へのショートカットを中心にする
- 店詳細は「定番 -> 次試す -> 試した」の順を崩さない
- 店詳細は注文直前にすぐ読める高密度テキスト表示を基本にする
- 注文内容の複数行入力を、定番メシの中核UXとして扱う
- 写真、評価、店舗情報、食事ログの時系列表示を主役にしない
- MVPの成功条件は「記録できる」ではなく「注文前に迷わず見つけられる」である
2.5 想定ユーザー
メインユーザー:
- チェーン店や行きつけの飲食店をよく使う人
- 自分の定番注文やカスタムを忘れがちな人
- 食べたもののレビューではなく、「次に何を頼むか」を管理したい人
- スタバ、松屋、サイゼリヤ、丸亀製麺、マクドナルド、町中華、ラーメン店などで自分なりの注文セットを持っている人
具体的な利用例:
松屋
牛めし並
豚汁変更
生卵
サイゼリヤ
小エビのサラダ
若鶏のディアボラ風
ライス小
スターバックス
ドリップ Tall
低脂肪乳変更
ワンモア用
二郎系ラーメン
小ラーメン
ニンニク
アブラ
3. 画面仕様
3.1 ホーム画面
目的は、アプリ起動後に目的の店や注文へすぐ到達すること。
表示要素:
- アプリ名「定番メシ」
- 検索バー
- 検索結果
- 最近見た店
- 「+ 新しく記録」ボタン
検索未入力時:
- 最近見た店を最大5から8件程度チップ表示する
- 新規登録導線を表示する
- 注文セット一覧を大量に並べない
検索入力時:
- 店名、注文内容、メモを対象にリアルタイムで絞り込む
- 検索結果は高密度リストで表示する
- 大きなカードUIや大きな写真表示は避ける
検索結果の表示例:
松屋
⭐ 牛めし並 / 豚汁変更 / 生卵
マクドナルド
👀 月見バーガー / ポテトM
3.1.1 店一覧画面
ホームとは別に、下タブの「一覧」から登録済みの店を探せるようにする。
目的:
- 最近見た店に出ていない店も探せるようにする
- 検索語を思い出せない時でも、登録済み店をざっと見られるようにする
- ホームを重くせず、店の全件表示は一覧画面に分離する
要件:
- 下タブで「ホーム」と「一覧」を切り替える
- 一覧では登録済みの店名を表示する
- 並び順は「五十音順」と「追加順」を切り替えられる
- 店をタップすると店詳細へ遷移する
- ホームの検索中心、最近見た店中心の軽さは維持する
- 一覧から店を左スワイプして、店そのものを削除できる
- 店削除時は確認ダイアログを表示し、その店に紐づく注文メモも削除されることを明示する
3.2 店詳細画面
目的は、注文直前にその店の定番注文を一瞬で確認すること。
表示要素:
- 店名
- 小ロゴまたは汎用アイコン
- 定番セクション
- 次試すセクション
- 試したセクション
- 「+ この店で追加」ボタン
表示順は必ず以下とする。
- 定番
- 次試す
- 試した
注文セットはコンパクト表示を基本とする。
⭐ 牛めし並 / 豚汁変更 / 生卵
メモ: 結局これ。980円くらい。
MVPでは、注文セットをタップすると編集画面へ遷移する。
注文セットを左スワイプすると、現在以外の2状態へクイック変更できる。 例えば「次試す」の注文セットでは「定番」「試した」へ変更できる。
3.3 新規登録画面
目的は、食後や思いついたタイミングで新しい注文セットを10秒以内に登録できること。
入力項目:
- 店名
- 注文内容 複数行
- 状態
- メモ
- 写真
- 保存
必須項目:
- 店名
- 注文内容 1行以上
- 状態
任意項目:
- メモ
- 写真
店詳細から「+ この店で追加」を押した場合は、店名が入力済みの状態で新規登録画面を開く。保存後は該当する店詳細へ戻る。
店名入力時のサジェスト:
- 新規登録時、入力中の店名に似た登録済み店があれば候補として表示する
- 候補をタップすると、その既存店に注文メモを追加する
- 似た店名がある状態で新規店として保存しようとした場合は、重複作成を防ぐため確認を挟む
- 一度保存した注文メモは注文セット編集画面から別の店へ付け替えない
3.4 注文セット編集画面
登録済みの注文セットを編集する画面。
店名は表示するが、この画面では変更しない。注文セット編集画面で店名を自由入力にすると、既存の注文メモが別の店へ移動したように見えて「消えた」と誤認しやすいため、店名変更は店詳細画面の専用導線で行う。
編集可能項目:
- 注文内容
- 状態
- メモ
- 写真
- 削除
削除時は確認ダイアログを表示する。
この記録を削除しますか?
この操作は取り消せません。
[キャンセル] [削除]
3.5 店名変更画面
店詳細画面のメニューから、その店自体の名前を変更できる。
要件:
- 店詳細の右上メニューから「店名を変更」を開ける
- 店名を変更すると、その店に紐づく定番、次試す、試した注文メモは同じ店に残る
- 注文セット編集画面の店名欄では、店名を変更しない
- 空の店名では保存できない
- MVPでは既存店名との統合や注文メモの店舗間移動は行わない
4. データ構造
4.1 Shop
type Shop = {
id: string
name: string
logoKey?: string
createdAt: string
updatedAt: string
lastViewedAt?: string
}
フィールド:
id: UUIDname: 店名。必須logoKey: 将来のロゴ識別子。任意createdAt: 作成日時updatedAt: 更新日時lastViewedAt: 最後に店詳細を開いた日時。任意
4.2 OrderSet
type OrderStatus = "favorite" | "want_to_try" | "tried"
type OrderSet = {
id: string
shopId: string
status: OrderStatus
items: string[]
memo?: string
imageUri?: string
createdAt: string
updatedAt: string
}
フィールド:
id: UUIDshopId: 紐付くShopのIDstatus: 定番、次試す、試したitems: 注文内容の複数行。1行以上必須memo: 一言メモ、金額、感想など。任意imageUri: ローカル画像URI。任意createdAt: 作成日時updatedAt: 更新日時
4.3 状態
| 値 | 表示名 | 意味 |
|---|---|---|
favorite |
定番 | その店でよく頼む完成形 |
want_to_try |
次試す | まだ試していない候補 |
tried |
試した | 過去に試した組み合わせ |
状態変更は編集画面からできればMVPとして十分とする。
想定する変更:
- 次試す -> 試した
- 試した -> 定番
- 次試す -> 定番
- 定番 -> 試した
- 定番 -> 次試す
5. 検索仕様
検索対象:
shop.nameorderSet.itemsorderSet.memo
検索方式:
- MVPでは部分一致検索
- 大文字小文字は区別しない
- 空白は前後トリムする
- ひらがな、カタカナの完全な正規化はMVPでは不要
- 複数語検索は将来対応
検索結果:
- 該当する注文セットをホーム内にリアルタイム表示する
- 店名に一致した場合は、その店に紐付く注文セットを表示する
- 注文セットがない店は、店名だけを表示して店詳細へ遷移できるようにしてもよい
- 検索結果タップ時はMVPでは店詳細へ遷移する
5.5 ロゴ表示仕様
有名チェーンの場合、可能であれば小さなロゴまたは簡易アイコンを表示する。ただし、ロゴ表示は必須機能ではない。
MVPでは正式な企業ロゴを無理に使用しない。著作権、商標上の問題を避けるため、以下のいずれかを推奨する。
- ロゴ表示は一旦なし
- 汎用の店アイコンを表示
- 将来的に独自の簡易アイコン、色付きバッジで対応
logoKey は将来的な拡張用に用意する。
matsuya
saizeriya
starbucks
marugame
mcdonalds
ただし、MVPでは空でも問題ない。
6. 入力仕様
6.1 店名入力
- 店名は必須
- 住所は入力しない
- 営業時間は入力しない
- チェーン名という別項目は作らない
- 店名だけで登録可能にする
- 既存店名と完全一致する場合は同じShopに紐付ける
- 表記揺れ統合は将来対応
重複判定例:
- 「松屋」 と 「松屋」 は同一
- 「松屋 渋谷店」 と 「松屋」 は別店
- 「松屋渋谷店」 と 「松屋 渋谷店」 は別店
6.2 注文内容入力
注文内容は複数行自由入力とし、内部的には string[] で保存する。
牛めし並
豚汁変更
生卵
保存形式:
["牛めし並", "豚汁変更", "生卵"]
複数行入力UI:
- 最初から1行目の入力欄を表示する
- 最後に常に空白行が1つある状態を維持する
- 入力し始めると次の空行を自動生成する
- 日本語IMEの変換確定後、Enterで次の行へ移動できる
- 保存時には空白行を削除する
- 表示時には空白行を表示しない
注意:
- 「メイン」「サイド」「トッピング」のような意味づけはしない
- 各行は完全自由入力
- 店やジャンルごとの構造差を吸収する
6.3 状態選択
状態は以下の3つ。
- ⭐ 定番
- 👀 次試す
- 🧪 試した
初期値は「試した」を推奨する。新規登録は食後に行われることが多いため。
6.4 メモ
メモは任意。金額、味の印象、次回の注意点などを自由に書ける。
金額は専用欄にせず、まずはメモ欄に自然に記録する。
プレースホルダー例:
例: 980円、味濃い、疲れてる日に良い、次は卵なし
6.5 写真
- 写真は任意
- 写真必須にしない
- 写真枠を大きく出しすぎない
- 「+ 写真を追加」程度の軽い導線にする
- 表示時は小サムネイル中心
- 画像はローカル保存する
7. 保存時の挙動
保存時には以下を行う。
- 店名の前後空白を削除
- 注文内容の各行の前後空白を削除
- 空白行を削除
- メモの前後空白を削除
- 注文内容が1行もない場合は保存不可
- 状態が未選択の場合は保存不可
- 既存店名と完全一致する場合は同じ店に紐付ける
- 新しい店名の場合は新規Shopを作成する
- 保存後は該当する店詳細画面へ遷移する
8. 並び順仕様
ホームの最近見た店:
lastViewedAtの降順- 最大5から8件程度
店詳細の注文セット:
- 状態ごとに分ける
- セクション順は「定番 -> 次試す -> 試した」
- 各セクション内は
updatedAtの降順
9. 空状態表示
ホームにデータがない場合:
まだ記録がありません
よく行くお店の「いつもの注文」を登録してみましょう。
[+ 新しく記録]
検索結果がない場合:
見つかりませんでした
新しく記録しますか?
[+ 新しく記録]
この場合、検索語を店名として新規登録画面に渡せると便利。
店詳細に注文セットがない場合:
まだこの店の注文メモがありません
[+ この店で追加]
10. 技術予定
MVPの推奨技術:
- UI: SwiftUI
- データ保存: SwiftData
- 画像選択: PhotosPicker
- 対象OS: iOS 17以降
- 認証: なし
- 通信: なし
MVPでは完全ローカルファーストとする。
- 初回起動時にログイン画面を出さない
- 通信不要で使える
- オフラインでも登録、検索、編集できる
10.5 UIデザイン方針
全体トーン:
- シンプル
- 清潔感
- 親しみやすい
- 軽い
- 高速に使える
- 食事系らしい温かみ
避けるデザイン:
- 写真SNS風
- 大きすぎるカード
- 余白過多
- 店舗レビューアプリ風
- 業務用注文管理アプリ風
- 入力項目だらけのフォーム
情報密度:
- このアプリは「眺める」より「瞬間参照」が目的
- 表示はやや高密度でよい
- スクロールを少なくする
- 1画面で多くの注文を見られるようにする
- 注文セットはコンパクトに表示する
- 画像は小さく補助的に扱う
色、雰囲気の候補:
- クリーム
- ベージュ
- 淡いオレンジ
- やさしいミント
- 食事系だが濃すぎない色
10.6 アイコン方針
アプリ名は「定番メシ」。ただし、アイコンは食事だけでなく、注文メモのニュアンスを含める。
モチーフ候補:
- メモ帳
- 注文票
- 箸
- スプーン
- チェック済みリスト
- 小さなご飯茶碗
- 「いつもの」感のある定番セット
避ける方向:
- 食べログ風レビュー感
- レストラン予約アプリ感
- 業務用注文端末感
- 写真SNS感
- 文字入りアイコン
アイコン生成プロンプト:
日本向けiPhoneアプリ「定番メシ」のApp Store用アイコンを作成してください。
このアプリは、チェーン店や飲食店で自分の定番注文セットを保存し、注文前にすぐ見返せる個人用メモアプリです。食べログのような店レビューアプリではなく、「お気に入りの店でいつもの注文をすぐ思い出す」「自分だけの定番メニューを忘れない」ことがコンセプトです。
アイコンは、シンプルで親しみやすく、日常的に使いたくなる雰囲気にしてください。モチーフは、食事・注文・メモを連想できるものにしてください。たとえば、小さなメモ帳、注文票、箸、スプーン、チェックされたメニュー、定番セットのリスト、ご飯茶碗などを抽象的に組み合わせてください。
デザインは、iOSアプリらしいフラットでモダンなスタイル。ご飯系アプリらしい温かみはありつつ、子どもっぽくなりすぎず、清潔感と実用感を重視してください。背景は明るいクリーム色、淡いオレンジ、やさしいベージュ、薄いミントなどのパステル系。中心モチーフは視認性が高く、1024x1024pxのApp Storeアイコンとして小さく表示されても分かりやすいようにしてください。
文字は入れないでください。四隅は丸めず、正方形いっぱいに作成してください。Apple側で角丸加工されることを想定してください。
まずは9つの候補を1枚の画像内に並べて、異なる方向性で比較できるようにしてください。
方向性は以下を含めてください。
1. メモ帳+箸
2. 注文票+チェックマーク
3. メニューリスト+スプーン
4. ご飯茶碗+メモ
5. 定番セットのチェックリスト
6. シンプルなレシート風メモ
7. ミニマルなリストアイコン
8. 温かみのある飲食店メニュー風
9. 高密度メモ帳風だが可愛くなりすぎないデザイン
全体として、かわいいよりも「シンプル・清潔・実用的・親しみやすい」を優先してください。
10.7 App Store向け文言案
アプリ名:
定番メシ
サブタイトル:
いつもの注文メモ
短い説明文:
お気に入りのお店で、いつもの注文をすぐ思い出せるメモアプリ。
説明文案:
定番メシは、よく行くお店で自分の定番注文を保存して、注文前にすぐ見返せるアプリです。
松屋、サイゼリヤ、スタバ、丸亀製麺、町中華、ラーメン店などで、前に頼んでよかった組み合わせや、次に試したいメニューをメモしておけます。
店名と注文内容を入力するだけ。
注文内容は複数行でサクッと登録できるので、食後にすぐ記録できます。
定番、次試す、試した、の3つに分けて管理できるので、注文前に迷わず「いつもの」を思い出せます。
ログイン不要。自分だけの注文メモとして気軽に使えます。
スクリーンショット文言案:
- いつもの注文を、すぐ思い出す
- 店名で検索して、定番メシを確認
- 注文内容は複数行でサクッと登録
- 定番・次試す・試したを整理
- ログイン不要、自分だけの注文メモ
10.8 主要ユーザーフロー
注文前に定番を確認する:
アプリ起動
↓
検索バーに店名を入力
↓
店をタップ
↓
店詳細で「定番」を確認
↓
注文する
食後に新しい組み合わせを登録する:
アプリ起動
↓
+ 新しく記録
↓
店名入力
↓
注文内容を複数行入力
↓
状態「試した」を選択
↓
必要ならメモ入力
↓
保存
↓
店詳細へ
店詳細から追加する:
店詳細を開く
↓
+ この店で追加
↓
店名入力済みの新規登録画面
↓
注文内容を入力
↓
保存
↓
店詳細へ戻る
次試すを試したに変更する:
店詳細を開く
↓
次試すの注文セットをタップ
↓
編集画面
↓
状態を「試した」に変更
↓
メモを追記
↓
保存
試したものを定番に昇格する:
店詳細を開く
↓
試した注文セットをタップ
↓
編集画面
↓
状態を「定番」に変更
↓
保存
10.9 実装上の注意点
速度優先:
- 起動直後にすぐホームを表示
- ログインやオンボーディングで止めない
- 検索は軽量に動作
- 画像読み込みでリスト表示が重くならないようにする
入力ストレス削減:
- 店名と注文内容だけですぐ保存できる
- 注文内容は複数行の自動追加UIにする
- 写真、メモは任意
- タグや価格欄は増やさない
スクロール削減:
- 大きなカードUIを避ける
- 画像は小さく
- 検索結果は1行要約
- 店詳細も高密度表示
食べログ化しない:
- 店舗レビュー項目を作らない
- 雰囲気、接客、営業時間、住所などを入力させない
- 主役は店ではなく注文セット
10.10 Codex向け実装依頼プロンプト
今後SwiftUI実装へ進む時の初期プロンプトとして使用できる。
日本向けiPhoneアプリ「定番メシ」をSwiftUIで実装したいです。
このアプリは、チェーン店や飲食店で自分の定番注文セットを保存し、注文前にすぐ見返せる個人用メモアプリです。ログインなし、ローカル保存のみで、即時性を最優先します。
MVPとして以下を実装してください。
【アプリ名】
定番メシ
サブタイトル:いつもの注文メモ
【コア機能】
- 店名だけで店舗登録できる
- 注文セットを複数行で登録できる
- 注文セットは「定番」「次試す」「試した」の3状態で管理する
- メモは任意
- 写真は任意
- ホームから店名・注文内容・メモを全文検索できる
- 最近見た店をホームに表示する
- 店詳細では「定番 → 次試す → 試した」の順で表示する
- 店詳細から「+ この店で追加」で、その店名が入力済みの新規登録画面を開ける
- 登録済み注文セットを編集・削除できる
【画面】
1. ホーム画面
- 検索バー
- 検索結果
- 最近見た店チップ
- +新しく記録ボタン
2. 店詳細画面
- 店名
- 定番セクション
- 次試すセクション
- 試したセクション
- +この店で追加ボタン
3. 新規登録画面
- 店名入力
- 注文内容の複数行入力
- 状態選択
- メモ入力
- 写真追加
- 保存ボタン
4. 編集画面
- 新規登録画面と同じ項目
- 削除ボタン
【注文内容入力UI】
- 最初から1行目の入力欄を表示
- 入力し始めると次の空行が自動生成される
- Enterで次行に移動できる
- 保存時に空白行を削除する
- 各行は完全自由入力で、メイン/サイド/トッピングなどの意味づけはしない
【データ構造】
Shop:
- id
- name
- logoKey optional
- createdAt
- updatedAt
- lastViewedAt optional
OrderSet:
- id
- shopId
- status: favorite / want_to_try / tried
- items: [String]
- memo optional
- imageUri optional
- createdAt
- updatedAt
【UI方針】
- シンプル、清潔、親しみやすい
- 写真SNS風にしない
- 大きなカードUIを乱用しない
- 注文前にすぐ読める高密度リストを重視
- 画像は小サムネイル程度
- 食べログや店舗レビューアプリに寄せない
まずはSwiftUI + SwiftDataで、iOS 17以降向けのMVPとして実装してください。
11. MVPでやること
- ログインなし
- ローカル保存
- 店名だけで店舗登録
- 注文内容を複数行で登録
- 注文セットを3状態で管理
- メモを任意登録
- 写真を任意登録
- ホームから全文検索
- 最近見た店を表示
- 店詳細で定番、次試す、試したを表示
- 店詳細からその店の注文セットを追加
- 登録済み注文セットの編集と削除
- 状態変更
12. MVPでやらないこと
- ログイン
- アカウント作成
- クラウド同期
- SNS投稿
- ユーザー間共有
- 店舗レビュー
- 星評価の必須入力
- 価格専用欄
- カロリー管理
- 地図表示
- 店舗住所、営業時間登録
- タグ必須化
- AIレコメンド
- 決済、実注文機能
- 店舗向け機能
13. 受け入れ基準
13.1 基本登録
- ユーザーは店名を入力して新しい店を登録できる
- ユーザーは注文内容を複数行で入力できる
- ユーザーは状態を選んで保存できる
- 空白行は保存されない
13.2 表示
- ホームに最近見た店が表示される
- 店詳細で定番、次試す、試したが順番に表示される
- 注文セットがコンパクトに表示される
13.3 検索
- 店名で検索できる
- 注文内容で検索できる
- メモで検索できる
- 検索結果がホーム内にリアルタイム表示される
13.4 編集
- 登録済み注文セットを編集できる
- 状態を変更できる
- 削除できる
13.5 店詳細からの追加
- 店詳細画面から「+ この店で追加」を押せる
- 新規登録画面に店名が入力済みで開く
- 保存後、同じ店詳細に戻る
13.6 ローカル保存
- アプリを終了して再起動してもデータが残る
- ログインなしで利用できる
14. 今後の拡張候補
優先度高:
- 店詳細でワンタップ状態変更
- 検索語を引き継いで新規登録
- 手動並び替え
- データエクスポート
- バックアップ
優先度中:
- iCloud同期
- 価格自動抽出
- よく使う店の自動表示
- 注文セットの複製
- 店名の表記揺れ統合
優先度低:
- AI提案
- 位置情報連携
- 地図表示
- 共有機能
- SNS投稿