diff --git a/CLAUDE.md b/CLAUDE.md index 36f6766..f1102c8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ ## 開発進捗 -現在の進捗: 仕様設計フェーズ進行中(SPEC_01 作成済み).次は規約整備・開発計画フェーズ. +現在の進捗: 仕様設計・規約整備・開発計画 完了.次は Step 1(プロジェクト基盤)の実装. ※ ステップ完了時にここを更新すること. ## 必須ルール(コード実装時) @@ -61,6 +61,7 @@ ### 03_PLAN(計画) - 要件定義書: docs/03_PLAN/PLAN_01_要件定義書.md +- 開発ステップ: docs/03_PLAN/PLAN_02_開発ステップ.md ### 04_SPEC(仕様・設計) diff --git "a/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" new file mode 100644 index 0000000..45634d9 --- /dev/null +++ "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" @@ -0,0 +1,149 @@ +# 開発ステップ (Development Steps) + +[SPEC_01_画面機能仕様書](../04_SPEC/SPEC_01_画面機能仕様書.md) の仕様をもとに,実装の順序とステップを定義する. +各ステップは 1 つのブランチ・PR に対応させる. + +## ステップ一覧 (Overview) + +| # | ステップ | 概要 | 依存 | +| --- | --- | --- | --- | +| 1 | プロジェクト基盤 | アプリ骨格,テーマ,画面遷移,Provider 登録 | — | +| 2 | カメラプレビュー | インカメラのライブプレビュー表示(180° 回転) | 1 | +| 3 | 撮影・保存 | シャッターボタン,PNG 保存,ファイル命名 | 2 | +| 4 | 一覧・削除 | サムネイルグリッド,拡大表示,画像削除 | 3 | +| 5 | 仕上げ | パーミッション UX 改善,エラーハンドリング,手動テスト | 4 | + +## Step 1: プロジェクト基盤 (App Foundation) + +### 目的 + +アプリの骨格を構築し,画面遷移が動作する状態にする. + +### 実装内容 + +- `main.dart` — `runApp()` で Provider を登録し,アプリを起動する +- `app.dart` — `MaterialApp` の定義,テーマ設定 +- `screens/capture_screen.dart` — 撮影画面の空のスキャフォールド +- `screens/gallery_screen.dart` — 一覧画面の空のスキャフォールド +- `BottomNavigationBar` による 2 タブ切り替え +- UI 全体の 180° 回転(`Transform.rotate`) + +### 完了基準 + +- アプリが起動し,2 つのタブで画面を切り替えられる +- UI が 180° 回転して表示される +- `dart analyze` / `dart format` がクリーン + +### ブランチ名 + +`feature/app-foundation` + +## Step 2: カメラプレビュー (Camera Preview) + +### 目的 + +インカメラのライブプレビューを撮影画面に表示する. + +### 実装内容 + +- `services/permission_service.dart` — カメラ権限の確認・要求 +- `providers/camera_provider.dart` — カメラの初期化・プレビュー制御・ライフサイクル管理 +- `widgets/camera_preview.dart` — `CameraPreview` ウィジェット +- `screens/capture_screen.dart` — カメラプレビューの組み込み +- パーミッション拒否時のエラー表示(基本的なメッセージのみ) + +### 完了基準 + +- 撮影画面でインカメラのライブプレビューが表示される +- アプリをバックグラウンド→復帰してもカメラが正常に動作する +- カメラ権限の拒否時にメッセージが表示される + +### ブランチ名 + +`feature/camera-preview` + +## Step 3: 撮影・保存 (Capture & Save) + +### 目的 + +シャッターボタンで撮影し,PNG 形式でストレージに保存する. + +### 実装内容 + +- `services/file_service.dart` — PNG 保存,ファイル名生成,重複回避ロジック +- `widgets/shutter_button.dart` — シャッターボタン UI +- `providers/camera_provider.dart` — 撮影実行メソッドの追加 +- `screens/capture_screen.dart` — シャッターボタンの組み込み,撮影成功時のスナックバー +- ストレージ権限の確認・要求 +- MediaStore への通知 + +### テスト + +- `FileService` のファイル名生成ロジックの Unit テスト +- `FileService` の重複回避ロジックの Unit テスト + +### 完了基準 + +- シャッターボタンタップで撮影できる +- `Pictures/MiniTIAS/` に `MiniTIAS_YYYYMMDD_HHmmss.png` 形式で保存される +- 連続撮影で同秒の場合,連番サフィックスが付与される +- 撮影成功時にスナックバーが表示される + +### ブランチ名 + +`feature/capture-save` + +## Step 4: 一覧・削除 (Gallery & Delete) + +### 目的 + +撮影済み画像の一覧表示,拡大確認,削除機能を実装する. + +### 実装内容 + +- `providers/gallery_provider.dart` — 画像一覧の取得・キャッシュ・削除操作 +- `widgets/image_grid.dart` — 3 列サムネイルグリッド +- `widgets/image_detail_dialog.dart` — 拡大表示ダイアログ(ピンチズーム,削除ボタン) +- `screens/gallery_screen.dart` — グリッド・ダイアログの組み込み,空状態メッセージ + +### テスト + +- `GalleryProvider` の一覧取得・削除ロジックの Unit テスト + +### 完了基準 + +- 一覧画面に撮影済み画像がサムネイルで表示される(新しい順) +- サムネイルタップで拡大表示ダイアログが開く +- ダイアログ内の削除ボタンで画像を削除できる(確認ダイアログあり) +- 画像 0 件時に空状態メッセージが表示される + +### ブランチ名 + +`feature/gallery-delete` + +## Step 5: 仕上げ (Polish) + +### 目的 + +パーミッション UX の改善,エラーハンドリングの強化,全体の動作確認を行う. + +### 実装内容 + +- パーミッション拒否時の設定画面誘導ボタン +- 各種エラー時のスナックバー表示の統一 +- 撮影画面↔一覧画面切り替え時のデータリフレッシュ + +### テスト + +- 全 Unit / Widget テストの通過確認 +- [GUIDE_06](../01_GUIDE/GUIDE_06_テスト方針.md) の手動確認項目を実機で確認 + +### 完了基準 + +- GUIDE_06 の手動確認項目がすべて OK +- `dart analyze` / `flutter test` がクリーン +- 白板・舌模型の撮影ができ,PC から USB 経由で画像にアクセスできる + +### ブランチ名 + +`feature/polish-permissions`