Files
keinasystem/document/圃場管理/05_実装優先順位.md
2026-02-21 16:44:36 +09:00

11 KiB
Raw Permalink Blame History

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

🎯 MVPPhase 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の要件整理: 栽培履歴機能の詳細を詰める