10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cargo addでパッケージを追加しよう

Cargoの役割の一つに依存関係の管理があります。誰か(自分でも良い)が作ったRustのコードを自分のプロジェクトでも使いたいときに「このプロジェクトはこのコードを利用します(=依存します)」という関係を依存関係と呼びます。

Rustでは、外部から利用できるようにビルドされたものを「パッケージ」と呼びます。他のパッケージを利用したい場合は、以下のコマンドを実行して追加します。

cargo add <パッケージ名>

例えば、乱数を扱うときに便利なrandというパッケージがあります。これを利用したい場合は、以下のコマンドを実行します。

cargo add rand

実行すると、プロジェクト内のCargo.toml[dependencies]にその依存関係が自動的に追加されます。

Cargo.toml
rand = "0.8.5"

cargo addを使うと、

  • パッケージのインストール
  • Cargo.tomlへの追記

の両方を同時に実行できます。
先にCargo.tomlへ手動で追記しておくことも可能で、その場合はcargo buildなどのコンパイル時に自動でインストールされます。

このあたりは、Node.jsでいうnpm installpackage.jsonの関係に似ていますね。

パッケージを使ってみる

追加したパッケージは、<パッケージ名>::<使いたい関数など>のようにアクセスします。

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let random_number: u8 = rng.gen_range(1..=100);
    println!("ランダムな数: {}", random_number);
}

パッケージの実体はどこにあるのか?

Rustのプロジェクトで依存パッケージを追加すると、そのパッケージの実体はどこに保存されるのでしょうか?

Rustでは、外部パッケージは通常、プロジェクトのディレクトリ内ではなく、グローバルなキャッシュに保存されます。依存パッケージの実体は、以下の場所に保存されます。

  • ~/.cargo/registry(Linux/macOSの場合)
  • C:\Users\<ユーザー名>\.cargo\registry(Windowsの場合)

これらのディレクトリには、Cargo.tomlで指定されたパッケージのソースコードが格納されており、依存関係が解決されると、Cargoが必要なパッケージをここから取り出してビルドします。

プロジェクトのディレクトリではなく、グローバルなキャッシュの領域にパッケージをダウンロードしておくことで、効率かつ高速な依存関係の解決が可能です。

ここはNode.jsのモジュールシステムに無い利点(というかNode.jsのほうが欠点が多い)ですね。
筆者はちょっとしか触っていませんが、Go言語もこっちの思想を持っている認識です。
余談ですがNode.jsに代わるJSランタイムであるDenoもこちらの方式を採用しています。

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?