# ぽんるーむ (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**
