# 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準備の完全なロードマップ ✅ 手戻り防止のための互換性問題リスト