Files
keinasystem/05_実装優先順位.md
Akira 60dca6aab1 📚 修正したドキュメント
 02_ユーザーストーリー.md - 作物マスタの定義を統一
 03_データ仕様書.md - 作物・品種マスタを更新
 04_画面設計書.md - 集計サイドバーと編集モーダルのUI
 05_実装優先順位.md - Day 5-6に集計API・品種追加APIを追加
 06_Gemini向け統合指示書.md - コード例を全面更新
2026-02-15 10:41:55 +09:00

327 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.
# 実装優先順位とマイルストーン
## 🎯 MVPPhase 1の完成定義
以下の全てが完了したら、Phase 1は完成とする
### 機能完成基準
- [ ] ログイン・認証機能
- [ ] 作付け計画の一覧表示PC/スマホ)
- [ ] 作付け計画の編集(個別・一括)
- [ ] 水稲共済細目書のCSV出力
- [ ] 中山間交付金のCSV出力
- [ ] 前年度作付けのコピー機能
- [ ] 3種類のマスタデータインポート
### 品質基準
- [ ] PCで快適に操作できるレスポンス1秒以内
- [ ] スマホで見やすい文字16px以上
- [ ] 出力されるCSVが正確手動検証で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: 作物・品種マスタの初期データ投入
- 作物: 米、トウモロコシ、エンドウ、野菜、その他
- 品種: 米(にこまる等)、その他(完全休耕等)
- [ ] Django: 作付け計画API
- 一覧取得 (`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: 作付け計画編集モーダル
- 作物選択(ドロップダウン)
- **品種選択統一UI**
- プリセット品種のドロップダウン
- [+ 新しい品種を追加]ボタン
- すべての作物で同じ操作
- 一括割当対応
- [ ] 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.0 | 安定性、豊富なエコシステム |
| 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では不要住所テキストのみ
### しっかり作り込むもの
- 作付け計画一覧: 検索・フィルタ・ソート機能
- 編集モーダル: 入力バリデーション、エラー表示
- 申請書CSV: 正確なデータ集計ロジック
### 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: 共済CSVの面積計算バグを修正
docs: READMEにセットアップ手順を追加
style: Tailwindクラスを整理
```
### ブランチ戦略
- `main`: 本番環境
- `develop`: 開発環境
- `feature/*`: 機能開発
---
## 🎉 Phase 1完成後の振り返り
完成したら、以下を実施:
1. **使用感チェック**: 実際に作付け計画を入力してみる
2. **申請書検証**: 出力されたCSVを役場の書式と照合
3. **改善点の洗い出し**: 「ここがもっとこうだったら...」を記録
4. **Phase 2の要件整理**: 栽培履歴機能の詳細を詰める