気象庁の市区町村別警報を監視し、国土交通省の河川カメラについて、現在画像の確認、過去画像の閲覧、MP4/GIFへの変換、複数カメラのZIP書き出しを行うNode.jsアプリケーションです。
Important
本システムは気象庁・国土交通省の公式サービスではなく、避難判断や生命・財産に関わる判断へ単独で使用できません。必ず気象庁、自治体、河川管理者などの最新の公式情報を確認してください。
- 気象庁の大雨・土砂災害関連警報を市区町村別に監視
- 警報状態の変化を30日間ローカル保存
- 都道府県、市区町村から河川カメラを検索
- 現在の河川カメラ画像を確認
- 過去30日以内の画像を指定間隔で確認
- 過去画像をMP4またはGIFへ変換
- 市区町村内または選択した複数カメラを個別に変換し、ZIPで保存
- 生成物へ「提供:国土交通省」と地点情報を表示
- 処理中の画像・動画・ZIPを一時ディレクトリへ置き、処理後に削除
既定のURLは次のとおりです。
http://127.0.0.1:8787/
既定ではローカルホストだけで待ち受けます。本アプリ自体にログイン機能はありません。LANやインターネットへ公開する場合は、セキュリティを必ず確認してください。
- Linux(Ubuntuを主な対象として確認)
- Node.js 20以上
- FFmpeg
libx264、drawtextフィルターが利用できること
- Python 3(ZIP作成に使用)
- インターネット接続
- 動画変換に十分なCPU、メモリ、一時ディスク容量
Ubuntuでの導入例です。
sudo apt update
sudo apt install -y ffmpeg python3
node --version
ffmpeg -version
python3 --versionNode.js 20以上は、利用環境に合う公式またはディストリビューションの手順で導入してください。
git clone https://github.com/aki0429/rivercamdlsystem.git
cd rivercamdlsystem
cp config.example.json config.json
npm run check
npm startこのプロジェクトは実行時の外部npmパッケージに依存していないため、通常はnpm install不要です。
別の設定ファイルを使用する場合は、絶対パスまたは作業ディレクトリからのパスを指定できます。
RECORDER_CONFIG=/path/to/config.json npm startconfig.example.jsonをconfig.jsonへコピーして編集します。config.jsonはGitの追跡対象外です。
| 項目 | 既定値 | 説明 |
|---|---|---|
host |
127.0.0.1 |
待受アドレス。外部公開時以外は変更しないでください |
port |
8787 |
HTTP待受ポート |
mainDirectory |
./Main |
状態・警報ログなどの保存先 |
rivercamBaseUrl |
https://tool.ikunocam.net/rivercam |
カメラインデックス取得元 |
warningPollSeconds |
60 |
気象警報の確認間隔(秒) |
captureConcurrency |
6 |
カメラ情報取得時の最大並列数 |
minimumStartLevel |
3 |
対象地域として記録を開始する内部レベル |
stopBelowLevel |
3 |
対象状態を終了する内部しきい値 |
cameraIndexRefreshHours |
24 |
カメラマスターの更新間隔(時間) |
本アプリは、令和8年5月29日に運用が始まった新たな防災気象情報だけを対象にします。旧警報コードや旧情報名からレベルを推定せず、気象庁R8電文に明記されたレベルを使用します。
| 電文のレベルコード | 大雨 | 土砂災害 |
|---|---|---|
21(レベル2) |
レベル2大雨注意報 | レベル2土砂災害注意報 |
31(レベル3) |
レベル3大雨警報 | レベル3土砂災害警報 |
41(レベル4) |
レベル4大雨危険警報 | レベル4土砂災害危険警報 |
51(レベル5) |
レベル5大雨特別警報 | レベル5土砂災害特別警報 |
判定対象はproperties[].typeが次の要素だけです。
大雨浸水危険度土砂災害危険度
significancyPartを現在発表中の情報レベル、criteriaPeriodを今後の予測レベルとして別々に保存します。情報名とlevelはsignificancyPartだけで決定し、予測値を現在の情報名へ繰り上げません。例えば、現在コード31、今後の時間帯のコード41であれば、表示は「レベル3…警報(現在L3→予測L4)」となります。
「土砂災害警戒情報」は令和8年5月29日に廃止されており、現行名称として使用しません。現行のレベル4情報は「レベル4土砂災害危険警報」です。廃止済み情報を新情報の別名として併記・読み替えせず、旧仕様のコード10、03、33、49や廃止済み名称をレベル判定の代替値として使用しません。雷、濃霧など、上記2種類以外の危険度も本システムの大雨・土砂災害判定には含めません。
詳細はdocs/JMA_R8_WARNING_LEVELS.mdを参照してください。
インストーラーは実行ユーザーとNode.jsのパスを自動または環境変数から取得します。rootユーザーでアプリを実行しません。
sudo env \
RIVERCAM_USER="$USER" \
RIVERCAM_NODE_BIN="$(command -v node)" \
./install-systemd.sh既定のインストール先は/opt/rivercamdlsystem、サービス名はrivercamdlsystem.serviceです。
sudo systemctl status rivercamdlsystem
sudo journalctl -u rivercamdlsystem -f変更できる環境変数:
RIVERCAM_USER:サービス実行ユーザーRIVERCAM_NODE_BIN:Node.js実行ファイルの絶対パスRIVERCAM_INSTALL_DIR:インストール先
手動構成を行う場合はrivercamdlsystem.service.exampleを参考にしてください。
次の実行時データはGitHubへ含めず、.gitignoreで除外しています。
| パス | 内容 |
|---|---|
config.json |
実運用設定 |
Main/status.json |
最新の監視状態 |
Main/warning-log.json |
警報状態の変化(30日間) |
Main/index.json |
生成インデックス |
cache/camera-master.json |
カメラ情報キャッシュ |
| OSの一時ディレクトリ | 変換中のフレーム、MP4/GIF、ZIP |
カメラ画像はプロジェクト内へ恒久保存しない設計ですが、処理中はOSの一時領域に保存されます。異常終了時には一時ファイルが残る可能性があるため、運用者が定期的に確認してください。
| メソッド | パス | 内容 |
|---|---|---|
GET |
/api/cameras |
利用可能なカメラ一覧 |
GET |
/api/warnings |
保存された警報変化ログ |
GET |
/api/current/:cameraId |
現在画像のプロキシ |
GET |
/api/history/image |
指定時刻の過去画像 |
POST |
/api/history/check |
過去画像の存在確認 |
POST |
/api/history/export |
単一カメラのMP4/GIF書き出し |
POST |
/api/municipality/zip |
市区町村のカメラを変換するジョブ作成 |
POST |
/api/cameras/zip |
選択カメラを変換するジョブ作成 |
GET |
/api/export-jobs/:id |
変換ジョブの状態 |
GET |
/api/export-jobs/:id/download |
完成したZIPの取得 |
APIは互換性を保証した公開APIではなく、Web画面用の内部インターフェースです。
本アプリには認証、利用者ごとの権限、レート制限がありません。動画変換APIはCPU、帯域、一時ディスクを多く消費する可能性があります。
- 既定の
host: "127.0.0.1"を維持する - インターネットへ直接公開しない
- 外部利用が必要なら、認証・TLS・リクエスト上限・レート制限を持つリバースプロキシの内側へ置く
config.json、Main/、cache/を公開ディレクトリへ置かない- 定期的にNode.js、FFmpeg、OSを更新する
詳細と脆弱性の連絡方法はSECURITY.mdを参照してください。
本リポジトリのMIT Licenseは、本リポジトリ独自のソースコードに適用されます。外部から取得する気象情報、河川カメラ画像、カメラ情報には適用されません。
取得・表示・保存・加工・再配布を行う前に、各提供元の最新の利用条件を確認してください。生成物に含まれる「提供:国土交通省」の表示を削除しないでください。
第三者フォントなどの詳細はTHIRD_PARTY_NOTICES.mdを参照してください。
独自ソースコードはMIT Licenseで公開しています。
- 商用・非商用を問わず利用可能
- 改変、複製、再配布、派生版の公開が可能
- 再配布時は著作権表示とMITライセンス全文を残す必要があります
- 無保証です
クレジット表記例:
Based on RiverCam DL System
Copyright (c) 2026 aki0429
https://github.com/aki0429/rivercamdlsystem
Licensed under the MIT License
法的に必要な条件と表示例はATTRIBUTION.mdにまとめています。画面へのクレジット表示は推奨ですが、MIT License上の必須条件は、ソフトウェアのコピーまたは主要部分へ著作権表示と許諾文を含めることです。
本ソフトウェアは無保証で提供されます。取得情報の正確性、完全性、即時性、継続提供、特定目的への適合性を保証しません。本ソフトウェアの利用、誤作動、停止、取得漏れ、第三者サービスの変更、または生成物の利用によって生じた損害について、作者はMIT Licenseで認められる範囲において責任を負いません。
CHANGELOG.md— バージョンごとの変更履歴ATTRIBUTION.md— クレジットと派生版での表示方法THIRD_PARTY_NOTICES.md— 外部データ・第三者ライセンスSECURITY.md— 安全な運用と脆弱性報告CONTRIBUTING.md— Issue・Pull Requestの方針docs/ARCHITECTURE.md— 構成とデータフローdocs/JMA_R8_WARNING_LEVELS.md— 令和8年新体系の判定仕様