# Ponshu Room Lite - 友人配布前の包括的コード改善（実行指示）

## ミッション
このプロジェクトを**友人配布可能な品質**に引き上げるため、以下を**実行**してください：
1. **Critical/Highバグの発見と修正**
2. **パフォーマンス最適化の実装**
3. **コード品質のリファクタリング**
4. **私たちが見落としている改善提案**
5. **iOS配布準備の事前検証**

---

## プロジェクト概要
- **アプリ名**: Ponshu Room Lite（日本酒コレクション管理アプリ）
- **現在バージョン**: v1.0.10+19
- **配布計画**:
  - **優先**: Android版（友人配布用APKビルド済み）
  - **次段階**: iOS版（2017 MacBook Airで環境構築予定）
- **状態管理**: Riverpod 2.x
- **主要機能**: OCRラベル認識、Google Drive同期、MBTI診断、スマートレコメンド

---

## Phase D6 完了状況（最新実装）
**実装完了内容**:
- `filteredByModeProvider`を新規作成（モード別フィルタリングを一元化）
- データフロー: `rawSakeListItemsProvider` → `filteredByModeProvider` → `allSakeItemsProvider`/`sakeListProvider`
- Personal Mode: セット商品（`ItemType.set`）と未分析品（`isPendingAnalysis`）を除外
- Business Mode: 全アイテム表示

**修正完了箇所**:
- `lib/providers/sake_list_provider.dart:68`
- `lib/screens/sake_detail_screen.dart:76`
- `lib/widgets/sake_search_delegate.dart:48`

---

## 【CRITICAL】必須修正項目（即実行）

### 1. 非同期処理の安全性バグ修正
**問題**: `use_build_context_synchronously`警告が複数箇所で発生

**実行指示**:
- 以下のファイルで`if (!mounted) return;`が欠けている箇所をすべて修正
  - `lib/screens/camera_screen.dart`
  - `lib/screens/scan_screen.dart`
  - `lib/screens/sake_detail_screen.dart`
  - その他async関数内で`context`を使用する全箇所
- 修正パターン:
```dart
// ❌ 修正前
await someAsyncOperation();
if (context.mounted) {
  Navigator.pop(context);
}

// ✅ 修正後
await someAsyncOperation();
if (!mounted) return;
Navigator.pop(context);
```

**期待結果**: `use_build_context_synchronously`警告を0件に削減

---

### 2. Phase D6フィルタリングの完全性検証と修正
**実行指示**:
- `rawSakeListItemsProvider`への直接参照を全ファイルで検索
- 以下の箇所で誤った参照があれば修正：
  - ホーム画面（`home_screen.dart`）
  - 検索機能（`sake_search_delegate.dart`）
  - レコメンド機能（`sake_recommendation_service.dart`）
  - MBTI診断（`sommelier_screen.dart`）
  - 統計/バッジ（`gamification_service.dart`）
- 修正方針: `rawSakeListItemsProvider` → `filteredByModeProvider`または`allSakeItemsProvider`

**期待結果**: Personal Modeでセット商品が完全に非表示

---

### 3. Pro/Lite版の機能ロック抜け穴修正
**実行指示**:
- `IS_PRO_VERSION`チェックが欠けている箇所を検索：
  - Google Drive同期機能（`lib/services/google_drive_service.dart`）
  - MBTI診断画面（`lib/screens/placeholders/sommelier_screen.dart`）
  - 高度な統計機能（`lib/widgets/gamification/activity_stats.dart`）
- Lite版でアクセスされた場合、Pro版誘導ダイアログを表示するコードを追加

**期待結果**: Lite版で有料機能が完全にロック

---

## 【HIGH】パフォーマンス最適化（実装推奨）

### 4. ギャラリー画像圧縮の実装
**現状**: カメラ撮影のみ圧縮済み、ギャラリー選択は未実装

**実行指示**:
- `lib/screens/camera_screen.dart`の圧縮ロジックを参考に実装
- 対象ファイル: ギャラリー選択を行う全画面
- 圧縮設定: 品質85%、最大幅1200px（カメラと同一）
- エラーハンドリング: 圧縮失敗時は元画像を使用

**期待結果**: ギャラリー画像も自動圧縮、ストレージ消費を50%削減

---

### 5. 不要なProvider再計算の最適化
**実行指示**:
- 以下のProviderで不要な再計算が発生していないか検証：
  - `sakeListProvider`（ソート処理が毎フレーム実行されていないか）
  - `allSakeItemsProvider`（フィルタ処理の効率化）
- 必要に応じて以下を適用：
  - `family`修飾子でパラメータキャッシュ
  - `autoDispose`の適切な使用
  - メモ化（`useMemoized`）の追加

**期待結果**: ホーム画面のスクロール時CPU使用率を20%削減

---

### 6. 画像キャッシュの最適化
**実行指示**:
- `cached_network_image`パッケージの使用状況を確認
- ローカル画像の`FileImage`キャッシュが適切か検証
- 必要に応じて以下を実装：
  - メモリキャッシュサイズの調整
  - ディスクキャッシュの有効期限設定
  - サムネイル用の低解像度キャッシュ

**期待結果**: 画像表示の体感速度向上、メモリ使用量削減

---

## 【MEDIUM】コード品質改善（リファクタリング）

### 7. 重複コードの削減
**実行指示**:
- 以下のパターンを検索し、共通関数化：
  - Pro版ロックダイアログ表示（複数画面で重複）
  - エラーSnackBar表示（統一されていない可能性）
  - Google Drive同期エラーハンドリング
- 共通ユーティリティを`lib/utils/`に配置

**期待結果**: コード行数を10%削減、保守性向上

---

### 8. マジックナンバーの定数化
**実行指示**:
- ハードコードされた数値を検索：
  - 画像圧縮品質（85）
  - 画像最大幅（1200）
  - MBTI診断の最小件数（5）
  - レコメンド表示件数（10）
- `lib/constants/app_constants.dart`に定数として定義

**期待結果**: 設定変更が容易、可読性向上

---

### 9. 型安全性の向上
**実行指示**:
- `dynamic`型の使用箇所を検索し、具体的な型に修正
- `as`キャストを`is`チェック+安全キャストに置き換え
- null安全性の改善（不要な`?`の削除、`!`の検証）

**期待結果**: ランタイムエラーリスクを削減

---

## 【未言及の改善提案】新規発見事項

### 10. アクセシビリティの検証
**実行指示**:
- 以下を確認し、不足があれば追加：
  - `Semantics`ウィジェットの使用（スクリーンリーダー対応）
  - 最小タップ領域（48x48 Material Design推奨）
  - コントラスト比（WCAG AA基準）
  - フォントスケーリング対応（MediaQuery.textScaleFactor）

**期待結果**: 障害者対応、将来的なストア審査対策

---

### 11. エラーログとクラッシュレポート
**実行指示**:
- 以下のエラーハンドリングが適切か検証：
  - try-catchブロックの網羅性
  - エラーメッセージのユーザーフレンドリー化
  - 開発者向けログ出力（`debugPrint`の使用）
- 将来的なFirebase Crashlytics統合の準備（コメントで指摘）

**期待結果**: ユーザー配布後の問題追跡が容易

---

### 12. メモリリーク検出
**実行指示**:
- 以下をチェック：
  - `StreamController`のdispose漏れ
  - `AnimationController`のdispose漏れ
  - 巨大なリストのメモリ保持（`ListView.builder`の使用状況）
  - 画像のdispose処理

**期待結果**: 長時間使用時のメモリ安定性向上

---

### 13. ネットワークエラーハンドリング
**実行指示**:
- Google Drive API呼び出しで以下を検証：
  - タイムアウト設定の適切性
  - リトライロジックの有無
  - オフライン時のユーザーへの通知
  - 部分的な同期失敗の処理

**期待結果**: ネットワーク不安定時のUX向上

---

### 14. 【重要】iOS互換性の事前検証
**背景**: 2017 MacBook Airでの環境構築を予定、Android配布後にiOS対応

**実行指示**:

#### 14-1. iOS設定ファイルの検証
以下のファイルを確認し、不足・誤設定があれば**具体的に指摘**：

1. **Firebase設定（必須）**
   - `ios/Runner/GoogleService-Info.plist`の存在確認
   - 内容が正しいか検証（BUNDLE_IDが一致しているか）
   - Firebase ConsoleでiOSアプリ登録が必要か判定

2. **権限記述（必須）**
   - `ios/Runner/Info.plist`に以下が記載されているか：
     ```xml
     <key>NSCameraUsageDescription</key>
     <string>日本酒ラベルの撮影に使用します</string>
     <key>NSPhotoLibraryUsageDescription</key>
     <string>日本酒の写真をギャラリーから選択します</string>
     ```

3. **Google Sign-In設定（必須）**
   - `ios/Runner/Info.plist`に`CFBundleURLSchemes`が設定されているか
   - `REVERSED_CLIENT_ID`が正しく記載されているか

#### 14-2. プラットフォーム分岐コードの検証
以下を検索し、iOS未対応の箇所を列挙：

- `Platform.isAndroid`のみ存在し、`Platform.isIOS`が欠けている箇所
- Android固有APIの使用（`MethodChannel`経由のネイティブコード）
- パス区切り文字のハードコード（`/`ではなく`path`パッケージ使用が必須）

#### 14-3. 依存パッケージのiOS互換性
以下のパッケージがiOSで動作するか検証：

- `google_mlkit_text_recognition`（iOS対応確認）
- `google_sign_in`（iOS設定の完全性）
- `image_picker`（iOS権限設定）
- `shared_preferences`（iOS対応確認）
- `sqflite`（iOS対応確認）

#### 14-4. ビルド制約の確認
2017 MacBook Air（macOS最大Big Sur 11.x）での制約を評価：

- `ios/Podfile`のプラットフォーム設定（`platform :ios, '12.0'`など）
- 最新Xcodeバージョン要求の有無
- CocoaPodsの互換性

**期待結果**:
- iOS環境構築時の必要作業リスト
- 致命的な互換性問題の早期発見
- Android実装への影響の有無判定

---

### 15. セキュリティ検証
**実行指示**:
- 以下をチェック：
  - APIキー・シークレットのハードコード有無
  - ユーザーデータの暗号化状態
  - ログ出力に機密情報が含まれていないか
  - SQLインジェクション対策（もしDB使用している場合）

**期待結果**: セキュリティリスクの事前排除

---

## 実行ガイドライン

### 修正の優先順位
1. **CRITICAL**: 即座に修正（バグ、クラッシュリスク）
2. **HIGH**: 配布前に実装推奨（パフォーマンス、UX）
3. **MEDIUM**: 時間があれば実装（保守性、将来対策）

### 破壊的変更の扱い
- **許可**: バグ修正、パフォーマンス最適化
- **要相談**: アーキテクチャ変更、大規模リファクタリング
- **禁止**: 機能削除、既存動作の変更（Phase D6実装は維持）

### 出力形式
以下の形式で報告してください：

```markdown
## 修正実行結果

### CRITICAL修正（即実行済み）
1. [項目名]
   - 修正箇所: [ファイルパス:行番号]
   - 変更内容: [具体的な修正]
   - 影響範囲: [どの機能に影響するか]

### HIGH修正（実装済み）
...

### MEDIUM修正（実装済み）
...

### 新規発見事項
...

### iOS互換性検証結果
- 必須対応事項: [環境構築前に解決すべき問題]
- 推奨対応事項: [iOS品質向上のための改善]
- Android実装への影響: [あり/なし + 詳細]

### 未修正の推奨事項
...

### 修正不要と判断した項目
...

## 総合評価
- 修正前の評価: [1-10点]
- 修正後の評価: [1-10点]
- Android配布可否判断: [Go/No-Go + 理由]
- iOS準備の難易度: [Easy/Medium/Hard + 理由]
```

---

## R8無効化について（判断保留）
**現状**: `isMinifyEnabled = false`（意図的な無効化）
**理由**: Google Drive API、Firebase、画像処理ライブラリとの互換性懸念

**実行指示**:
- R8有効化した場合のリスク評価のみ実施
- **実際の有効化は実行しない**（ビルドエラーリスクが高い）
- ProGuardルール追加で対応可能か検証

---

## 最終確認
このプロンプト実行後、以下が達成されることを期待：
✅ Criticalバグが0件
✅ `flutter analyze`の警告が50%削減
✅ メモリ使用量が20%削減
✅ Android配布可否の明確な判断材料
✅ iOS準備の完全なロードマップ
✅ 手戻り防止のための互換性問題リスト
