AIseed Weather 開発マニュアル
初期開発段階 コードは AGPL-3.0-or-later で公開している。このページは開発に参加する (あるいは自分用に改造する)人向けで、使い方は 紹介ページにある。 内容の正本はリポジトリの README.md / AGENTS.md / CLAUDE.md。
環境構築
環境はリポジトリの中に ./.venv として作る。 名前つきのグローバル環境にはしない。
mamba env create --prefix ./.venv -f environment.yml mamba activate ./.venv python -m aiseed_weather.main
パッケージは Miniforge / conda-forge(uv ではない)。 cartopy と cfgrib はネイティブ依存(PROJ・GEOS・ecCodes)を持ち、 pip だけで揃えるのが難しいため。 environment.yml が開発環境の正本で、 pyproject.toml は配布メタデータ。
リポジトリの構成
| 場所 | 中身 |
|---|---|
| src/aiseed_weather/ | アプリ本体。components(UI 部品)/ figures(描画)/ models / products / services(データ取得)に分かれる。 入口は main.py |
| .agents/skills/ | 領域ごとの開発ガイド 13 本(下記) |
| WeatherStatic/ | Web サイト(個人開発気象統計)。アプリとはデータ基盤を共有する |
| docs/ | Web サイトとデータ基盤の文書(目次は docs/README.md)。運用手順・配信仕様。 アプリが読むデータの形はここで決まる |
進め方 — スキルを読んでから書く
変更する領域に対応するスキル(.agents/skills/)を 編集の前に読む。これが唯一のハードルール。 Flet の API 取り違えなど、実際に起きたバグはどれも読んでいれば防げた。
どのスキルを読むかは、作業の種類ごとに AGENTS.md の表で決まっている。 複数が当てはまるときは下の順に読む。いつも読むのは aiseed-conventions、 データを表示するビューに触れるなら user-action-fetch も。
| 順 | スキル | 何のガイドか |
|---|---|---|
| 1 | aiseed-conventions | プロジェクト全体の決まりと想定利用者(いつも最初に) |
| 2 | flet-declarative | このプロジェクトでの Flet UI の書き方 |
| 3 | flet-component-basics | Flet 0.85+ の入口・@ft.component・hooks |
| 4 | user-action-fetch | いつ・どうデータを取ってよいか(データを出すビュー全部に関係) |
| 5 | first-run-setup | config.toml の読み込みとデータソースの選択(設定画面は無い) |
| 6 | ecmwf-data-access | ECMWF Open Data と ERA5(データの中核) |
| 7 | data-flow | 地図ビューで取得・GRIB キャッシュ・層・描画がどうつながるか |
| 8 | climatology-analysis | ERA5 の気候値・アノマリ・パーセンタイル(差別化の核) |
| 9 | jma-data-access | 気象庁のレーダーと AMeDAS(日本の現況) |
| 10 | weather-rendering | 総観規模の地図描画 |
| 11 | chart-base-design | 図の層構造(base / data / isoline / pill) |
| 12 | figure-export | 出典つきの書き出し |
| 13 | open-meteo-access | 補助の地点予報(優先度は低い) |
二つの設計原則
| 1 | データソースは利用者が選ぶ。 ~/.config/aiseed-weather/config.toml を 起動前に編集する。アプリは勝手に選ばないし、設定 UI も出さない。 気象庁だけは機能ごとに有効(公開・無料の API のため設定キー不要) |
|---|---|
| 2 | 取得は利用者の操作時だけ。 ビューを開く・更新を押す・パラメータを変える。 バックグラウンドポーリングなし、自動更新なし、先読みなし |
データ層(それぞれ役割が違う)
| 層 | 出所 | 役割 |
|---|---|---|
| 予報格子 | ECMWF Open Data。config.toml で選んだミラー(GCP / AWS / Azure / ECMWF 直)から (cycle, step) ごとに一括 GRIB を HTTPS で取る。aiseed の再配布パックも選べる | 未来・地図ビュー |
| 気候値・アノマリ | ERA5(AWS)。サービスはまだ無く、地点予報の平年値は今は Open-Meteo の過去データから | 歴史的文脈。差別化の核 |
| 日本の現況 | 気象庁レーダー + AMeDAS | 「いま」のナウキャスト |
| 地点予報 | Open-Meteo | 補助ビュー |
気象庁の観測は、このサイトでもまとめて配っている。気象庁では約 9 日で消える AMeDAS の 10 分値・1 時間値は アメダス 10 分値アーカイブ、 日別の気温・降水・日照(1880 年〜)は 日別の観測データ。 配信の形は docs/ を参照。
技術構成
| UI | Flet(Python、宣言的コンポーネント) |
|---|---|
| 処理 | xarray + cfgrib(GRIB2)、numpy |
| 地図の描画 | numpy + PIL + contourpy(figures/_layered_renderer.py)。 cartopy は海岸線のマスクを前もって作るためだけに使う |
| 地点予報のグラフ | 画面は flet.canvas、PNG のダウンロードは matplotlib |
| 書き出し | 予定(figure-export スキル) |
ライセンスと帰属
| コード | AGPL-3.0-or-later |
|---|---|
| ECMWF・Open-Meteo のデータ | CC-BY-4.0。書き出す図に帰属を埋め込む |
| 気象庁のデータ | 出典: 気象庁ホームページ(加工した場合はその旨も) |
帰属表示は UI と書き出した図の両方に入る。ここは削らない。