# Day 2: セキュリティ & キャッシュ確認チェックリスト **実施日**: 2026-01-22 **担当**: 開発者(実機テスト) --- ## ✅ 1. Git履歴からAPIキー削除確認(完了) ### 確認結果 - ✅ `.gitignore` に `lib/secrets.local.dart` と `lib/libsecrets.dart` が含まれている - ✅ `lib/secrets.dart` は未追跡(`??` = untracked) - ✅ `lib/secrets.local.dart.example` も未追跡 - ✅ `lib/secrets.dart` の `defaultValue` は空文字列(38行目) - ✅ APIキーは `secrets.local.dart` から読み込まれる(50行目) ### セキュリティ状態 **🟢 安全**: APIキーはGit履歴に残っていません。 **重要**: - `lib/secrets.dart` を今後Gitにコミットする場合、必ず `defaultValue: ''` のままにしてください - `lib/secrets.local.dart` は絶対にコミットしないでください --- ## ⏳ 2. キャッシュ機能の実機テスト(実施中) ### テスト手順 #### Step 1: 新しい日本酒の写真を選択 1. ギャラリーから**今まで解析していない日本酒の写真**を選択 2. AI解析が実行される(キャッシュMISS) 3. ログで以下を確認: ``` I/flutter: 🔍 Cache MISS: [ハッシュ値] I/flutter: ✅ AI解析成功: [銘柄名] ``` #### Step 2: 同じ写真を再度選択 1. ギャラリーから**同じ写真**を選択 2. AI解析がスキップされる(キャッシュHIT) 3. ログで以下を確認: ``` I/flutter: 💰 API呼び出しをスキップ(キャッシュヒット) ``` #### Step 3: 開発者メニューでキャッシュサイズを確認 1. マイページ → 設定 → 開発者メニュー 2. 「キャッシュサイズ」を確認 3. 数値が表示されているか確認(例: 「2件」) #### Step 4: キャッシュクリアのテスト 1. 開発者メニューで「キャッシュクリア」をタップ 2. 確認ダイアログで「OK」 3. キャッシュサイズが「0件」になることを確認 #### Step 5: キャッシュクリア後の再解析 1. ギャラリーから**先ほどの写真**を選択 2. AI解析が再度実行される(キャッシュMISS) 3. ログで以下を確認: ``` I/flutter: 🔍 Cache MISS: [ハッシュ値] ``` ### 期待される結果 - ✅ 同じ写真を選択した場合、API呼び出しがスキップされる - ✅ ログで「💰 API呼び出しをスキップ」が表示される - ✅ 開発者メニューでキャッシュサイズが確認できる - ✅ キャッシュクリア後は再度API呼び出しが実行される ### キャッシュ効果の試算 | シナリオ | API呼び出し | 削減率 | |---------|------------|--------| | 新しい写真 | 1回 | 0% | | 同じ写真(2回目) | 0回 | 100% | | 同じ写真(3回目) | 0回 | 100% | | **合計** | **1回** | **66%削減** | --- ## ⏳ 3. エラーハンドリング確認(実施中) ### テスト手順 #### Test 1: ネットワークエラー 1. スマホを**機内モード**にする 2. ギャラリーから写真を選択 3. エラーメッセージが表示されるか確認: ``` 「AI解析に失敗しました」 ``` 4. 「再試行」ボタンが表示されるか確認 5. 機内モードを解除 6. 「再試行」ボタンをタップ 7. AI解析が成功するか確認 **期待される結果**: ✅ エラーメッセージ表示 → 再試行で成功 --- #### Test 2: API制限到達(手動テスト) **注意**: このテストは**20回の解析**を実行するため、API制限に達します。 1. ギャラリーから**異なる写真を20回**選択 2. 21回目の解析を実行 3. エラーメッセージが表示されるか確認: ``` 「本日のAI解析リクエスト上限に達しました。 明日またお試しください。」 ``` 4. 「再試行」ボタンをタップ 5. 同じエラーメッセージが表示されるか確認 **期待される結果**: ✅ 制限到達時に適切なエラーメッセージ表示 **注意**: このテストを実行すると、今日はこれ以上AI解析ができなくなります。 --- #### Test 3: 画像読み込みエラー 1. ギャラリーから**破損した画像**または**非常に大きな画像**を選択 2. エラーメッセージが表示されるか確認 3. アプリがクラッシュしないか確認 **期待される結果**: ✅ エラーメッセージ表示、クラッシュなし --- ## 📊 Day 2 完了判定 ### 必須項目 - [ ] Git履歴にAPIキーが残っていないことを確認(✅ 完了) - [ ] キャッシュHITが動作することを確認 - [ ] 開発者メニューでキャッシュサイズが表示されることを確認 - [ ] ネットワークエラー時に適切なエラーメッセージが表示されることを確認 ### オプション項目(推奨) - [ ] API制限到達時のエラーメッセージを確認(20回解析が必要) - [ ] 画像読み込みエラー時の挙動を確認 --- ## 🎯 次のステップ(Day 3) Day 2のテストが完了したら、以下を実施: 1. 全機能の実機テスト 2. バグ修正 3. パフォーマンステスト --- **実施者**: 開発者 **確認者**: Cursor AI(ログ確認)