Rustで数値計算
水深・流速・ハイドログラフの計算はRustのCLIが担当します。FastAPI側では重い計算を行わず、JSONの受け渡しに徹します。
Overview
このデモでは、FastAPIがHTTPリクエストを受け取り、入力JSONをRust CLIへ標準入力で渡します。 Rust側は簡易2次元河川不定流計算を実行し、ハイドログラフ、水深分布、流速分布をJSONで返します。 Python側を薄く保つことで、Web APIとして扱いやすくしながら、計算部をRustで高速化・単体テスト化しやすくします。
水深・流速・ハイドログラフの計算はRustのCLIが担当します。FastAPI側では重い計算を行わず、JSONの受け渡しに徹します。
ブラウザ、curl、JavaScriptフロントエンドからPOSTできるようにし、社内ツールやデモサイトから同じ計算エンジンを呼び出せます。
RustをビルドするAPIコンテナと、デモサイトを配信するNginxコンテナをComposeでまとめて起動できます。
River 2D Model
サンプル計算では、矩形格子上に河道・堤防・簡易破堤部を作り、上流端から時間変化する流入ハイドログラフを与えます。 セル間の水面勾配とManning式からフラックスを求め、水深を時間更新する簡略モデルです。
厳密な実務ソルバーではありません。API化の考え方、Rust連携、入出力JSON、可視化結果の確認を目的にしたデモです。
Input
Output
Demo Result Figures
APIレスポンスに含まれるハイドログラフ、水深、流速、地形・水面情報を、デモサイト掲載用に図化したものです。 実運用では、このJSONをフロントエンド側で可視化する構成にできます。
Request JSON
POST /api/river2d/run に送るJSON例です。
Response JSON
実際のAPIでは2次元配列の水深・流速マップも返します。ここではページ表示用に要約しています。
Run
Rust計算エンジンをビルドしてから、FastAPIを起動します。 Docker Composeを使う場合は、Rustビルド、FastAPI起動、静的デモサイト配信、NginxからAPIへのプロキシをまとめて起動できます。
# プロジェクト直下で実行
cp .env.example .env # 任意。ポート変更しない場合は省略可
docker compose up --build # デモサイト
http://localhost:8080/software/fastapi-demo/
# FastAPI Swagger UI
http://localhost:8080/docs
# FastAPIへ直接アクセス
http://localhost:8000/ curl -X POST http://localhost:8080/api/river2d/run \
-H "Content-Type: application/json" \
--data-binary @public/demo-data/fastapi-rust/data/sample_request.json docker compose down
# イメージも削除する場合
docker compose down --rmi local Source Sample
FastAPIはAPIとブラウザ確認画面、Rustは2次元不定流の簡易計算を担当します。 Docker Compose設定、Nginxプロキシ設定、疎通確認スクリプトも同梱しています。
References
このデモはFastAPIをAPI層、Rustを計算コアとして分ける構成です。実装時はFastAPIのOpenAPI自動生成、Rust / Cargoのビルド・ドキュメント、Docker Composeの運用方法を確認します。
Note
このデモは「FastAPIで受け渡し、Rustで計算する」構成を説明するための簡易モデルです。 実務の河川不定流解析として使う場合は、境界条件、CFL条件、ウェット・ドライ処理、地形補正、 河道・堤防データの取り込み、観測水位・流量による検証、保存則の厳密性を追加検討してください。