LoginSignup
15
4

More than 1 year has passed since last update.

moldとcargo watchを併用してより快適な開発環境を作る

Last updated at Posted at 2021-12-20

はじめに

弊社では業務で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 runcargo 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は非常に簡単に導入することができ、確実に開発体験を良くしてくれそうでした。
早速プロジェクトの開発環境も改善したいと思います。

15
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
4