crates.ioからパッケージを追加する

crates.ioはCargoパッケージマネージャがデフォルトで使用するパッケージレジストリです。ここで公開されているライブラリをRustプロジェクトに追加する方法を手順を追って説明します。

Cargoパッケージマネージャ全般に関する説明についてはこちらをご覧ください。

  1. crates.ioで追加したいパッケージのページ (e.g., libc, rand, blake2) を開きます。

  2. Install セクションの下にある blake2 = "0.10.2" のようなテキストをコピーします。

../../_images/crates-io-crate.png

Note

この画像で例として示している blake2 はBLAKE2ハッシュ関数の実装を提供するパッケージです。BLAKE2はソフトウェア実装に最適なセキュアなハッシュ関数で、Linuxカーネルなどで使用されています。


  1. プロジェクトの Cargo.toml ファイルを開き、コピーしたテキストを [dependencies] セクションの中に貼り付けます。

../../_images/crates-io-cargo-toml.png

  1. これで追加されたパッケージが使用できるようになります。通常はCargoパッケージ名がそのままRustクレート名になります1。(root_taskRustタスクを追加する で追加した関数です。)

src/lib.rs: blake2の使用例
#[no_mangle]
extern "C" fn root_task(_: usize) {
    use blake2::{Blake2s256, Digest};

    let result = {
        let mut hasher = Blake2s256::new();
        hasher.update(b"hello world");
        hasher.finalize()
    };

    println!("hash = {:02x?}", result);
}
出力
hash = [9a, ec, 68, 06, 79, 45, 61, 10, 7e, 59, 4b, 1f, 6a, 8a, 6b, 0c, 92, a0, cb, a9, ac, f5, e5, e9, 3c, ca, 06, f7, 81, 81, 3b, 0b]

Note

blake2は最適化レベル0ではスタックを異常に消費するようです。次の記述 (The Cargo Book) を Cargo.toml ファイルに追加し、デバッグビルドの最適化レベルをオーバライドすることを推奨します。

[profile.dev.package]
blake2 = { opt-level = 1 }
1

ハイフンは識別子として無効なのためアンダースコアで置き換えられます (e.g., unicode-xidunicode_xid)。


さらに詳しく