# 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
NSCameraUsageDescription
日本酒ラベルの撮影に使用します
NSPhotoLibraryUsageDescription
日本酒の写真をギャラリーから選択します
```
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準備の完全なロードマップ
✅ 手戻り防止のための互換性問題リスト