【Rust】Cargo チートシート

Cargo は Rust のビルドシステム兼パッケージマネージャ

バージョン確認

cargo --version

コマンドのヘルプは以下で確認できる

cargo help <subcommand>

Cargo のアップデートは rustup でRustツールチェーン自体をアップデートする

rustup update

cargo new

新しいプロジェクトを作成

cargo new hello_world
cd hello_world

ディレクトリが既に存在する場合は cargo init を利用する

  • --lib ライブラリクレート用のプロジェクトとなり src/lib.rs が生成される
  • --vcs none git リポジトリの生成が不要な場合

cargo init

現在ディレクトリにプロジェクトを作成

mkdir my_project
cd my_project
cargo init

プロジェクトレイアウト

.
├── Cargo.lock
├── Cargo.toml
├── src/
│   ├── lib.rs
│   ├── main.rs
│   └── bin/
│       ├── named-executable.rs
│       ├── another-executable.rs
│       └── multi-file-executable/
│           ├── main.rs
│           └── some_module.rs
├── benches/                     ベンチマーク
│   ├── large-input.rs
│   └── multi-file-bench/
│       ├── main.rs
│       └── bench_module.rs
├── examples/
│   ├── simple.rs
│   └── multi-file-example/
│       ├── main.rs
│       └── ex_module.rs
└── tests/                         結合テスト
    ├── some-integration-tests.rs
    └── multi-file-test/
        ├── main.rs
        └── test_module.rs

cargo build

プロジェクトをビルドする

cargo build

実行ファイルは target/debug に生成される

リリース向けビルドは --release を付与

cargo build --release

リリース向けの実行ファイルが target/release に生成される

cargo run

プロジェクトのビルドと実行を1ステップで行う

cargo run

cargo check

実行ファイルは生成せずに、コードがコンパイルできるかをチェックする

cargo check

cargo test

ユニットテストとパッケージのインテグレーションテストを実行

cargo test

テストのオプションは以下で確認できる

cargo test -- --help

以下のようなテストがあった場合、

#[cfg(test)]
mod tests {

  #[test]
  fn add_two_and_two() { ... }
    
  #[test]
  fn add_three_and_two() { ... }

  #[test]
  fn one_hundred() { ... }
}

関数名を指定して特定のテストだけを実行できる

cargo test one_hundred

以下のようにすると、add から始まる2つのテストが実行される

cargo test add

cargo fix

コンパイラ警告を自動修正する

cargo fix

cargo doc

パッケージのドキュメントを生成

cargo doc --open

ドキュメントは target/doc に生成される。オプション --open でブラウザ起動

cargo clean

生成された成果物を削除

cargo clean

crates.io からパッケージを検索。例えば serde を検索時は以下

 cargo search image

cargo add

Cargo.toml に依存を追加する(Cargo.toml を直接修正しても良い)。例えば regex を追加時は以下

cargo add regex

削除時は以下

cargo remove regex

cargo update

Cargo.lock に記録されたバージョンを更新

cargo update

cargo tree

依存グラフを表示

cargo tree

cargo install / uninstall

バイナリクレートをローカルにインストールする(他人が crates.io に共有したツールを利用する便利な方法を提供する)。 例えば、ripgrep ツールをインストールするには以下

$ cargo install ripgrep

$HOME/.cargo/bin にインストールされる

アンインストールするには以下

cargo uninstall ripgrep

Cargo では、$PATHにあるバイナリが cargo-somethingという名前の場合、cargo something として Cargo のサブコマンドであるかのように実行できる。 つまり、cargo installを使用して拡張をインストールし、組み込みの Cargo コマンドのように実行できる。

このような独自のコマンドは、 cargo --list で列挙できる。

cargo publish

crates.ioのアカウントを作成し、 https://crates.io/me/でAPIトークンを取得し、APIキーを以下で保存する

cargo login <APIキー>

これによりAPIトークンが ~/.cargo/credentials に保存される。これを削除するには cargo logout を実行

Cargo.toml に必要なメタデータを定義後、以下でアップロード公開

cargo publish