rust axumをbaconでlive-reloadする
tags: rust
最近個人的にrustのwebフレームワーク axum を触ってみていて、変更に対してライブリロードしてくれるツールを探したところ cargo-watch が定番のようだったが、アーカイブされていて代わりにbaconを勧めていたので、baconでライブリロードをやろうとしたところ地味にハマったので書く
自分用にaxumのインストールから始めるのでbacon部分だけが知りたい場合は読み飛ばしてください
必要なライブラリのインストール
とりあえずaxumでhello worldが返るAPIを用意する
cargo init .
cargo add axum
cargo add tokio --features macros,rt-multi-thread
ライブラリは用意できたのでsrc/main.rs
にコードを書く
use axum::{routing::get, Router};
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(|| async {"hello world"}));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
実行してhello worldが返ることを確認する
cargo run
# 別ターミナルから
curl http://localhost:3000
hello worldが返ってくるので次にbaconをインストールする
baconの準備
install
cargo install --locked bacon
baconではコマンドをjobと呼んでいてbacon test
などデフォルト設定のままであればインストールが終われば動かせる。が、ここからがハマったところでrun
コマンドをwatchさせる方法がドキュメント上で見つけられず、helpを読むことで実行中にr
を押すかbacon -j run
のように実行するとwatchできる
ただこれだと上記のaxumコードは変更しても検知されず、再ビルドも行われず、helpにも書かれていない?がbaconのデフォルト設定を眺めていると[jobs.run-long]
という定義がありこれを試した所うまく動作した
bacon/defaults/default-bacon.toml at main · Canop/bacon
bacon -j run-long
まとめ
最初動かなくてcargo-watch使うか、自分で設定書いてやるしかない?と思ったけどデフォルトで動いてよかった。
結局未だにrun-long
の説明どこに書いてあったのか見つけられていないので書いていないのであればどこかに書いていてほしい。。