ponshu-room-lite/docs/archive/CURSOR_REVIEW_PROMPT.md

363 lines
12 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.

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