作成: 2026-05-01
最終更新: 2026-05-03(Issue #47 完了後の後続方針を追記)
対象機能: 週間天気予報 / 時間帯別天気予報 / ホームダッシュボード再編
実装状況: 実装済み(予報表示 + TODO中心レイアウト)。後続改善は #50/#51/#49 で対応。
対象 Issue:akira/keinasystem#20
関連ドキュメント:
docs/12_マスタードキュメント_気象データ編.md
docs/19_マスタードキュメント_TODO管理編.md
docs/17_マスタードキュメント_ナビゲーション再編編.md
/weather は履歴分析画面として実装済みだが、日々の作業判断で最も先に見たい「直近の予報」はまだホーム上にない。
本機能では、/dashboard を「天気予報 + TODO中心」の画面に再編し、天気を見て計画し、そのまま TODO を処理し、必要に応じて実績登録へ進む導線を作る。
週間予報は MVP で 7 日分、追加で今日・明日の時間帯別予報を扱う。
履歴データ機能とは役割を分け、以下の住み分けを維持する。
/dashboard: 直近判断用の予報、TODO、計画/実績への導線/weather: 過去実績の分析、年別比較、積算温度、類似年確認/todos ではなく dashboard 内完結へ変更| IN(本ドキュメント対象) | OUT(本ドキュメント対象外) |
|---|---|
| 7日間の週間天気予報表示 | 気象警報・注意報 |
| 今日/明日の1時間ごとの予報表示 | 3日超の時間帯別予報 |
/api/weather/weekly/ と /api/weather/hourly/ |
予報データの長期永続化(初期段階) |
| Open-Meteo Forecast API 連携 | 気象庁 API への即時切替 |
/dashboard の TODO 中心レイアウト化 |
/weather 画面の大幅改修 |
| 計画タブ / 実績登録タブの切替 | 新しい TODO ドメインモデル追加 |
| 風速・風向きの表示 | 通知・プッシュ配信 |
backend/apps/weather/ に WeatherRecord として蓄積済み/weather では年別集計・期間表示・GDD・類似年分析が利用可能/dashboard には現在、作付け計画サマリー、メール通知サマリー、TODO サマリーが表示されているapps/todos と /todos ですでに実装済み/weather や外部天気アプリを開かないと予報が見えないWeatherForecast モデル + Windmill 同期へ移行できるfrontend/src/app/dashboard/page.tsx を起点に改修するhttps://api.open-meteo.com/v1/forecastlatitude=33.213, longitude=133.133(窪川)Asia/Tokyowind_speed_unit=ms(デフォルトは km/h のため必須)| 返却項目 | Open-Meteo パラメータ | 用途 |
|---|---|---|
| 日付 | time |
表示軸 |
| 天気コード | weather_code |
アイコン・文言生成 |
| 最高気温 | temperature_2m_max |
表示 |
| 最低気温 | temperature_2m_min |
表示 |
| 降水量 | precipitation_sum |
表示 |
| 降水確率 | precipitation_probability_max |
表示 |
| 日最大風速 | wind_speed_10m_max |
表示 |
| 卓越風向 | wind_direction_10m_dominant |
表示 |
| 返却項目 | Open-Meteo パラメータ | 用途 |
|---|---|---|
| 日時 | time |
表示軸 |
| 天気コード | weather_code |
アイコン・文言生成 |
| 気温 | temperature_2m |
表示 |
| 降水確率 | precipitation_probability |
表示 |
| 風速 | wind_speed_10m |
表示 |
| 風向 | wind_direction_10m |
表示 |
JmaForecastProvider を追加できる責務分離にする責務の目安:
weather_code -> icon_key / weather_textDjango アプリは既存の backend/apps/weather/ を拡張する。
| メソッド | パス | 認証 | 説明 |
|---|---|---|---|
| GET | /api/weather/weekly/ |
JWT | 7日分の daily 予報 |
| GET | /api/weather/hourly/ |
JWT | 今日・明日の1時間ごとの予報 |
初期段階では予報の DB 永続化は行わない。
weather:forecast:weekly:kubokawaweather:forecast:hourly:kubokawaweekly と hourly は同じ外部 fetch 結果から切り出してもよい/api/weather/weekly/レスポンス形式:
[
{
"date": "2026-05-01",
"weather_code": 1,
"icon_key": "partly_cloudy",
"weather_text": "晴れ時々くもり",
"temp_max": 22.0,
"temp_min": 12.0,
"precip_mm": 0.0,
"precip_prob": 10,
"wind_speed_max": 4.5,
"wind_direction": 270
}
]
フィールド定義:
| フィールド | 型 | 説明 |
|---|---|---|
date |
string (YYYY-MM-DD) | 対象日 |
weather_code |
integer | WMO天気コード |
icon_key |
string | フロント表示用キー |
weather_text |
string | 日本語の短い天気説明 |
temp_max |
number/null | 最高気温 |
temp_min |
number/null | 最低気温 |
precip_mm |
number/null | 日降水量 |
precip_prob |
integer/null | 日最大降水確率 |
wind_speed_max |
number/null | 日最大風速 |
wind_direction |
integer/null | 卓越風向(0〜360度) |
/api/weather/hourly/レスポンス形式:
[
{
"datetime": "2026-05-01T06:00:00+09:00",
"weather_code": 1,
"icon_key": "partly_cloudy",
"weather_text": "晴れ時々くもり",
"temp": 16.0,
"precip_prob": 0,
"wind_speed": 2.1,
"wind_direction": 225
}
]
フィールド定義:
| フィールド | 型 | 説明 |
|---|---|---|
datetime |
string (ISO8601) | 対象時刻 |
weather_code |
integer | WMO天気コード |
icon_key |
string | フロント表示用キー |
weather_text |
string | 日本語の短い天気説明 |
temp |
number/null | 気温 |
precip_prob |
integer/null | 降水確率 |
wind_speed |
number/null | 風速 |
wind_direction |
integer/null | 風向(0〜360度) |
503 を返し、フロントに「予報取得失敗」を表示させるnull を返し、全体失敗にはしないWMO 天気コードは backend 側で icon_key と weather_text に変換し、フロントで変換表を持たない。
| icon_key | 主な WMO コード | 意味 |
|---|---|---|
sunny |
0 |
快晴 |
partly_cloudy |
1, 2 |
晴れ時々くもり |
cloudy |
3 |
くもり |
fog |
45, 48 |
霧 |
drizzle |
51, 53, 55, 56, 57 |
霧雨 |
rain |
61, 63, 65, 66, 67, 80, 81, 82 |
雨 |
snow |
71, 73, 75, 77, 85, 86 |
雪 |
thunder |
95, 96, 99 |
雷雨 |
unknown |
その他 | 不明 |
sunny: 晴れpartly_cloudy: 晴れ時々くもりcloudy: くもりrain: 雨thunder: 雷雨ArrowUp アイコン(lucide-react)を回転させて矢印で示すrotate((wind_direction + 180) % 360, deg)degreesToCompass() 関数は lib/weather.ts に保持するが、UI 表示には使用しない実装対象は frontend/src/app/dashboard/page.tsx を中心とする。
┌─────────────────────────────────────────────┐
│ 週間天気予報 │
│ 今日/明日の時間帯別予報 │
├─────────────────────────────────────────────┤
│ [計画] [実績登録] │
├─────────────────────────────────────────────┤
│ TODO入力 + TODO一覧 │
│ 計画メニュー or 実績メニュー │
└─────────────────────────────────────────────┘
| コンポーネント | 役割 |
|---|---|
WeeklyForecastPanel |
7日予報をカード表示 |
HourlyForecastPanel |
今日/明日の時間帯別予報を横スクロール表示 |
DashboardTodoComposer |
簡易 TODO 入力 |
DashboardTodoList |
TODO 一覧・完了導線 |
DashboardModeTabs |
計画 / 実績登録 の切替 |
PlanningShortcutMenu |
作業計画系メニュー |
RecordShortcutMenu |
実績登録系メニュー |
既存 page.tsx にすべて直書きするのではなく、予報系・TODO系・タブ系で分割する。
weather_text今日 / 明日 のタブ切替/todos を置き換えるのではなく、ホームでは「すぐ使う最小導線」に絞る/todos で行う| フェーズ | 内容 | 到達目標 | 実装状況 |
|---|---|---|---|
| Phase 1 | /api/weather/weekly/ + WeeklyForecastPanel |
ダッシュボードで7日予報が見える | ✅ 完了 |
| Phase 2 | /api/weather/hourly/ + HourlyForecastPanel |
当日判断に使う時間帯別予報が見える | ✅ 完了 |
| Phase 3 | TODO中心レイアウト + 計画/実績タブ切替 | ホーム上で計画と実績の業務導線が成立する | ✅ 完了 |
| Phase 4 | TODO作成時の作業種別選択 + 完了後実績導線 | 作成時に種別を指定し、完了後に実績登録先へ誘導できる | 🔲 未着手 |
Phase 3 時点では DashboardTodoComposer が work_type='general' を固定送信していたため、施肥・田植えなど具体的な作業種別を持った TODO をダッシュボードから作れなかった。
ユーザー要件:
| 値 | 表示ラベル |
|---|---|
general |
一般(デフォルト) |
fertilization |
施肥 |
rice_transplant |
田植え |
delivery |
運搬 |
tractor_work |
トラクター作業 |
tractor_work 選択時は work_subtype セレクタも追加表示(畔塗 / 荒代掻き / 植代掻き / 耕耘)should_link_record: work_type !== 'general' なら true、それ以外 false を自動設定(※ 後続 Issue #49 で廃止予定)POST /api/todos/{source_type}/{id}/complete/ のレスポンスに含まれる redirect.url が存在する場合、完了後バナーを表示general タイプ(redirect が null)はバナーなし_build_redirect_info() にケースを追加(バックエンド)backend/apps/todos/views.py の _build_redirect_info() に以下を追加:
| work_type | redirect.url |
|---|---|
fertilization |
/fertilizer/spreading(実装済み) |
tractor_work |
/tractor-work(実装済み) |
rice_transplant |
/rice-transplant/records(追加) |
delivery |
/distribution(追加) |
general |
null(バナー非表示) |
⚠ 上記 redirect.url は #47 時点の実装値。後続 Issue #51(URL 体系統一)で変更予定。
tractor_work 選択時に work_subtype セレクタが表示される/todos 一覧・詳細に影響がないbackend/apps/weather/views.pybackend/apps/weather/urls.pybackend/apps/weather/serializers.pybackend/apps/weather/ 配下の provider / utility 新規ファイルbackend/apps/weather/tests/ 配下の API テスト追加frontend/src/app/dashboard/page.tsxfrontend/src/components/ 配下の予報・TODO系コンポーネント新規追加frontend/src/lib/ 配下の weather API helper 追加weekly:
weather_code -> icon_key / weather_text 変換hourly:
null 化/weather の履歴分析機能に影響がないこと/todos の作成・完了導線に影響がないこと/dashboard の基本導線が失われないこと/dashboard の計画タブで 7 日分の週間予報が常時表示される/dashboard の計画タブで 今日/明日の時間帯別予報が表示される/dashboard 上で TODO を確認でき、最小限の追加導線を持つ計画 / 実績登録 タブで表示内容が要件どおり切り替わる/weather と /todos に回帰がないWeatherForecast モデルを追加し、Windmill で 1 日 2〜3 回同期する