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

12 KiB
Raw Blame History

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を新規作成(モード別フィルタリングを一元化)
  • データフロー: rawSakeListItemsProviderfilteredByModeProviderallSakeItemsProvider/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を使用する全箇所
  • 修正パターン:
// ❌ 修正前
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
  • 修正方針: rawSakeListItemsProviderfilteredByModeProviderまたは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に以下が記載されているか:
      <key>NSCameraUsageDescription</key>
      <string>日本酒ラベルの撮影に使用します</string>
      <key>NSPhotoLibraryUsageDescription</key>
      <string>日本酒の写真をギャラリーから選択します</string>
      
  3. Google Sign-In設定必須

    • ios/Runner/Info.plistCFBundleURLSchemesが設定されているか
    • REVERSED_CLIENT_IDが正しく記載されているか

14-2. プラットフォーム分岐コードの検証

以下を検索し、iOS未対応の箇所を列挙

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

14-3. 依存パッケージのiOS互換性

以下のパッケージがiOSで動作するか検証

  • google_mlkit_text_recognitioniOS対応確認
  • google_sign_iniOS設定の完全性
  • image_pickeriOS権限設定
  • shared_preferencesiOS対応確認
  • sqfliteiOS対応確認

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実装は維持

出力形式

以下の形式で報告してください:

## 修正実行結果

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