開発者募集

Dam Data Japan は、全国 2,752 基のダムの諸元と貯水量履歴を集約して無償で公開しているオープンデータ基盤です。 設計から実装、データソースの開拓、サーバー運用まで、現在は一人でやっています。 手が足りないので、一緒に作ってくれる開発者を探しています。

いま一番やってほしいこと

データカバレッジを上げること。実測値が取れているのは 1,033 / 1,050 基(98.4%)で、残り 17 基はまだ取れていません(どの提供元も公開していない、または提供元が値を出していない 1,702 基は分母から除外)。 取得頻度の改善は後回しでよいので、まずは「まだ取れていないダム」を減らしたい。

History

このサイトの経緯

2026-05-01 に最初のコミットを打ちました。「日本のダムのデータを、 一箇所でまとめて、機械可読な形で無償公開する」という一点だけを目的にしています。 国土数値情報のダム諸元とダム便覧をマスタとして取り込み、そこに各地の観測値を 重ねていく、という構成は初日から変えていません。

当初の想定は単純でした。「川の防災情報と水文水質データベースの 2 系統を叩けば全国そろう」。 実際には、全国規模で叩ける情報源は、そこで頭打ちになりました。川の防災情報のダムカタログに載っているのは全国 900 基ほどで、 水文水質データベース由来の諸量データは 2024 年で更新が止まっています。 この 2 つを取り切っても、全体の 3 分の 1 ほどにしかなりません。

残りのダムの値は、都道府県の河川・防災ポータル、地方整備局、企業局、水道局、 オープンデータカタログへとバラバラに公開されていました。フォーマットは HTML テーブル、 Shift_JIS の CSV、独自 JSON とまちまちで、ダムを識別する共通の ID もありません。 結果として、想定していた 2 本のアダプタは 108 本の取り込みタスクになり、cron エントリは 118 行に膨らみました。

それでも全 2,752 基のうち実測値が取れているのは 37.5% です。残りの多くは農業用ダムや小規模ダムで、 そもそも実測値が公開されていないか、公開先をまだ見つけられていません。つまり、100% のカバレッジと高頻度の更新を同時に達成するのは、一人では難しいと分かってきた、という状況です。だから優先順位をつけて、 まずカバレッジを取りにいくことにしました。

Scale

いまの規模

データ側の数字はこのページを開いた時点の本番データベースから直接引いています。 コード側の数字は 2026-09-28 時点の実測値です。

本番データ
ダム
2,752 基
水系
644 水系
観測レコード
6,957,488
2008-01-01 JST 〜 2026-11-13 JST
直近 24 時間の取り込み
31,723
生スナップショット
65,298
取得元のレスポンスを再パース用に保管
稼働中のソース
103 系統
直近 30 日に取り込み実績あり・カバレッジ 98.4%
コードベース
TypeScript
71,141 行
497 ファイル
テストファイル
186 本
bun test + Playwright
取り込みタスク
108 本
ワーカータスク計 126 本
DB テーブル
11 個
+ hypertable 1 / 連続集計 2・マイグレーション 70 本
ルート
22 ページ / 18 API
ワークスペース 11 個
コミット
643
2026-05-01 〜

カバレッジの内訳はソース別・都道府県別に /coverage で公開しています。データソースの一覧と名寄せの仕組みは /sources に。

Work

お願いしたいこと

上から順に、いま効くものです。1 つ目だけでも大歓迎です。

  1. 1
    新しいデータソースのアダプタを書く

    未カバーの県・企業局・土地改良区・電力会社などの公開ページを 1 つ選び、取り込みタスクを 1 本足す。既存タスクがほぼテンプレートになっているので、パターンは真似できます。いま特に手つかずなのは県の農林水産部局が出している農業用ダムのデータです。

  2. 2
    公開されている実測データソースを探す

    コードを書かなくてもいい仕事です。「この県のこのページに貯水率が載っている」という報告そのものが価値になります。GitHub Issues に書いてもらえれば、実装は私がやります。

  3. 3
    ダムの名寄せ精度を上げる

    国土数値情報・ダム便覧・各県サイトの間に共通 ID がなく、名前と座標で突き合わせています。(元)(再)付きの再開発ダムや、同名別ダムの誤マッチが残っています。

  4. 4
    取り込みの信頼性を上げる

    上流のフォーマットは予告なく変わります。壊れたことを検知する仕組み、欠測と外れ値の扱い、リトライまわりの改善。

  5. 5
    フロントエンド・可視化

    ダム詳細のチャート、地図、統計ページの改善。デザインの提案も歓迎します。

Stack

ソフトウェアスタック

Bun のワークスペースによるモノレポです。フロントエンドだけ、取り込みタスクだけ、 という関わり方もできます。

ランタイム・言語
Bun>=1.1 (本番は 1.4 固定)パッケージ管理・実行・テストランナー
Node.js>=24Next.js のビルド互換用
TypeScript^7.0全パッケージ strict モード
Biome^2.5lint + format(ESLint / Prettier は不使用)
Web (apps/web)
Next.js^16 (App Router)SSR ページ + REST API ルート
React^19UI。ページは原則サーバーコンポーネント
Tailwind CSS^4.3Material Design 3 風のトークンセット
Leaflet^1.9地図(地理院タイル)
NextAuth.js^5.0.0-betaGoogle サインイン → API キー発行
Zod^4.6REST API のクエリパラメータ検証
Redoc^2.5/api/docs の OpenAPI レンダリング
データ基盤
PostgreSQL + TimescaleDBPostgreSQL 18.6 + TimescaleDB 2.30.2観測値は hypertable。obs_daily / obs_monthly の連続集計と圧縮ポリシー付き
PostGIS3.6.4流域ポリゴンの point-in-polygon 検索
postgres.js^3.4生 SQL クライアント。ORM は原則使わない
Drizzle ORM^0.45スキーマ定義と型の出どころのみ
ワーカー (apps/worker)
graphile-worker^0.18Postgres 上のジョブキュー。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.64E2E
Docker Compose—ローカル基盤(db)
GitHub Actions—CI: typecheck / lint / test。main への push でイメージをビルドし Tailscale 経由で k3s へデプロイ
just—タスクランナー(justfile)
開発の進め方
テストは先に書きます(bun test / Playwright)。lint と format は Biome、タスクは justfile、ローカル基盤は Docker Compose で just up 一発です。本番の REST API は HAL+JSON で _links を返す HATEOAS 設計になっていて、仕様は /api/docs で公開しています。リポジトリには LLM 向けのオンボーディング文書(AGENTS.md、docs/llm/)が 揃っているので、初日から手は動かせるはずです。
Terms

条件(先に正直に書きます)

金銭的な対価はありません
完全に無償です。 報酬・時給・成果報酬のいずれもお支払いできません。 サイト自体も無料で公開しており、 収益はありません。
GitHub の公開リポジトリです
データパイプラインを誰でも検証・デバッグできるよう、ソースコードを公開しています。 不具合や未対応のデータソースは GitHub Issues に直接書いてください。ノルマや稼働時間の約束はありません。
ライセンスは PolyForm Shield 1.0.0 です
ソースコードは読む・動かす・改変する・デバッグすることは自由ですが、このサービスと 競合するサービスの提供には使えません(OSI 定義のオープンソースではありません)。 コントリビューションは、運営者(matsubo)が将来のライセンスを含め自由に利用・再ライセンスできる形で受け付けます。詳しくは リポジトリの CONTRIBUTING.md を見てください。
お返しできるのは、名前を残すことです
貢献してくださった方は、このページのコントリビューター欄に、このサイトが存続する限り掲載します。ご希望があればリンク先も併記します。
Apply

応募・相談は Discord へ

応募も、その前の相談も、窓口は Discord の一本です。 応募フォームもメール窓口もありません。来て、ひとこと声をかけてください。

経歴書は不要です。GitHub アカウントと、興味のある領域(上の「お願いしたいこと」のどれか)だけ 教えてもらえれば十分です。「やれるか分からないので先に話を聞きたい」という段階の相談も歓迎します。

Discord に参加する
Credits

コントリビューター

このサイトに貢献してくださった方々です。サイトが存続する限り掲載します。

まだ一人もいません。
最初の名前が、ここに入ります。

運営者は @matsubo です。進捗と方針は ロードマップ に、達成状況は カバレッジ に随時反映しています。

データだけ使いたい方へ — API は無料で、サインイン後に 600 req/min まで使えます。 API ドキュメントをどうぞ。