S-JIS[2025-03-15] 変更履歴

Cargo.tomlメモ

RustのCargo.tomlのメモ。


概要

Cargo.tomlはRustアプリケーションの設定を記述するファイル。


[lib]

ライブラリーターゲット(ビルドしたときに何が生成されるか)の設定。

crate-type

crate-type 説明
lib 通常のRustライブラリー。
cdylib 他言語から呼ぶためのシステムライブラリーのファイル(Unixの*.so、Windowsの*.dll)を生成する。

Cargo.tomlの例:

[lib]
crate-type = ["cdylib"]

[dependencies]

依存ライブラリー(クレート)の設定。


通常は「クレート名 = "バージョン"」という書き方をすることが多い。
これは「クレート名 = { version = "バージョン" }」と同じ。

Cargo.tomlの例:

[dependencies]
log = "0.4.26"

cargo addコマンドを使うと、指定したクレートの最新バージョンを(crates.ioから)見つけ、自動的にCargo.tomlに追加してくれる。


path

ローカルのクレートを使用したい場合は、pathで指定する。

Cargo.tomlの例:

[dependencies]
my_crate = { path = "../my_crate_dir" }

patch.crates-io


features

対象クレートにいくつかのフィーチャー(機能)があってデフォルトでは無効になっている場合は、使いたいフィーチャーを指定する。

Cargo.tomlの例:

[dependencies]
tokio = { version = "1.42.0", features = ["rt-multi-thread", "io-util", "net", "sync", "time"] }

デフォルトのフィーチャーを無効にしたい場合は「default-features = false」を加える。

Cargo.tomlの例:

[dependencies]
tokio = { version = "1.42.0", default-features = false, features = ["rt-multi-thread", "io-util", "net", "sync", "time"] }

[patch]

依存関係(dependencies)を上書きする。

例えば以下のように書くと、リリースされるときには指定されたバージョンのクレートが使われ、開発時はpathで指定した場所のクレートが使われる。

Cargo.tomlの例:

[dependencies]
my_crate = "0.1.0"

[patch.crates-io]
my_crate = { path = "../my_crate_dir" }

[features]

条件付きコンパイル。
指定されたフィーチャーのときだけ使用するライブラリー(クレート)の設定。


フィーチャーが指定されたときだけ使用したいライブラリー(クレート)は、dependenciesで「optional = true」にする。
そして、featuresで機能名を付ける。(下記の例だとwith_bigdecimalやwith_rust_decimal)

defaultという名前は特別で、使う側が何のフィーチャーも指定しなかったときのデフォルトとして使われる。

Cargo.tomlの例:

[dependencies]
bigdecimal = { version = "0.4.7", optional = true }
rust_decimal = { version = "1.36.0", optional = true }

[features]
default = ["with_bigdecimal", "with_rust_decimal"]

with_bigdecimal = ["bigdecimal"]
with_rust_decimal = ["rust_decimal"]

ソースコード上で機能に応じたコーディングをするにはcfg属性を使用する。

#[cfg(feature = "with_bigdecimal")]
fn example() {
    use bigdecimal::*;

    let value = BigDecimal::from_i32(123).unwrap();
    println!("{}", value);
}

ビルドするときは--featuresで機能名を指定する。

cargo build --features with_bigdecimal

このクレートを使う側は、dependenciesのfeaturesで機能名を指定する。

使う側のCargo.tomlの例:

[dependencies]
tsubakuro-rust-core = { version = "0.1.0", default-features = false, features = ["with_bigdecimal"] }

Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま