Cargoとは?Rustのビルドツール兼パッケージマネージャー
CargoはRust公式のbuildツール兼パッケージマネージャーです。コードをコンパイルし、依存関係 (crate) を解決し、testを実行し、プロジェクトを1つのコマンドから管理します。
CargoはすべてのRust開発者が日々使うツールです。build、依存関係の解決、test、公開を担い、単一のCargo.tomlマニフェストを読みます。crates.io registryとの緊密な統合により、Rustの依存関係まわりの体験は際立って快適です。
Cargoとは
CargoはRustツールチェーンに同梱される公式のbuildシステム兼パッケージマネージャーです。Cargo.toml (マニフェスト) とCargo.lock (固定された依存関係グラフ) を読み、crateと呼ばれる依存関係をcrates.ioからダウンロードし、それらをコンパイルし、build、test、runのサイクル全体を統括します。
仕組み
依存関係はCargo.tomlで宣言し、Cargoは互換性のあるバージョンを解決して正確なセットをCargo.lockに記録します。「cargo build」はcrateとその依存関係をコンパイルし、コンパイル済みの成果物をtarget/にcacheするため、変更のないコードは再コンパイルされません。「cargo test」はtestをbuildして実行し、「cargo run」はbuildして実行します。
使用例
日常的なコマンドがワークフローの大半をカバーします。
# build in release mode
cargo build --release
# run the test suite
cargo test
# check without producing a binary (fast)
cargo checkCI/CDでの役割
pipelineでは、「cargo build」と「cargo test」がプロジェクトをコンパイルして検証します。RustのコンパイルはCPU負荷が高いため、registry、gitの依存関係cache、target/ディレクトリを実行間でcacheすることが、すべてを再コンパイルしないために不可欠です。これらのbuildは遅いため、温まったCargoのcacheとregistryの一時的な失敗に対する自動リトライを備えた、より高速なマネージドrunnerがCI時間を大きく削減します。
代替ツール
CargoにはRustの世界で本当の直接の競合はなく、標準です。多数のcrateにまたがるworkspaceレベルの統括のために、チームは時折cargo-makeやJustのようなツールを上に重ね、Bazelは大規模な多言語monorepoでRustをbuildできますが、Cargoは依然として土台であり続けます。
重要なポイント
- CargoはRust公式のbuildツール兼パッケージマネージャーです。
- Cargo.tomlは依存関係を宣言し、Cargo.lockは正確なグラフを固定します。
- CIではregistryとtarget/ディレクトリをcacheし、すべてを再コンパイルしないようにします。