はじめに
弊社では業務でActix Webを使用してバックエンドの開発を行っています。
普段は以前書いた「actix-webのホットリロードされるDocker開発環境を作る」という記事のように cargo watch
を使用してホットリロードされる開発環境を作って開発をしているのですが、ホッとリロードされるとは言え毎度のビルドにはそこそこの時間がかかり、地味なストレスになっています。
そんな折、「moldを使うとRustのビルドが速くなる」という記事を拝読してmoldというリンカーを知ったので早速試してみたいと思います。
本題
前述の自筆の記事では docker-compose.yml
で
/bin/sh -c "cargo watch -x run"
というコマンドを渡すことでホットリロードする開発環境を作成してました。
重要なのは cargo watch -x run
の部分ですが、moldをインストールした上でこれを
cargo watch -s 'mold -run cargo run'
のように変更することでmoldを使用したホットリロードする開発環境にすることが出来ます。
手元の簡単なActix Webのプログラムで cargo watch -x run
と cargo watch -s 'mold -run cargo run'
の実行速度を比較した結果は以下の通りです。
cargo watch -x run
$ cargo watch -x run
[Running 'cargo run']
Finished dev [unoptimized + debuginfo] target(s) in 0.05s
Running `target/debug/actix-web-example`
[Running 'cargo run']
Compiling actix-web-example v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 4.35s
Running `target/debug/actix-web-example`
cargo watch -s 'mold -run cargo run'
$ cargo watch -s 'mold -run cargo run'
[Running 'mold -run cargo run']
Finished dev [unoptimized + debuginfo] target(s) in 0.05s
Running `target/debug/actix-web-example`
[Running 'mold -run cargo run']
Compiling actix-web-example v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 1.72s
Running `target/debug/actix-web-example`
4.35 / 1.72 ≒ 2.5 くらいで、3倍とまでは言わないですが非常に効果は大きそうです。
余談
最近は docker-compose.yml
には以下のようなコマンドを与えていて、編集すると同時にフォーマットが行われるようにしています。自動生成のコードもすぐにフォーマットされるので個人的にはなかなか便利で良いと感じています。
cargo watch -x fmt -x run
これをmoldに対応すると
cargo watch -x fmt -s 'mold -run cargo run'
となります。
まとめ
moldは非常に簡単に導入することができ、確実に開発体験を良くしてくれそうでした。
早速プロジェクトの開発環境も改善したいと思います。