Skip to content

Repository files navigation

RiverCam DL System

License: MIT Node.js 20+

気象庁の市区町村別警報を監視し、国土交通省の河川カメラについて、現在画像の確認、過去画像の閲覧、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
    • libx264drawtextフィルターが利用できること
  • Python 3(ZIP作成に使用)
  • インターネット接続
  • 動画変換に十分なCPU、メモリ、一時ディスク容量

Ubuntuでの導入例です。

sudo apt update
sudo apt install -y ffmpeg python3
node --version
ffmpeg -version
python3 --version

Node.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 start

設定

config.example.jsonconfig.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年(2026年)新体系の警報レベル

本アプリは、令和8年5月29日に運用が始まった新たな防災気象情報だけを対象にします。旧警報コードや旧情報名からレベルを推定せず、気象庁R8電文に明記されたレベルを使用します。

電文のレベルコード 大雨 土砂災害
21(レベル2) レベル2大雨注意報 レベル2土砂災害注意報
31(レベル3) レベル3大雨警報 レベル3土砂災害警報
41(レベル4) レベル4大雨危険警報 レベル4土砂災害危険警報
51(レベル5) レベル5大雨特別警報 レベル5土砂災害特別警報

判定対象はproperties[].typeが次の要素だけです。

  • 大雨浸水危険度
  • 土砂災害危険度

significancyPartを現在発表中の情報レベル、criteriaPeriodを今後の予測レベルとして別々に保存します。情報名とlevelsignificancyPartだけで決定し、予測値を現在の情報名へ繰り上げません。例えば、現在コード31、今後の時間帯のコード41であれば、表示は「レベル3…警報(現在L3→予測L4)」となります。

「土砂災害警戒情報」は令和8年5月29日に廃止されており、現行名称として使用しません。現行のレベル4情報は「レベル4土砂災害危険警報」です。廃止済み情報を新情報の別名として併記・読み替えせず、旧仕様のコード10033349や廃止済み名称をレベル判定の代替値として使用しません。雷、濃霧など、上記2種類以外の危険度も本システムの大雨・土砂災害判定には含めません。

詳細はdocs/JMA_R8_WARNING_LEVELS.mdを参照してください。

systemdで常駐させる

インストーラーは実行ユーザーと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の一時領域に保存されます。異常終了時には一時ファイルが残る可能性があるため、運用者が定期的に確認してください。

HTTP API概要

メソッド パス 内容
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.jsonMain/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で認められる範囲において責任を負いません。

ドキュメント

About

気象庁の警報ログと国土交通省の河川カメラ履歴を閲覧・MP4/GIF/ZIP出力するNode.jsシステム

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages