## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 依存関係

ほとんどのプログラムはライブラリに依存関係を持ちます。もし依存関係を手動で管理したことがあれば、それがどれだけ苦痛であるか分かるでしょう。幸運なことに、Rustのエコシステムには`cargo`が標準装備されています！`cargo`によってプロジェクトの依存関係を管理することができます。

Rustのプロジェクトを新しく作るには下記のようにします。

    # バイナリ
    cargo new foo

    # ライブラリ
    cargo new --lib bar

この章の残りでは、ライブラリではなくバイナリを作ることを想定しますが、コンセプトはすべて同じです。

上のコマンドを実行すると、次のようなファイル階層ができます。

    .
    ├── bar
    │   ├── Cargo.toml
    │   └── src
    │       └── lib.rs
    └── foo
        ├── Cargo.toml
        └── src
            └── main.rs

`main.rs`がこの新規プロジェクト `foo` のルートのソースファイルです。なにも新しいことはありませんね。`Cargo.toml`はこのプロジェクトの`cargo`の設定ファイルです。中を見てみるとこのようになっています。

    [package]
    name = "foo"
    version = "0.1.0"
    authors = ["mark"]

    [dependencies]

`[package]`の下の`name`フィールドがプロジェクトの名前を決定します。これはクレートを公開するときに`crates.io`によって使われます（詳細は後述）。またコンパイルしたときの出力ファイルの名前でもあります。

`version`フィールドはクレートのバージョン番号で、セマンティックバージョニングを使っています。

`authors`フィールドは作者のリストで、クレートを公開するときに使われます。

`[dependencies]`セクションにはプロジェクトの依存関係を追加できます。

例えば、プログラムに素晴らしいCLIが欲しいとします。crates.io（Rustの公式パッケージレジストリ）には素晴らしいパッケージがたくさんあります。よくある選択肢の1つはclapです。この記事を書いている時点での`clap`の最新の公開バージョンは`2.27.1`です。依存関係をプログラムに追加するには、`Cargo.toml`の`[dependencies]`の下に`clap = "2.27.1"`と単に書き加えます。これだけです！`clap`をプログラム内で使用できます。

`cargo`は他の形式の依存関係もサポートしています。その一部を示します。

    [package]
    name = "foo"
    version = "0.1.0"
    authors = ["mark"]

    [dependencies]
    clap = "2.27.1" # from crates.io
    rand = { git = "https://github.com/rust-lang-nursery/rand" } # from online repo
    bar = { path = "../bar" } # from a path in the local filesystem

`cargo`は依存管理ツール以上のこともできます。`Cargo.toml`のformat specificationに全ての設定オプションがリストアップされています。

プロジェクトをビルドするには、プロジェクトディレクトリのどこか（サブディレクトでも！）で`cargo build`を実行します。また`cargo run`でビルドと実行をできます。これらのコマンドは、全ての依存関係の解決、必要なクレートのダウンロード、自分のクレートを含む全てのビルドを行うことに注意してください。（`make`と同様、まだビルドしていないものだけをビルドします。）

Voila！これで完成です！