Rust

RustのCargoとテスト

プロジェクト設定、テスト、品質チェックをCargoのコマンドで身につけます。

Rust入門の講座一覧

01

Cargo.tomlで設定する

CargoはRustのプロジェクト、ビルド、依存関係を管理します。プロジェクトを作ると、パッケージ名やEditionなどがCargo.tomlに記録されます。

Cargo.tomlTOML
[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"

[dependencies]
よく使うコマンドCOMMAND
cargo check
cargo run
02

テストを実行する

#[test]を付けた関数はcargo testで実行できます。通常の入力だけでなく、空や境界値もテストしましょう。

テストを書くRUST
fn double(value: i32) -> i32 { value * 2 }

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn double_works() {
        assert_eq!(double(4), 8);
    }
}
実行結果OUTPUT
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
03

clippyとreleaseビルド

cargo clippyは、コンパイルできても改善できる書き方を指摘します。公開用にはcargo build --releaseで最適化したバイナリを作ります。

品質チェックとビルドCOMMAND
cargo fmt
cargo clippy
cargo test
cargo build --release
04

外部クレートを使う

追加ライブラリはcrates.ioで探し、Cargo.tomlの[dependencies]に記載します。ライセンス、更新状況、必要な機能を確認してから導入しましょう。

依存関係の確認Cargo.lockも含めて変更を確認し、不要なクレートを増やさないようにします。
05

トレイトとジェネリクス

トレイトは型が持つ共通の振る舞いを定義し、ジェネリクスは複数の型で使える関数を作ります。T: PartialOrdのようにトレイト境界を付けると、比較できる型だけを受け取れます。

トレイト境界を使うRUST
fn larger<T: PartialOrd>(left: T, right: T) -> T {
    if left > right { left } else { right }
}

fn main() {
    println!("{}", larger(10, 23));
}
実行結果OUTPUT
23
06

練習

これまでの関数に境界値テストを追加し、cargo fmt、cargo clippy、cargo testを順番に実行してみましょう。