日本の山岳一覧・百名山 API を開発しましたCLICK !

Rust | Cargo workspace.dependencies で使用するクレートのバージョンを統一する

Cargo workspace.dependencies
  • URLをコピーしました!

Cargo Workspaces を使うことで、複数のクレートをモノレポ的に管理することができます。

その際、workspace.dependencies を使うことで、使用するクレートのバージョンの一元管理することできます。

目次

workspace.dependencies の活用

ここでは、workspace.dependencies を使い、anyhow のバージョンを統一する設定例を紹介します。C

Cargo Workspaces の構成

Cargo Workspaces を使うと以下のような構成を取ることができます。

sample-app
├── crate-a
│   ├── src
│   │   └── ...
│   └── Cargo.toml
├── crate-b
│   ├── src
│   │   └── ...
│   └── Cargo.toml
└── Cargo.toml

Cargo.toml

プロジェクトのルートディレクトリにある Cargo.toml[workspace.dependencies]anyhow を定義します。

[workspace]
resolver = "2"
members = [ "crate-a", "crate-b" ]

[workspace.dependencies]
anyhow = "1.0.99"

各クレートの Cargo.toml

各クレートの Cargo.toml ではanyhow.workspace = true と記述します。

これで、ルートの Cargo.toml で定義したクレートの情報を参照することができます。

[dependencies]
anyhow.workspace = true

もしくは、 { workspace = true } として記述することができます。

[dependencies]
anyhow = { workspace = true }

The Cargo BookWorkspaces では、以下のようにサンプルが記載されているので、features などの指定がない場合は crate_name.workspace = true の記述方法がベターかなと思います。

記述量も少ないですし…!

# [PROJECT_DIR]/Cargo.toml
[workspace]
members = ["bar"]

[workspace.dependencies]
cc = "1.0.73"
rand = "0.8.5"
regex = { version = "1.6.0", default-features = false, features = ["std"] }
# [PROJECT_DIR]/bar/Cargo.toml
[package]
name = "bar"
version = "0.2.0"

[dependencies]
regex = { workspace = true, features = ["unicode"] }

[build-dependencies]
cc.workspace = true

[dev-dependencies]
rand.workspace = true

まとめ

複数のクレートをモノレポ構成で管理する場合、例に挙げた anyhow や利用頻度の高い serde のようなクレートはバージョンをルートの Cargo.toml で管理できると便利でしょう!

Cargo workspace.dependencies

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!

コメント

コメントする

目次