# 実装優先順位とマイルストーン

## 🎯 MVP（Phase 1）の完成定義

以下の全てが完了したら、Phase 1は完成とする：

### 機能完成基準
- [ ] ログイン・認証機能
- [ ] 作付け計画の一覧表示（PC/スマホ）
- [ ] 作付け計画の編集（個別・一括）
- [ ] 水稲共済細目書のPDF出力
- [ ] 中山間交付金のPDF出力
- [ ] 前年度作付けのコピー機能
- [ ] 3種類のマスタデータインポート

### 品質基準
- [ ] PCで快適に操作できる（レスポンス1秒以内）
- [ ] スマホで見やすい（文字16px以上）
- [ ] 出力されるPDFが正確（手動検証でOK）

### ユーザビリティ基準
- [ ] 作付け計画の登録が10分以内で完了
- [ ] 申請書のダウンロードが3クリック以内
- [ ] スマホでの圃場検索が3タップ以内

**目標完成日: 2025年2月末（水稲共済の1回目申請に間に合わせる）**

---

## 📅 実装スケジュール（10日間想定）

### Day 1-2: 環境構築 & 基盤実装

**Day 1: プロジェクトセットアップ**
- [ ] Dockerコンテナの構築
  - PostgreSQL (PostGIS拡張)
  - Django (バックエンド)
  - Next.js (フロントエンド)
- [ ] Djangoプロジェクト初期化
  - `django-admin startproject`
  - GIS設定 (`GDAL`, `GEOS`)
  - 環境変数管理 (`.env`)
- [ ] Next.jsプロジェクト初期化
  - `create-next-app`
  - Tailwind CSS設定
  - 環境変数管理

**Day 2: 認証機能**
- [ ] Django: ユーザーモデル (メール認証)
- [ ] Django: JWT認証設定 (`djoser`, `djangorestframework-simplejwt`)
- [ ] Next.js: ログイン画面
- [ ] Next.js: 認証コンテキスト (`AuthContext`)
- [ ] 動作確認: ログイン→ダッシュボード遷移

---

### Day 3-4: データモデル & インポート機能

**Day 3: データベース設計**
- [ ] Django: モデル定義
  - `Field` (実圃場)
  - `OfficialKyosaiField` (共済マスタ)
  - `OfficialChusankanField` (中山間マスタ)
  - `Plan` (作付け計画)
  - `Crop` (作物マスタ)
  - `Variety` (品種マスタ)
- [ ] マイグレーション実行
- [ ] 管理画面での動作確認

**Day 4: インポート機能**
- [ ] Django: インポートAPI実装
  - `pandas` + `odfpy` でODS読み込み
  - 共済マスタインポート
  - 中山間マスタインポート
  - 吉田農地台帳インポート（紐付け処理含む）
- [ ] Next.js: データ管理画面
  - ファイルアップロードUI
  - プレビュー表示
  - インポート実行ボタン
- [ ] 動作確認: 実際のODSファイルをインポート

---

### Day 5-6: 作付け計画機能（コア機能）

**Day 5: 作付け計画API**
- [ ] Django: 作付け計画API（作物・品種はUIまたは管理画面から登録）
  - 一覧取得 (`GET /api/plans/?year=2025`)
  - 作成・更新 (`POST /api/plans/`, `PATCH /api/plans/{id}/`)
  - 一括更新 (`POST /api/plans/bulk/`)
  - 前年度コピー (`POST /api/plans/copy_from_previous_year/`)
  - **品種追加API** (`POST /api/varieties/`) - その場で品種を追加
  - **集計API** (`GET /api/plans/summary/?year=2025`) - サイドバー用
- [ ] API動作確認 (Postman or curl)

**Day 6: 作付け計画UI**
- [ ] Next.js: 作付け計画一覧画面
  - テーブル表示
  - 検索・フィルタ機能
  - 未割当のハイライト
  - **集計サイドバー（開閉可能）**
    - 作物別・品種別の合計面積
    - リアルタイム更新
  - **スマホ: 集計モーダル表示**
- [ ] Next.js: 作付け計画インライン編集
  - 作物選択（テーブル内ドロップダウン）
  - 品種選択（テーブル内ドロップダウン、作物選択後に有効化）
  - 備考入力（テーブル内テキスト）
  - 変更即時保存（バックグラウンド、スクロール維持）
- [ ] Next.js: 前年度コピーボタン
- [ ] 動作確認: 作付け計画を実際に入力

---

### Day 7-8: 申請書出力機能

**Day 7: 申請書ロジック実装**
- [ ] Django: 水稲共済細目書PDF生成
  - 共済マスタをベースに集約
  - 紐づく実圃場の作付けを名寄せ
  - HTMLテンプレート作成
  - WeasyPrintでPDF変換
- [ ] Django: 中山間交付金PDF生成
  - 中山間マスタをベースに集約
  - HTMLテンプレート作成
- [ ] 動作確認: PDFの内容と見た目を手動チェック

**Day 8: 申請書ダウンロードUI**
- [ ] Next.js: 申請書ダウンロード画面
  - 年度選択
  - プレビュー表示（新しいタブでPDF）
  - PDFダウンロードボタン
- [ ] 動作確認: PDFをダウンロードして印刷してみる

---

### Day 9: スマホ対応 & UI調整

**Day 9: レスポンシブ対応**
- [ ] Next.js: スマホ用レイアウト調整
  - 作付け計画一覧（カード型）
  - 圃場詳細画面
  - タップ領域の調整
- [ ] 文字サイズ・余白の調整
- [ ] 動作確認: 実機またはChrome DevToolsのモバイルビュー

---

### Day 10: テスト & 微調整

**Day 10: 総合テスト**
- [ ] 全機能の動作確認
  - ログイン→作付け計画編集→申請書ダウンロードの一連の流れ
  - 前年度コピー→編集→保存
  - スマホでの参照
- [ ] バグ修正
- [ ] ドキュメント整備（README.md、使い方ガイド）
- [ ] 本番デプロイ準備（Dockerイメージのビルド）

---

## 🔧 技術スタックの詳細

### バックエンド (Django)

| 項目 | 採用技術 | 理由 |
|------|---------|------|
| フレームワーク | Django 5.2 | 安定性、豊富なエコシステム |
| REST API | Django REST Framework | 標準的なAPI構築ツール |
| 認証 | djoser + SimpleJWT | JWT認証の簡単な実装 |
| GIS | GeoDjango (PostGIS) | 地理情報の扱いに最適 |
| ファイル解析 | pandas + odfpy | ODS/Excelの読み込みに対応 |
| PDF生成 | WeasyPrint | HTML→PDF変換、日本語対応 |
| データベース | PostgreSQL 16 + PostGIS 3.4 | 空間データの保存・検索 |

### フロントエンド (Next.js)

| 項目 | 採用技術 | 理由 |
|------|---------|------|
| フレームワーク | Next.js 14 (App Router) | SSR/SSG対応、モダンな開発体験 |
| スタイリング | Tailwind CSS | 高速なUI開発 |
| 状態管理 | React Context API | シンプルな認証状態管理 |
| HTTPクライアント | fetch API (native) | 軽量、標準API |
| テーブル | react-table (TanStack Table) | 高機能なテーブルコンポーネント |

### インフラ (Docker)

| 項目 | 採用技術 | 理由 |
|------|---------|------|
| コンテナ化 | Docker Compose | 開発・本番環境の統一 |
| データベース | postgis/postgis:16-3.4 | PostGIS公式イメージ |
| リバースプロキシ | Nginx (開発環境) | 静的ファイル配信 |

---

## 📦 実装の粒度（コードレベル）

### 最小限の実装で済むもの
- ログイン画面: メール+パスワードのみ（パスワードリセットは後回し）
- ダッシュボード: サマリー表示のみ（グラフは不要）
- 地図機能: Phase 1では不要（住所テキストのみ）

### しっかり作り込むもの
- 作付け計画一覧: 検索・フィルタ・ソート機能
- インライン編集: 即時保存、スクロール維持
- 申請書PDF: 正確なデータ集計ロジック、A4印刷対応

### Phase 2以降に回すもの
- 栽培履歴（播種日、作業記録）
- カレンダー表示
- 資材計画
- 過去年度の比較

---

## 🚀 デプロイ計画

### 開発環境
- ローカルマシン: Docker Compose
- URL: `http://localhost:3000`

### 本番環境（Phase 1後）
- サーバー: VPS or クラウド（AWS/GCP/さくらVPS）
- ドメイン: `keina.example.com` (仮)
- HTTPS: Let's Encrypt
- リバースプロキシ: Traefik or Nginx

### バックアップ戦略
- データベース: 毎日自動バックアップ（`pg_dump`）
- ファイル: CSVエクスポートでユーザー自身がバックアップ

---

## 🧪 テスト戦略

### Phase 1では自動テスト不要
- **理由**: シングルユーザー、手動検証で十分
- **代わりに**: 手動チェックリストで品質保証

### 手動チェックリスト

#### 機能テスト
- [ ] ログインできる
- [ ] 作付け計画を登録できる
- [ ] 作付け計画を編集できる
- [ ] 一括割当ができる
- [ ] 前年度コピーができる
- [ ] 水稲共済PDFをダウンロードできる
- [ ] 中山間PDFをダウンロードできる
- [ ] PDFをプレビュー表示できる
- [ ] スマホで圃場詳細を見られる

#### データ整合性テスト
- [ ] 共済PDFの耕地番号が正しい
- [ ] 中山間PDFのIDが正しい
- [ ] 作物の名寄せが正しい（重複排除）
- [ ] 未割当の圃場が適切に扱われる
- [ ] PDFの表レイアウトが整っている
- [ ] PDFをA4用紙に印刷して見やすい

#### UI/UXテスト
- [ ] PCで見やすい（文字サイズ、余白）
- [ ] スマホで見やすい（タップ領域、スクロール）
- [ ] エラーメッセージがわかりやすい
- [ ] ローディング中の表示

---

## 🔍 潜在的な技術的課題と対策

### 課題1: PostGISの設定
**問題**: Dockerコンテナ内でGDAL/GEOSのパスが通らない  
**対策**: 公式PostGISイメージを使用、Djangoの`GDAL_LIBRARY_PATH`を明示的に設定

### 課題2: ODSファイルの文字コード
**問題**: 日本語の文字化け  
**対策**: `pd.read_excel(..., engine='odf')` でUTF-8として読み込み

### 課題3: 作物の名寄せロジック
**問題**: 複数の実圃場が1つの共済区画に紐づく場合の集約  
**対策**: Pythonのセットで重複排除 → カンマ区切りで結合

### 課題4: スマホでのテーブル表示
**問題**: 横スクロールが発生  
**対策**: カード型レイアウトに変更（Tailwindの`@media`クエリ）

### 課題5: 大量データのパフォーマンス
**問題**: Phase 2以降、栽培履歴が増えると遅くなる  
**対策**: ページネーション、インデックス最適化（Phase 2で対応）

---

## 📝 開発時の注意点

### コーディング規約
- **Python**: PEP 8準拠、型ヒント推奨
- **JavaScript**: ESLint + Prettier、関数コンポーネント優先
- **命名**: 英語（camelCase or snake_case）、略語は避ける

### コミットメッセージ
```
feat: 作付け計画一覧APIを実装
fix: 共済PDFの面積計算バグを修正
docs: READMEにセットアップ手順を追加
style: Tailwindクラスを整理
```

### ブランチ戦略
- `main`: 本番環境
- `develop`: 開発環境
- `feature/*`: 機能開発

---

## 🎉 Phase 1完成後の振り返り

完成したら、以下を実施：
1. **使用感チェック**: 実際に作付け計画を入力してみる
2. **申請書検証**: 出力されたPDFを役場の書式と照合
3. **改善点の洗い出し**: 「ここがもっとこうだったら...」を記録
4. **Phase 2の要件整理**: 栽培履歴機能の詳細を詰める
