ponshu-room-lite/AI_CONSULTATION_PROMPT.md

322 lines
11 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.

# Cursor / AI エージェント向け 作業依頼プロンプトテンプレート
> このファイルをコピーして Cursor に貼り付けてください。
> タスクを1つずつ渡すことで、確実に実装が進みます。
---
## 【必須】全タスク共通の前置き
```
まず AI_MASTER_ROADMAP.md を読んでください。
特に「4. 開発ルール」のハードコード色の例外一覧を必ず確認してから作業を開始してください。
作業完了後は必ず以下を実行・報告してください:
1. flutter analyze を実行してエラーが0件であることを確認
2. 変更したファイルの一覧と変更概要を報告
```
---
## タスク別プロンプト
### 🟥 v1.0.16-A: onboarding_dialog.dart のハードコード色修正
```
まず AI_MASTER_ROADMAP.md を読んでください。
【タスク】
lib/widgets/onboarding_dialog.dart の以下2箇所を修正してください:
- 113行目付近: Colors.grey → appColors.textSecondary
- 136行目付近: Colors.grey[300] → appColors.textSecondary
【注意】
- 同ファイル内の Colors.black.withValues(alpha:...) はシャドウのため変更禁止
- AppColors は Theme.of(context).extension<AppColors>()! で取得すること
【完了条件】
flutter analyze でエラー0件
```
---
### 🟥 v1.0.16-B: pending_analysis_screen.dart のハードコード色修正
```
まず AI_MASTER_ROADMAP.md を読んでください。
【タスク】
lib/screens/pending_analysis_screen.dart の色を以下の方針で修正してください:
変更対象appColorsに置換:
- Colors.red (エラーテキスト・アイコン) → appColors.error
- Colors.green.shade400 (成功アイコン) → appColors.success
変更禁止意図的なハードコード・AI_MASTER_ROADMAP.mdの例外一覧参照:
- Colors.grey.shade400 (disabledBackgroundColor) → Material Design標準のため維持
- Colors.grey.shade300 (プレースホルダー背景) → プレースホルダー標準色のため維持
- Colors.white (画像オーバーレイ) → カメラUI要件のため維持
- Colors.black.withValues(alpha:...) → シャドウのため維持
【完了条件】
flutter analyze でエラー0件
```
---
### 🟧 v1.0.16-C: sake_detail_screen.dart から _PhotoEditModal を分離
```
まず AI_MASTER_ROADMAP.md と FILE_SPLIT_RECOMMENDATIONS_v1.0.16.md を読んでください。
【タスク】
lib/screens/sake_detail_screen.dart の末尾にある _PhotoEditModal クラス約266行
新規ファイル lib/screens/sake_detail/widgets/sake_photo_edit_modal.dart に切り出してください。
方針:
- StatefulWidget として独立させる
- 元の sake_detail_screen.dart からは import して呼び出す形にする
- Widget のシグネチャ(引数)は変えない
- ディレクトリ lib/screens/sake_detail/widgets/ を新規作成する
【完了条件】
- flutter analyze でエラー0件
- アプリの挙動が変わらないこと(写真編集モーダルが正常に開くこと)
```
---
### 🟧 v1.0.16-D: sake_detail_screen.dart から SakeMBTIStampSection を分離
```
まず AI_MASTER_ROADMAP.md と FILE_SPLIT_RECOMMENDATIONS_v1.0.16.md を読んでください。
【タスク】
lib/screens/sake_detail_screen.dart 内の MBTI スタンプセクション約187行
新規ファイル lib/screens/sake_detail/sections/sake_mbti_stamp_section.dart に切り出してください。
方針:
- ConsumerWidget として独立させる
- 必要な引数SakeItem など)はコンストラクタで受け取る
- 元ファイルは import して使用する形にする
【完了条件】
flutter analyze でエラー0件
```
---
### 🟨 v1.0.16-E: 基本テストの追加
```
まず AI_MASTER_ROADMAP.md を読んでください。
【タスク】
以下の2つのテストファイルを新規作成してください:
1. test/models/sake_item_test.dart
- SakeItem の toJson() / fromJson() ラウンドトリップテスト
- name, brewery, tasteStats フィールドの正確性確認
2. test/services/analysis_cache_service_test.dart
- computeImageHash() が同じ入力に対して同じハッシュを返すこと
- _normalizeBrandName() のスペース除去・小文字化の確認
【完了条件】
flutter test でテストがすべてパスすること
flutter analyze でエラー0件
```
---
### 🟩 v1.1.0-A: チャート手動編集機能
```
まず AI_MASTER_ROADMAP.md を読んでください。
【タスク】
sake_detail_screen.dart の五味チャートセクションに、
ユーザーが AI 生成値を手動で微調整できる機能を追加してください。
仕様:
- 編集ボタン(鉛筆アイコン)をチャートの右上に配置
- タップするとスライダー付きの編集モーダルが開く
- 5軸香り/甘み/酸味/キレ/コク)それぞれを 0〜5 の範囲で調整可能
- 保存時は SakeItem.tasteStats を更新し Hive に永続化
- キャンセルで元の値に戻る
- UI は AppColors を使用すること(ハードコード色禁止・例外一覧参照)
【完了条件】
flutter analyze でエラー0件
チャートの値が実際に変わりアプリ再起動後も保持されること
```
---
### 🔵 Synology Proxy 構築SSH全自動
```
以下の手順でSynology NAS上にGemini APIプロキシサーバーを構築してください。
Agentとして自律的に進め、不明な情報は最初にまとめて質問してください。
【事前確認】作業開始前に以下を私に確認してください:
1. SynologyのSSHユーザー名 (例: admin, maita など)
2. SynologyのTailscale IP (NASのターミナルで `tailscale ip -4` を実行すると確認できます)
3. Gemini APIキー (lib/secrets.local.dart の geminiApiKey の値)
【タスク】
上記の情報が揃ったら、以下を順番に実行してください:
Step 1: SSH接続確認
ターミナルで以下を実行し、接続できることを確認する:
ssh [ユーザー名]@[TailscaleIP] "echo 'SSH OK'"
Step 2: プロキシ用ディレクトリ作成
ssh [ユーザー名]@[TailscaleIP] "mkdir -p /docker/ponshu_proxy"
Step 3: ファイル転送
以下の3ファイルをSCPでNASに転送する:
scp tools/proxy/server.js [ユーザー名]@[TailscaleIP]:/docker/ponshu_proxy/
scp tools/proxy/package.json [ユーザー名]@[TailscaleIP]:/docker/ponshu_proxy/
scp tools/proxy/Dockerfile [ユーザー名]@[TailscaleIP]:/docker/ponshu_proxy/
Step 4: Dockerイメージのビルド
ssh [ユーザー名]@[TailscaleIP] "cd /docker/ponshu_proxy && docker build -t ponshu-proxy:latest ."
Step 5: 既存コンテナの停止・削除(再構築時のみ)
ssh [ユーザー名]@[TailscaleIP] "docker rm -f ponshu-proxy-server 2>/dev/null || true"
Step 6: コンテナ起動
ssh [ユーザー名]@[TailscaleIP] "docker run -d \
--name ponshu-proxy-server \
--restart unless-stopped \
-p 8080:8080 \
-e GEMINI_API_KEY='[APIキー]' \
-e DAILY_LIMIT=50 \
-e PORT=8080 \
ponshu-proxy:latest"
Step 7: 動作確認
curl http://[TailscaleIP]:8080/health
→ "OK" が返れば成功
Step 8: Flutter側の設定更新
lib/secrets.local.dart を以下のように更新する:
- aiProxyBaseUrl を "http://[TailscaleIP]:8080" に変更
- useProxy を true に変更
Step 9: 完了報告
以下を報告してください:
- 各Stepの実行結果
- コンテナが正常起動しているか (docker ps の出力)
- healthチェックの結果
- secrets.local.dart の変更内容
【注意事項】
- Tailscale経由のためVPNTailscaleが接続中でないとアクセスできない
- DAILY_LIMIT=50 は後から変更可能(コンテナ再起動で反映)
- APIキーはStep 6実行前にCursorのターミナルには表示されない形で入力すること
【完了条件】
- curl http://[TailscaleIP]:8080/health → "OK"
- flutter analyze でエラー0件
```
---
### 🔵 Synology Proxy 動作確認・再起動(構築済みの場合)
```
Synology上のponshu-proxyコンテナの状態を確認・必要なら再起動してください。
【事前確認】
1. SynologyのSSHユーザー名
2. SynologyのTailscale IP
【タスク】
Step 1: コンテナ状態確認
ssh [ユーザー名]@[TailscaleIP] "docker ps -a | grep ponshu-proxy"
Step 2: ヘルスチェック
curl http://[TailscaleIP]:8080/health
Step 3: ログ確認(問題がある場合)
ssh [ユーザー名]@[TailscaleIP] "docker logs ponshu-proxy-server --tail 50"
Step 4: 再起動(必要な場合)
ssh [ユーザー名]@[TailscaleIP] "docker restart ponshu-proxy-server"
結果を報告してください。
```
---
## カラー使用ルール(クイックリファレンス)
### ✅ 使用すべきもの
```dart
final appColors = Theme.of(context).extension<AppColors>()!;
appColors.textPrimary // メインテキスト
appColors.textSecondary // サブテキスト・ヒント
appColors.textTertiary // 薄いテキスト
appColors.brandPrimary // ブランドカラー(ボタン等)
appColors.brandAccent // アクセントカラー
appColors.error // エラー表示Colors.red の代替)
appColors.success // 成功表示Colors.green の代替)
appColors.warning // 警告表示
appColors.surfaceElevated // カード背景
appColors.surfaceSubtle // 薄い背景
appColors.divider // 区切り線
```
### ❌ 変更禁止のハードコード色
```
camera_screen.dart 全体
→ Colors.white / black / white54 / transparent
→ 理由: カメラUIはテーマ非依存で視認性確保が必須
pending_analysis_screen.dart:387
→ Colors.grey.shade400 (disabledBackgroundColor)
→ 理由: Material Design の disabled ボタン標準
pending_analysis_screen.dart:341
→ Colors.grey.shade300 (プレースホルダー背景)
→ 理由: 画像未選択状態の標準色
main_screen.dart:65
→ Colors.grey.shade400 (Pro機能ロックアイコン)
→ 理由: 無効化状態の意図的な灰色表現
各所の boxShadow
→ Colors.black.withValues(alpha: ...)
→ 理由: シャドウは黒固定が自然
```
---
## トラブルシューティング
### flutter analyze でエラーが出た場合
```
AI_MASTER_ROADMAP.md を再度確認し、以下をチェックしてください:
1. AppColors のプロパティ名が正しいかlib/theme/app_colors.dart を参照)
2. ConsumerWidget を使っているか
3. ハードコード色の例外一覧に該当していないか
エラーメッセージを貼り付けて修正してください。
```
### 巨大ファイル (sake_detail_screen.dart) を編集する場合
```
1872行あるため、一度に全体を把握しようとしないこと。
対象のクラス・メソッドの範囲だけをピンポイントで読み込み編集すること。
```
---
**最終更新**: 2026-02-13