開発者募集
Dam Data Japan は、全国 2,752 基のダムの諸元と貯水量履歴を集約して無償で公開しているオープンデータ基盤です。 設計から実装、データソースの開拓、サーバー運用まで、現在は一人でやっています。 手が足りないので、一緒に作ってくれる開発者を探しています。
データカバレッジを上げること。実測値が取れているのは 1,033 / 1,050 基(98.4%)で、残り 17 基はまだ取れていません(どの提供元も公開していない、または提供元が値を出していない 1,702 基は分母から除外)。 取得頻度の改善は後回しでよいので、まずは「まだ取れていないダム」を減らしたい。
このサイトの経緯
2026-05-01 に最初のコミットを打ちました。「日本のダムのデータを、 一箇所でまとめて、機械可読な形で無償公開する」という一点だけを目的にしています。 国土数値情報のダム諸元とダム便覧をマスタとして取り込み、そこに各地の観測値を 重ねていく、という構成は初日から変えていません。
当初の想定は単純でした。「川の防災情報と水文水質データベースの 2 系統を叩けば全国そろう」。 実際には、全国規模で叩ける情報源は、そこで頭打ちになりました。川の防災情報のダムカタログに載っているのは全国 900 基ほどで、 水文水質データベース由来の諸量データは 2024 年で更新が止まっています。 この 2 つを取り切っても、全体の 3 分の 1 ほどにしかなりません。
残りのダムの値は、都道府県の河川・防災ポータル、地方整備局、企業局、水道局、 オープンデータカタログへとバラバラに公開されていました。フォーマットは HTML テーブル、 Shift_JIS の CSV、独自 JSON とまちまちで、ダムを識別する共通の ID もありません。 結果として、想定していた 2 本のアダプタは 108 本の取り込みタスクになり、cron エントリは 118 行に膨らみました。
それでも全 2,752 基のうち実測値が取れているのは 37.5% です。残りの多くは農業用ダムや小規模ダムで、 そもそも実測値が公開されていないか、公開先をまだ見つけられていません。つまり、100% のカバレッジと高頻度の更新を同時に達成するのは、一人では難しいと分かってきた、という状況です。だから優先順位をつけて、 まずカバレッジを取りにいくことにしました。
いまの規模
データ側の数字はこのページを開いた時点の本番データベースから直接引いています。 コード側の数字は 2026-09-28 時点の実測値です。
カバレッジの内訳はソース別・都道府県別に /coverage で公開しています。データソースの一覧と名寄せの仕組みは /sources に。
お願いしたいこと
上から順に、いま効くものです。1 つ目だけでも大歓迎です。
- 1新しいデータソースのアダプタを書く
未カバーの県・企業局・土地改良区・電力会社などの公開ページを 1 つ選び、取り込みタスクを 1 本足す。既存タスクがほぼテンプレートになっているので、パターンは真似できます。いま特に手つかずなのは県の農林水産部局が出している農業用ダムのデータです。
- 2公開されている実測データソースを探す
コードを書かなくてもいい仕事です。「この県のこのページに貯水率が載っている」という報告そのものが価値になります。GitHub Issues に書いてもらえれば、実装は私がやります。
- 3ダムの名寄せ精度を上げる
国土数値情報・ダム便覧・各県サイトの間に共通 ID がなく、名前と座標で突き合わせています。(元)(再)付きの再開発ダムや、同名別ダムの誤マッチが残っています。
- 4取り込みの信頼性を上げる
上流のフォーマットは予告なく変わります。壊れたことを検知する仕組み、欠測と外れ値の扱い、リトライまわりの改善。
- 5フロントエンド・可視化
ダム詳細のチャート、地図、統計ページの改善。デザインの提案も歓迎します。
ソフトウェアスタック
Bun のワークスペースによるモノレポです。フロントエンドだけ、取り込みタスクだけ、 という関わり方もできます。
| Bun | >=1.1 (本番は 1.4 固定) | パッケージ管理・実行・テストランナー |
|---|---|---|
| Node.js | >=24 | Next.js のビルド互換用 |
| TypeScript | ^7.0 | 全パッケージ strict モード |
| Biome | ^2.5 | lint + format(ESLint / Prettier は不使用) |
| Next.js | ^16 (App Router) | SSR ページ + REST API ルート |
|---|---|---|
| React | ^19 | UI。ページは原則サーバーコンポーネント |
| Tailwind CSS | ^4.3 | Material Design 3 風のトークンセット |
| Leaflet | ^1.9 | 地図(地理院タイル) |
| NextAuth.js | ^5.0.0-beta | Google サインイン → API キー発行 |
| Zod | ^4.6 | REST API のクエリパラメータ検証 |
| Redoc | ^2.5 | /api/docs の OpenAPI レンダリング |
| PostgreSQL + TimescaleDB | PostgreSQL 18.6 + TimescaleDB 2.30.2 | 観測値は hypertable。obs_daily / obs_monthly の連続集計と圧縮ポリシー付き |
|---|---|---|
| PostGIS | 3.6.4 | 流域ポリゴンの point-in-polygon 検索 |
| postgres.js | ^3.4 | 生 SQL クライアント。ORM は原則使わない |
| Drizzle ORM | ^0.45 | スキーマ定義と型の出どころのみ |
| graphile-worker | ^0.18 | Postgres 上のジョブキュー。cron・リトライ・バックフィルを担当 |
|---|
| k3s | — | 自宅クラスタ(namespace dam)。web は 2 レプリカをノードに分散し PodDisruptionBudget で無停止更新、worker は 1 レプリカ |
|---|---|---|
| Traefik | — | Ingress(k3s 同梱) |
| CloudNativePG | — | PostgreSQL クラスタ dam-pg18 をプライマリ + スタンバイの 2 インスタンスで冗長化。アプリは Service dam-postgres-rw 経由で常に現プライマリへ接続。日次でボリュームスナップショットを取得 |
| GHCR | — | dam-web / dam-worker / dam-postgres(TimescaleDB・PostGIS 入り)のイメージ |
| Cloudflare | — | CDN。デプロイ後にホスト単位でキャッシュをパージ |
| bun test | — | ユニット・結合テスト |
|---|---|---|
| Playwright | ^1.64 | E2E |
| Docker Compose | — | ローカル基盤(db) |
| GitHub Actions | — | CI: typecheck / lint / test。main への push でイメージをビルドし Tailscale 経由で k3s へデプロイ |
| just | — | タスクランナー(justfile) |
just up 一発です。本番の REST API は HAL+JSON で _links を返す HATEOAS 設計になっていて、仕様は /api/docs で公開しています。リポジトリには LLM 向けのオンボーディング文書(AGENTS.md、docs/llm/)が 揃っているので、初日から手は動かせるはずです。条件(先に正直に書きます)
応募・相談は Discord へ
応募も、その前の相談も、窓口は Discord の一本です。 応募フォームもメール窓口もありません。来て、ひとこと声をかけてください。
経歴書は不要です。GitHub アカウントと、興味のある領域(上の「お願いしたいこと」のどれか)だけ 教えてもらえれば十分です。「やれるか分からないので先に話を聞きたい」という段階の相談も歓迎します。
Discord に参加する寄付でも助かります
コードを書く時間はないけれど応援したい、という方は GitHub Sponsors から支援していただけます。 サーバー代・ドメイン・データ取得にかかる実費に充てます。 金額の多寡にかかわらず、継続の後押しになります。
GitHub Sponsors (@matsubo)コントリビューター
このサイトに貢献してくださった方々です。サイトが存続する限り掲載します。
まだ一人もいません。
最初の名前が、ここに入ります。
データだけ使いたい方へ — API は無料で、サインイン後に 600 req/min まで使えます。 API ドキュメントをどうぞ。