263 lines
9.2 KiB
Markdown
263 lines
9.2 KiB
Markdown
|
|
# Ponshu Room Lite - 友人配布前の最終コードレビュー(更新版)
|
|||
|
|
|
|||
|
|
## 📋 これまでの作業完了状況
|
|||
|
|
|
|||
|
|
### ✅ Claude実装完了項目(2026-02-03)
|
|||
|
|
1. **home_screen.dart:70-71修正** - Phase D6フィルタリング完全性修正
|
|||
|
|
- `rawSakeListItemsProvider` → `allSakeItemsProvider`
|
|||
|
|
2. **マジックナンバー定数化** - `lib/constants/app_constants.dart`作成・全ファイル適用
|
|||
|
|
- sake_detail_screen.dart(レコメンド件数、信頼度スコア)
|
|||
|
|
- sommelier_screen.dart(MBTI最小件数)
|
|||
|
|
- gamification_service.dart(バッジ閾値)
|
|||
|
|
- other_settings_section.dart(開発モードタップ数)
|
|||
|
|
- add_set_item_dialog.dart(画像品質)
|
|||
|
|
3. **flutter analyze改善** - 61issues → 58issues(3件改善)
|
|||
|
|
|
|||
|
|
### ⚠️ 実施不要と判断した項目
|
|||
|
|
- セット商品画像圧縮統一化(既に適切な圧縮設定が存在)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## プロジェクト概要
|
|||
|
|
- **アプリ名**: 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`
|
|||
|
|
- `lib/screens/home_screen.dart:70-71`(2026-02-03追加修正)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 【重要】修正してはいけない項目
|
|||
|
|
|
|||
|
|
### ❌ UI/UXの直接色指定
|
|||
|
|
以下の箇所は**意図的なハードコーディング**のため修正不可:
|
|||
|
|
|
|||
|
|
1. **home_screen.dart:86-88** - AppBar検索フィールド
|
|||
|
|
```dart
|
|||
|
|
hintStyle: const TextStyle(color: Colors.white70),
|
|||
|
|
style: const TextStyle(color: Colors.white),
|
|||
|
|
```
|
|||
|
|
**理由**: AppBarは常にダーク背景のため、白テキスト固定が正しい
|
|||
|
|
|
|||
|
|
2. **sake_grid_item.dart:102-152** - 画像オーバーレイ
|
|||
|
|
```dart
|
|||
|
|
color: Colors.black54, // Changed from gradient to solid for "Transparent Black" underlay request
|
|||
|
|
```
|
|||
|
|
**理由**: 過去に入念に修正した結果(視認性確保のため)
|
|||
|
|
|
|||
|
|
3. **SpeedDialのオーバーレイ**(home_screen.dart:151, 167)
|
|||
|
|
**理由**: Material Designの標準パターン
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 【NEW】UI/UX改善提案(オプション)
|
|||
|
|
|
|||
|
|
### 提案1: AppBarとNavigationBarの背景色統一(ダークモードのみ)
|
|||
|
|
|
|||
|
|
**現状**:
|
|||
|
|
- AppBar(ダークモード): `#121212`(やや暗い)
|
|||
|
|
- NavigationBar(ダークモード): `#1E1E1E`(若干明るい)
|
|||
|
|
|
|||
|
|
**改善案**(lib/theme/app_theme.dart:134):
|
|||
|
|
```dart
|
|||
|
|
// 現在
|
|||
|
|
appBarTheme: AppBarTheme(
|
|||
|
|
backgroundColor: (brightness == Brightness.dark) ? const Color(0xFF121212) : null,
|
|||
|
|
...
|
|||
|
|
),
|
|||
|
|
|
|||
|
|
// 改善後
|
|||
|
|
appBarTheme: AppBarTheme(
|
|||
|
|
backgroundColor: (brightness == Brightness.dark) ? const Color(0xFF1E1E1E) : null,
|
|||
|
|
...
|
|||
|
|
),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**メリット**:
|
|||
|
|
- ✅ ダークモードでAppBarとNavigationBarの色が統一
|
|||
|
|
- ✅ AppBarがやや明るくなり、視認性向上
|
|||
|
|
- ✅ ライトモードは現状維持(デグレなし)
|
|||
|
|
- ✅ 検索フィールド変更不要
|
|||
|
|
|
|||
|
|
**デメリット**:
|
|||
|
|
- ⚠️ ユーザーの見た目に若干の変化(AppBarが若干明るくなる)
|
|||
|
|
|
|||
|
|
**実施可否**: ユーザー判断に委ねる(実装時間2分)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 提案2: AppBarの初期背景色設定(ライトモードのみ)
|
|||
|
|
|
|||
|
|
**現状**:
|
|||
|
|
- ライトモードのAppBar: `null` → スクロールすると色がつく(Material Design 3デフォルト)
|
|||
|
|
|
|||
|
|
**改善案**(lib/theme/app_theme.dart:134):
|
|||
|
|
```dart
|
|||
|
|
appBarTheme: AppBarTheme(
|
|||
|
|
backgroundColor: (brightness == Brightness.dark)
|
|||
|
|
? const Color(0xFF1E1E1E)
|
|||
|
|
: Colors.white, // 最初から白背景を敷く
|
|||
|
|
...
|
|||
|
|
),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**メリット**:
|
|||
|
|
- ✅ AppBarとNavigationBarの完全統一
|
|||
|
|
- ✅ スクロール時の色変化がなくなり、落ち着いた印象
|
|||
|
|
|
|||
|
|
**デメリット**:
|
|||
|
|
- ❌ **home_screen.dartの検索フィールド修正が必須**(白テキスト→黒テキスト)
|
|||
|
|
- ⚠️ Material Design 3の標準動作から外れる
|
|||
|
|
- ⚠️ デグレリスク中程度
|
|||
|
|
|
|||
|
|
**実施可否**: **実装前にユーザーと相談必須**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 【iOS準備】事前確認項目
|
|||
|
|
|
|||
|
|
### iOS固有設定の現状チェック
|
|||
|
|
|
|||
|
|
1. **Firebase設定(iOS)**
|
|||
|
|
- `ios/Runner/GoogleService-Info.plist`の存在と内容
|
|||
|
|
- Firebase ConsoleでiOSアプリ登録済みか
|
|||
|
|
|
|||
|
|
2. **権限記述(Info.plist)**
|
|||
|
|
- `ios/Runner/Info.plist`に以下が記載されているか:
|
|||
|
|
- `NSCameraUsageDescription`(カメラ権限)
|
|||
|
|
- `NSPhotoLibraryUsageDescription`(写真ライブラリ権限)
|
|||
|
|
- `CFBundleURLSchemes`(Google Sign-In用)
|
|||
|
|
|
|||
|
|
3. **ビルド互換性**
|
|||
|
|
- `ios/Podfile`のプラットフォーム設定は適切か?
|
|||
|
|
- 2017 MacBook Air(macOS最大Big Sur 11.x)で動作するXcodeバージョンでビルド可能か?
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 【質問形式】レビュー依頼
|
|||
|
|
|
|||
|
|
以下の質問に対し、コードベースを精査して回答してください:
|
|||
|
|
|
|||
|
|
### 1. Phase D6のフィルタリングは完全に動作していますか?
|
|||
|
|
- `rawSakeListItemsProvider`への直接参照が残っていないか再調査
|
|||
|
|
- **既知の修正完了箇所を除外**:
|
|||
|
|
- home_screen.dart:70-71(修正済み)
|
|||
|
|
- sake_list_provider.dart:68(修正済み)
|
|||
|
|
- sake_detail_screen.dart:76(修正済み)
|
|||
|
|
- sake_search_delegate.dart:48(修正済み)
|
|||
|
|
|
|||
|
|
### 2. マジックナンバー定数化は完全ですか?
|
|||
|
|
- `AppConstants`が使用されていない箇所が残っていないか?
|
|||
|
|
- 特に以下の数値をチェック:
|
|||
|
|
- 画像圧縮品質(85, 90)
|
|||
|
|
- 画像最大サイズ(1024, 2000)
|
|||
|
|
- MBTI最小件数(5)
|
|||
|
|
- バッジ閾値(50, 5.0など)
|
|||
|
|
- 開発モードタップ数(5)
|
|||
|
|
- 信頼度スコア閾値(80, 50)
|
|||
|
|
|
|||
|
|
### 3. 非同期処理の`mounted`チェック漏れはありますか?
|
|||
|
|
- `use_build_context_synchronously`警告が新たに発生していないか?
|
|||
|
|
- 危険な箇所(camera_screen.dart, scan_screen.dart, sake_detail_screen.dart)
|
|||
|
|
|
|||
|
|
### 4. iOS互換性の問題はありますか?
|
|||
|
|
- プラットフォーム分岐コード(`Platform.isAndroid`のみで`Platform.isIOS`が欠けている箇所)
|
|||
|
|
- iOS未対応のパッケージ使用
|
|||
|
|
- Android固有API の使用
|
|||
|
|
|
|||
|
|
### 5. 配布前に修正すべき Critical/High 優先度の問題は何ですか?
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## R8無効化について(判断保留)
|
|||
|
|
**現状**: `isMinifyEnabled = false`(意図的な無効化)
|
|||
|
|
**理由**: Google Drive API、Firebase、画像処理ライブラリとの互換性懸念
|
|||
|
|
|
|||
|
|
**実行指示**:
|
|||
|
|
- R8有効化した場合のリスク評価のみ実施
|
|||
|
|
- **実際の有効化は実行しない**(ビルドエラーリスクが高い)
|
|||
|
|
- ProGuardルール追加で対応可能か検証
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 実行ガイドライン
|
|||
|
|
|
|||
|
|
### 修正の優先順位
|
|||
|
|
1. **CRITICAL**: 即座に修正(バグ、クラッシュリスク)
|
|||
|
|
2. **HIGH**: 配布前に実装推奨(パフォーマンス、UX)
|
|||
|
|
3. **MEDIUM**: 時間があれば実装(保守性、将来対策)
|
|||
|
|
|
|||
|
|
### 破壊的変更の扱い
|
|||
|
|
- **許可**: バグ修正、パフォーマンス最適化
|
|||
|
|
- **要相談**: アーキテクチャ変更、大規模リファクタリング、UI/UX変更
|
|||
|
|
- **禁止**: 機能削除、既存動作の変更(Phase D6実装は維持)、意図的なハードコーディングの修正
|
|||
|
|
|
|||
|
|
### 出力形式
|
|||
|
|
以下の形式で報告してください:
|
|||
|
|
|
|||
|
|
```markdown
|
|||
|
|
## コードレビュー結果
|
|||
|
|
|
|||
|
|
### CRITICAL修正(即実行推奨)
|
|||
|
|
1. [項目名]
|
|||
|
|
- 修正箇所: [ファイルパス:行番号]
|
|||
|
|
- 問題内容: [具体的な問題]
|
|||
|
|
- 修正方針: [どう修正すべきか]
|
|||
|
|
- 影響範囲: [どの機能に影響するか]
|
|||
|
|
|
|||
|
|
### HIGH修正(配布前推奨)
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
### MEDIUM修正(時間があれば実装)
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
### UI/UX改善提案(オプション)
|
|||
|
|
- 提案1(AppBar背景色統一)の実施可否判断
|
|||
|
|
- 提案2(ライトモード初期背景)の実施可否判断
|
|||
|
|
|
|||
|
|
### iOS互換性検証結果
|
|||
|
|
- 必須対応事項: [環境構築前に解決すべき問題]
|
|||
|
|
- 推奨対応事項: [iOS品質向上のための改善]
|
|||
|
|
- Android実装への影響: [あり/なし + 詳細]
|
|||
|
|
|
|||
|
|
### 新規発見事項
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
### 修正不要と判断した項目
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
## 総合評価
|
|||
|
|
- 修正前の評価: [1-10点]
|
|||
|
|
- 修正後の評価: [1-10点]
|
|||
|
|
- Android配布可否判断: [Go/No-Go + 理由]
|
|||
|
|
- iOS準備の難易度: [Easy/Medium/Hard + 理由]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 最終確認
|
|||
|
|
このプロンプト実行後、以下が達成されることを期待:
|
|||
|
|
✅ Criticalバグが0件
|
|||
|
|
✅ Phase D6フィルタリングの完全性検証
|
|||
|
|
✅ マジックナンバー定数化の完全性検証
|
|||
|
|
✅ Android配布可否の明確な判断材料
|
|||
|
|
✅ iOS準備の完全なロードマップ
|
|||
|
|
✅ UI/UX改善提案の実施可否判断
|