TL;DR
- Rust には、標準の cargo サブコマンドに加えて、多くのサードパーティ製ツールがある。ツールの一覧はすぐ古くなるので、使えるツールを自分で探す。
- 何度も使うツールは CI に組み込み、速くて誤検知のないツールは IDE に組み込む。
内容
標準の cargo サブコマンド
cargo には、次のような標準のサブコマンドもある。
cargo check: 機械語を生成せず、コンパイルのチェックだけを行う。速い構文チェックとして便利であるcargo doc: ドキュメントを生成する(項目27)cargo bench: ベンチマークを実行する(項目30)cargo update: 依存クレートを、セマンティックバージョニングで互換性のある最新のバージョンに更新するcargo tree: 依存グラフを表示するcargo metadata: ワークスペースのパッケージと依存クレートのメタデータを取得する。メタデータの型は cargo_metadata クレートが提供している
サードパーティの cargo ツール
cargo-udeps や cargo-deny は、cargo metadata で取得したメタデータを使っている。ほかに、抽象構文木を使う cargo ツールもある。こうしたツールの多くは syn クレートに依存している。syn は主に手続き的マクロで使われるが、それ以外の用途にも使える API を含んでいる。例として、cargo-expand や、コードカバレッジの生成と管理を支援する cargo-tarpaulin がある。
ブログなどにまとめられたツールの一覧は主観的で、すぐに古くなる。使えるツールは自分で探すのがよい。cargo-<something> という名前で検索すれば多くのツールが見つかるが、メンテナンスされていないものもあるので吟味する。
Rust に形式的検証を適用する取り組みも行われている(Rust verification tools (2021))。
ツールを組み込む
何度も使うツールは、CI に組み込む(項目32)。速くて誤検知を出さないツールは、IDE に組み込む(Rust の公式ツール一覧)。
覚えておくべきツール
- Miri: unsafe を使ったときに、コンパイラが検出できないエラーを検出する(項目16)
- Dependabot: 依存クレートの更新を管理する(項目21、項目25)
- cargo-semver-checks: SemVer が正しく付けられているかを確かめる(項目21)
- Godbolt compiler explorer: Rust のコードから生成される機械語を確かめる
- cargo-fuzz: ファズテストを行う
- criterion:
cargo benchより詳しくデータを分析できるベンチマークツール(項目30) - bindgen: C のコードから Rust の FFI ラッパを自動で生成する(項目35)
キーワード
- Cargo
- cargo-udeps
- cargo-deny
- cargo-expand
- cargo-semver-checks
- cargo-fuzz
- Miri
- Dependabot
- Godbolt compiler explorer
- criterion
- bindgen
- 手続き的マクロ
- 形式的検証
自分の理解
この項目では、自分があまり使ったことのなかった標準の cargo サブコマンドを中心に整理した。
形式的検証は、コードの正しさについてより高いレベルの保証が必要な場合に役立つのかもしれない。