ponshu-room-lite/CommonSpecification_bk.md

511 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ぽんるーむ (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 主要パッケージ
```yaml
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構造
```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: 基盤整備 ✅
- [x] 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用
```dart
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**