ponshu-room-lite/CommonSpecification_bk.md

14 KiB
Raw Blame History

ぽんるーむ (Pon-Room) - 共通仕様書 v1.0

作成日: 2026-01-03 対象: AI開発エージェントCursor/Antigravity/Claude/Gemini 目的: すべての開発者・AIエージェントが参照する唯一のバイブル


📋 1. プロジェクト概要

1.1 アプリケーション情報

  • アプリ名: ぽんるーむ (Pon-Room)
  • コンセプト: 日本酒の「記録・解析・循環」を支えるAIプラットフォーム
  • バージョン: 1.0.9+47
  • 最終更新: 2026-01-03

1.2 ターゲットユーザー

  • B2C (Consumer Mode): 一般ユーザー

    • 日本酒体験の記録・診断・共有
    • ゲーミフィケーション(ポイント・バッジ・レベル)
    • 「酒向(しゅこう)カード」による自己表現
  • B2B (Business Mode): 飲食店

    • 自店の日本酒メニュー作成PDF出力
    • QRコード自動埋め込み
    • インスタ投稿支援

1.3 アプリの循環ロジック

[飲食店] PDF + QRメニュー作成
    ↓
[客] スキャンして詳細表示・ポイント獲得
    ↓
[客] 自分の記録が貯まる → 酒向カード生成
    ↓
[飲食店] 客の好みを理解してレコメンド

🛠️ 2. 技術スタック

2.1 フロントエンド

  • Framework: Flutter 3.10.1
  • SDK: Dart 3.10.1
  • 対応プラットフォーム: iOS, Android, Web

2.2 バックエンド・データベース

  • Database: Cloud Firestore (Firebase)
  • Authentication: Firebase Auth
  • Storage: Firebase Storage (画像保存)

2.3 AI・機械学習

  • Local OCR: Google ML Kit

    • 用途: ラベルからのテキスト抽出
    • メリット: 無料、高速、オフライン動作
  • LLM Analysis: Gemini API

    • モデル: gemini-2.5-flash / gemini-3.0-flash
    • 用途: テキストの構造化、キャッチコピー生成
    • 重要: 画像を直接送らず、OCRテキストのみ送信トークン節約

2.4 主要パッケージ

dependencies:
  # 画像・カメラ
  image_picker: ^1.2.1
  gal: ^2.3.0  # カメラロール保存

  # PDF生成
  pdf: ^3.10.0
  printing: ^5.11.0

  # QRコード
  qr_flutter: ^4.1.0
  mobile_scanner: ^3.5.0  # QRスキャン

  # データベース
  hive: ^2.2.3
  hive_flutter: ^1.1.0

  # AI
  google_generative_ai: ^0.4.7
  google_ml_kit: ^0.16.0  # OCR用

📊 3. 共通データ構造JSON Schema

3.1 基本方針

  • display_data: カードUIで表示する最小限の情報シンプル維持
  • hidden_specs: 詳細画面・PDF・分析で使用する情報
  • badges: ゲーミフィケーション要素
  • gamification: ポイント・レベル・診断結果
  • user_data: ユーザーの主観的情報
  • metadata: システム管理用

3.2 SakeItem完全JSON構造

{
  "display_data": {
    "name": "獺祭 純米大吟醸 磨き二割三分",
    "catch_phrase": "華やかな香りと洗練された味わい",
    "image_path": "path/to/image.jpg",
    "rating": 4.5
  },

  "hidden_specs": {
    "brewery": "旭酒造株式会社",
    "prefecture": "山口県",
    "type": "純米大吟醸",
    "alcohol_content": 16.0,
    "polishing_ratio": 23,
    "sake_meter_value": 4.0,
    "rice_variety": "山田錦",
    "yeast": "自社酵母",
    "manufacturing_year_month": "2024.10",
    "qr_code_url": "https://pon-room.app/sake/abc123"
  },

  "badges": {
    "is_recommended": false,
    "is_seasonal": false,
    "season_tag": "春限定"
  },

  "gamification": {
    "pon_points": 10,
    "sake_mbti_type": "フルーティー・モダン型",
    "rarity_level": "レア"
  },

  "user_data": {
    "is_favorite": false,
    "is_wishlist": false,
    "tags": ["甘口", "フルーティー", "冷酒向き"],
    "memo": "お祝い事にぴったり。冷やして飲むのがおすすめ。",
    "drink_location": "○○レストラン",
    "companion": "△△さん",
    "purchase_location": "××酒販店",
    "price": 5000
  },

  "metadata": {
    "created_at": "2026-01-03T12:34:56Z",
    "updated_at": "2026-01-03T12:34:56Z",
    "app_type": "sake",
    "app_mode": "consumer",
    "version": "1.0",
    "scanned_count": 0
  }
}

🎨 4. UI構成ルール

4.1 タブ構成5タブ制

タブ Consumer Mode (B2C) Business Mode (B2B)
タブ1 日本酒カードリスト(自分の記録) 日本酒カードリスト(店舗在庫)
タブ2 QRスキャン・AR情報表示 PDFメニュー作成・QR埋め込み
タブ3 AIソムリエ・酒向カード診断 インスタ投稿支援AI文章生成
タブ4 酒蔵マップ(聖地巡礼) 店舗設定・在庫管理
タブ5 マイページ(レベル・バッジ・設定) アナリティクス(スキャン統計)

4.2 カード表示ルール(重要)

表示項目display_dataのみ:

  • 銘柄名 (display_data.name)
  • 画像 (display_data.image_path)
  • 評価 (display_data.rating) - 星表示
  • バッジ (badges) - 店長推奨・季節限定アイコン

非表示項目(詳細画面でのみ使用):

  • hidden_specs の全項目
  • user_data の詳細情報

理由: シンプルなUIを維持し、挫折を防ぐ

4.3 詳細画面の表示項目

全て表示:

  • display_data 全項目
  • hidden_specs 全項目(スペック表として)
  • badges (アイコン付き)
  • user_data 全項目

4.4 PDF出力の表示項目

主要項目:

  • display_data.name, image_path
  • hidden_specs の以下:
    • type, alcohol_content, polishing_ratio
    • sake_meter_value, brewery, prefecture
  • badges (アイコン付き)
  • QRコードhidden_specs.qr_code_url から生成)

🤖 5. AI解析フローHybrid Analysis

5.1 撮影から保存まで

1. 撮影
   ├─ ImagePicker or Camera パッケージ
   └─ カメラロール自動保存gal パッケージ使用)★重要

2. OCRテキスト抽出
   ├─ Google ML Kitローカル・無料
   ├─ 画像 → 全テキスト抽出
   └─ 抽出テキストのみを次へ

3. AI解析構造化
   ├─ 抽出テキストを Gemini API へ送信
   ├─ プロンプト: 「JSONフォーマットで返して」
   └─ 上記のJSON構造で回答を取得

4. 保存
   ├─ Hiveローカルに即座保存
   └─ Firebaseクラウドに同期将来実装

5.2 AI解析プロンプト例

あなたは日本酒のラベル解析の専門家です。
以下のOCRテキストから、日本酒の情報を抽出してJSON形式で回答してください。

【OCRテキスト】
{ocrText}

【出力ルール】
1. display_data: 銘柄名と魅力的なキャッチコピー(あなたが生成)
2. hidden_specs: 詳細スペック(読み取れた範囲で)
3. 読み取れない項目はnullにする
4. JSONのみを返す```jsonなどのマークダウン記法は不要
5. キャッチコピーは20文字以内で簡潔に

【出力フォーマット】
{JSON構造をここに記載}

5.3 コスト最適化のポイント

NG: 画像を直接Geminiに送信

  • 高トークン消費
  • エラー発生率が高い

OK: OCRテキストのみ送信

  • トークン消費70-90%削減
  • 安定した動作
  • 後から再解析が不要

🎮 6. ゲーミフィケーション機能

6.1 ポンポイント(仮称)

獲得条件:

  • 日本酒を記録: +5pt
  • QRスキャン: +10pt
  • 酒蔵訪問: +30pt位置情報連動
  • 評価・レビュー投稿: +3pt

レベルシステム:

0-49pt: 利き酒初心者
50-149pt: 日本酒愛好家
150-299pt: 酒豪
300-499pt: 利き酒師
500pt+: 酒マスター

6.2 酒向(しゅこう)カード

概要: MBTIライクな自己診断カード

診断軸(レーダーチャート):

  1. 甘口 ←→ 辛口
  2. 濃醇 ←→ 淡麗
  3. フルーティー ←→ 米の旨味
  4. 冷酒 ←→ 熱燗

表示項目:

  • 診断タイプ(例: フルーティー・モダン型)
  • レーダーチャート
  • 好きな銘柄TOP3
  • AIの一言コメント

用途:

  • 店員に見せて好みを伝える
  • SNSシェア画像として保存

📱 7. QR循環ロジック

7.1 BtoB: PDFメニュー作成時

1. 飲食店が店舗在庫を登録
2. PDFメニュー生成時、各銘柄にQRコード埋め込み
3. QRコード内容: https://pon-room.app/sake/{sakeId}
4. 印刷して店内に設置

7.2 BtoC: QRスキャン時

1. 客がアプリでQRスキャン
2. 銘柄詳細をAR風に表示オーバーレイ
3. 「記録する」ボタンで自分のリストに追加
4. ポンポイント+10pt獲得
5. 酒蔵リンクへの誘導

7.3 循環の価値

  • : スキャンする度にポイントが貯まる
  • : 客の興味データが蓄積(アナリティクス)
  • 蔵元: ECサイトへの誘導で売上向上

🎓 8. オンボーディング(使い方ガイド)

8.1 初回起動時

4ステップガイド:

  1. ようこそ!日本酒の記録を始めよう
  2. カメラで撮影するだけでAIが自動解析
  3. お気に入りを記録して自分だけのコレクションを
  4. 飲食店の方はBusinessモードへ切り替え可能

8.2 再表示機能

  • 各画面右上の「?」アイコン
  • タップでガイドを再表示

8.3 Businessモード専用ガイド

3ステップモード切り替え時のみ表示:

  1. 店舗情報を設定しましょう
  2. メニューを作成してPDF出力
  3. QRコードで客とつながる

🚀 9. 開発優先順位Phase別

Phase 0: 基盤整備

  • CommonSpecification.md 作成
  • SakeItemモデルの拡張

Phase 1: 安心の確保1-2時間

  • カメラロール保存実装gal
  • iOS/Android権限設定
  • 撮影後の自動保存フロー

Phase 2: BtoB機能完成4-6時間

  • PDF + printing 実装
  • モックアップ厳密再現
  • QRコード埋め込み
  • レイアウト定数化

Phase 3: AI最適化3-4時間

  • Google ML Kit 導入
  • OCRテキスト抽出
  • Gemini APIへのテキスト送信切り替え

Phase 4: ゲーミフィケーション後回しOK

  • ポンポイントシステム
  • 酒向カード生成
  • QRスキャン機能

📐 10. レイアウト定数PDF用

class PDFLayoutConstants {
  // 余白
  static const double pageMargin = 24.0;
  static const double sectionSpacing = 20.0;
  static const double itemSpacing = 12.0;

  // フォントサイズ
  static const double titleFontSize = 24.0;
  static const double headingFontSize = 14.0;
  static const double bodyFontSize = 11.0;
  static const double labelFontSize = 9.0;

  // 線の太さ
  static const double borderWidthThin = 0.5;
  static const double borderWidthMedium = 1.0;
  static const double borderWidthThick = 2.0;

  // 色posimaiカラー
  static final PdfColor borderColor = PdfColor.fromHex('#E2E8F0');
  static final PdfColor labelColor = PdfColor.fromHex('#64748B');
  static final PdfColor accentColor = PdfColor.fromHex('#376495');
}

🔐 11. セキュリティ・プライバシー

11.1 データ保存場所

ローカル保存:

  • Hive DB: アプリ専用ディレクトリ
  • 写真: カメラロール(ユーザー端末)

外部送信(一時的、保存されない):

  • Gemini API: OCRテキストのみ画像は送らない

外部送信なし:

  • 個人情報の無断クラウド保存
  • サードパーティへのデータ販売

11.2 将来のFirebase連携

  • ユーザーが明示的に「同期」を選択した場合のみ
  • 画像はFirebase Storageへ
  • テキストデータはFirestoreへ

🎯 12. 量産対応(ワイン・ビールアプリへの展開)

12.1 拡張方法

metadata.app_type を変更するだけで転用可能:

  • sake → 日本酒
  • wine → ワイン
  • beer → クラフトビール
  • whisky → ウイスキー

12.2 共通化できる機能

  • 撮影・OCR・AI解析フロー
  • ポイントシステム
  • PDF出力・QR循環
  • マイページ・設定

12.3 差分化が必要な箇所

  • JSONの hidden_specs フィールド
    • ワイン: ぶどう品種、産地、ヴィンテージ
    • ビール: ホップ、モルト、IBU値
  • キャッチコピーのトーン

📝 13. AIエージェントへの指示

13.1 開発時の鉄則

  1. この仕様書を最優先のルール(バイブル)として参照せよ
  2. display_data と hidden_specs を明確に分離せよ
  3. カードUIはシンプルに保ち、display_dataのみ使用せよ
  4. 挫折防止のため、段階的に実装せよPhase順守
  5. モックアップがある場合は1px単位で厳密再現せよ

13.2 コード生成時の注意

  • null安全性を徹底
  • エラーハンドリングを統一
  • デバッグログを適切に配置
  • コメントは日本語で簡潔に

13.3 質問・提案時のルール

  • 仕様書と矛盾する提案をする場合は理由を明記
  • 新機能追加時はPhaseを提案
  • データ構造変更時はJSON例を提示

📞 14. サポート・連絡先

プロジェクトオーナー: posimai 開発支援AI: Claude (Anthropic), Gemini (Google AI), ChatGPT (OpenAI) バージョン管理: Git (GitHub) CI/CD: Vercel (Web), Firebase Hosting


🎉 15. 最後に

この仕様書は「挫折しない日本酒アプリ開発」のために、複数のAIの知恵を結集して作成されました。

重要な心構え:

  • シンプルから始める
  • データは豊富に持つが、表示は最小限に
  • ユーザーが「楽しい」と感じる体験を最優先に

Let's build the best sake app together! 🍶


End of CommonSpecification.md v1.0