Skip to content
Latchkey

cargo-nextest vs cargo test: Rust のテストランナー

doctest を含むすべてのテストタイプをカバーする、インストール不要の組み込みランナーが欲しいなら cargo test を、より高速な並列実行、テストごとのプロセス分離、リトライ、優れた CI レポートが欲しいなら cargo-nextest を選びましょう。

cargo test は Rust の組み込みテストランナーです。追加ツールなしで、ユニットテスト、統合テスト、ドキュメントテストをコンパイルして実行します。cargo-nextest はテスト実行を再設計したサードパーティのランナーで、分離のために各テストを独自のプロセスで実行し、積極的に並列化し、リトライ、パーティショニング、より明確な出力といった CI に適した機能を追加します。nextest は doctest を実行しないため、両者は補完的です。

cargo-nextestcargo test
インストール別途(cargo install/binstall)Cargo に組み込み
実行テストごとに1プロセスバイナリ内のスレッド
速度大規模スイートでは多くの場合より高速ベースライン
Doctest実行されない(cargo test を使用)対応
CI 機能リトライ、パーティショニング、JUnit 出力基本的な出力
出力簡潔、テストごとのステータス標準的な libtest 出力

それぞれが本当に優れている点

cargo test はセットアップ不要で完全性に優れています。常に利用可能で、doctest を実行できる唯一のものです。cargo-nextest は大規模スイートと CI で優れています。テストごとのプロセス分離により、あるテストが別のテストの状態を汚染するのを防ぎ、うまく並列化し、既知の不安定なテストへの自動リトライ、runner 間でのテストパーティショニング、JUnit XML 出力といった機能が CI を高速化し読みやすくします。

CI での活用

大規模なテストスイートでは、nextest の並列性とパーティショニングによって複数の runner にテストをシャーディングして実時間を短縮でき、その JUnit 出力は CI のテストレポートに組み込めます。一般的なパターンは、ユニット/統合テストには cargo nextest run を、doctest には別途 cargo test --doc を実行し、doctest のカバレッジを失わずに nextest の速度を得ることです。

正直な注意点

nextest はインストールとバージョン固定が必要な追加の依存関係であり、doctest をスキップするため、それらには依然として cargo test が必要です。テストごとのプロセス分離は正確性には優れていますが、プロセス生成のオーバーヘッドがあるため、非常に小さなスイートでは組み込みランナーの方が同じくらい速いかもしれません。ほとんどの大規模プロジェクトでは、nextest の利点がこれを上回ります。

結論

小規模プロジェクトや doctest の実行には cargo test を使いましょう。並列性、分離、リトライ、JUnit レポートが役立つ CI での大規模スイートには cargo-nextest を使い、doctest は別ステップとして残しましょう。

関連ガイド