Files
keinasystem/CLAUDE.md
2026-04-09 14:54:12 +09:00

128 lines
5.7 KiB
Markdown
Raw Permalink 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.
# Keina System - Claude 向けガイド
## プロジェクト概要
農業生産者向けの作付け計画管理システム。圃場管理、作付け計画、申請書自動生成を行う。
ユーザーは65歳の農家元プログラマー、シングルユーザー、39筆の圃場を管理。
**技術スタック:** Django 5.2 + DRF + PostGIS / Next.js 14 (App Router) + TypeScript + Tailwind / PostgreSQL 16 + PostGIS 3.4
**開発方針:** シンプルさ最優先、段階的な機能追加、過度な複雑化を避ける
---
## 絶対に守るべき制約
1. **Field ↔ OfficialKyosaiField / OfficialChusankanField は M:N** — 決してFK (1:N) に戻さない
2. **年度+圃場の組み合わせは1つの Plan のみ** (`unique_together`)
3. **面積**: 表示=反(tan)、計算・保存=m2、変換: 1反=1000m2
4. **FertilizationEntry.fertilizer は PROTECT** — 使用中の肥料は削除不可
5. **3回同じコードを書くまでは抽象化しない**
6. **ドキュメントドリブン**: 仕様変更時はまず関連ドキュメントから更新する
## コーディング規約
- **Backend**: Django ベストプラクティス、日本語フィールドは `verbose_name` で対応
- **Frontend**: TypeScript strict mode、ESLint に従う
- **API**: REST原則、エンドポイントは複数形 (`/api/fields/`, `/api/plans/`)
---
## プロジェクト構造
```
keinasystem_t02/
├── CLAUDE.md # このファイル
├── TASK_CONTEXT.md # 実装状況・課題・次のマイルストーン
├── document/ # 設計書・マスタードキュメント
├── backend/
│ ├── keinasystem/ # Django設定 (settings.py, urls.py)
│ └── apps/
│ ├── fields/ # 圃場管理Field, OfficialKyosaiField, OfficialChusankanField
│ ├── plans/ # 作付け計画Plan, Crop, Variety
│ ├── weather/ # 気象データWeatherRecord
│ ├── reports/ # 申請書PDF生成
│ ├── fertilizer/ # 施肥計画・散布実績・運搬計画
│ ├── workrecords/ # 作業記録索引
│ └── mail/ # メールフィルタリングWindmill連携
└── frontend/src/app/
├── allocation/ # 作付け計画編集(メイン画面)
├── fields/ # 圃場一覧・詳細
├── fertilizer/ # 施肥計画・散布実績
├── distribution/ # 運搬計画
├── weather/ # 気象データ
├── reports/ # 申請書DL
├── import/ # データ取込
├── mail/ # メール管理
└── settings/ # パスワード変更
```
---
## よくある作業パターン
### 新しいモデルを追加する場合
1. `apps/<app>/models.py` → 2. `makemigrations` → 3. `migrate` → 4. `admin.py` 登録
5. Serializer → 6. ViewSet → 7. URL登録
### 新しいAPI / 画面を追加する場合
- API: `views.py``urls.py` → フロントの型定義 (`lib/types.ts`) → API呼び出し
- 画面: `frontend/src/app/<page>/page.tsx` → ローディング/エラー状態を処理
---
## デプロイ・トラブルシューティング
```bash
# 本番デプロイgit pull → build → up -d を一括実行)
ssh keinafarm-claude 'sudo -u keinasystem bash /home/keinasystem/keinasystem_t02/deploy.sh'
# 本番ヘルスチェック9項目、curlベース
bash scripts/check_prod.sh claude keina1234
# 本番マイグレーション(バックエンド変更時のみ)
ssh keinafarm-claude 'cd /home/keinasystem/keinasystem_t02 && \
sudo -u keinasystem docker compose build backend && \
sudo -u keinasystem docker compose up -d && sleep 5 && \
sudo -u keinasystem docker compose exec backend python manage.py migrate'
```
- **Docker Compose**: `docker-compose.yml`=本番、`docker-compose.develop.yml`=開発
- **CORS**: `settings.py``CORS_ALLOWED_ORIGINS`localhost:3000 許可済み)
- **JWT**: アクセストークン24h、リフレッシュ: `/api/auth/jwt/refresh/`
---
## マスタードキュメント(機能別リファレンス)
特定機能の詳細を知りたい場合、**まずマスタードキュメントを参照**すること。
データモデル・API仕様・画面仕様がソースコード参照不要なレベルで記載されている。
| 機能 | ドキュメント |
|------|------------|
| 圃場管理 | `document/10_マスタードキュメント_圃場管理編.md` |
| メール通知 | `document/11_マスタードキュメント_メール通知関連編.md` |
| 気象データ | `document/12_マスタードキュメント_気象データ編.md` |
| 施肥計画 | `document/13_マスタードキュメント_施肥計画編.md` |
| 運搬計画 | `document/14_マスタードキュメント_分配計画編.md` |
| 田植え計画 | `document/16_マスタードキュメント_田植え計画編.md` |
| 農薬散布管理 | `document/18_マスタードキュメント_農薬散布管理編.md` |
| データモデル全体 | `document/03_データ仕様書.md` |
---
## セッション開始・終了フロー
### 開始時
1. この `CLAUDE.md` を読む
2. `HANDOVER.md` で前回の引き継ぎを確認する
3. `TASK_CONTEXT.md` で現在の状況を把握する
4. タスク対象の**マスタードキュメント**を読む
### 終了時(または作業の区切りで必ず実行)
1. `HANDOVER.md` を定型フォーマットで更新する
2. 重要な設計判断があれば `CLAUDE.md` と該当マスタードキュメントを更新
3. 実装状況に変化があれば `TASK_CONTEXT.md` を更新