Cargoについて
Rustのビルドシステムとパッケージマネージャーである
以下のことに関して管理をする
- コードの構築
- コードが依存するライブラリのダウンロード
- それらのライブラリの構築
Cargoを使うことで依存関係を考えなくてもよくなる
使い方
新しいプロジェクトを作成
cargo new {project name} --bin
-
cargo build
実行
cargo run
Cargoに変換する
以下の3つのことを行う
- ソースファイルを正しいディレクトリに配置する
- 古い実行ファイルを削除する
- Cargo設定ファイルを作成する
ソースディレクトリの作成と古い実行ファイルの削除
例)次のような構造の場合
~/projects/hello_world$ ls
main main.rs
src
というディレクトリを作成して、main.rs
をsrc
に移動する
~/projects/hello_world$ cargo build mkdir src ~/projects/hello_world$ mv main.rs src/main.rs ~/projects/hello_world$ rm main
これによって、プロジェクトのルートディレクトリ(この場合hello_world)にはREADMEやライセンス情報などのソースコードに関係のないものが残る
Cargoを使用することで、プロジェクトをきれいに整えておくことができる
設定ファイルの作成
プロジェクトのルートディレクトリ(hello_world
)の中にCargo.toml
という名前のファイルを作成する
- 設定ファイルの
Cargo.toml
のC
は大文字にすること - TOML形式のファイルで記述すること
以下の内容を書き込む
[package] name = "hello_world" version = "0.0.1" authors = [ "tamago324 <you@example.com>" ]
最初の行の[package]はパッケージを構成していることを示している
ほかの3行はCargoがプログラムをコンパイルするために知っておくべき項目
- 名前
- バージョン
- 書いた人
Cargoプロジェクトの構築と実行
Cargo.tomlをプロジェクトのルートディレクトリに置いたことにより、HelloWorldプログラムをビルドして実行する準備はできている
次のコマンドで、ビルドと実行を行う
~/projects/hello_world$ cargo build Compiling hello_world v0.0.1 (file:///home/ubuntu/projects/hello_world) Finished dev [unoptimized + debuginfo] target(s) in 0.30 secs ~/projects/hello_world$ ./target/debug/hello_world
cargo build
でプロジェクトを作成し、./target/debug/hello_world
で実行したが、run
コマンドを使うことでもっと簡単に実行することができる。
~/projects/hello_world$ cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs Running `target/debug/hello_world` Hello, world!
もし、ソースコードを変更していた時のみ、再度コンパイルしてから実行する
~/projects/hello_world$ cargo run Compiling hello_world v0.0.1 (file:///home/ubuntu/projects/hello_world) Finished dev [unoptimized + debuginfo] target(s) in 0.31 secs Running `target/debug/hello_world` Hello, world!!
Cargoはrustc
を使用するだけの簡単なプロジェクトでは大したことはないが、Cargoは常に使うべき。ほかのプログラミング言語のライブラリやパッケージと同じような使い方ができる。
リリースのための構築
リリースの準備が整ったらcargo build -release
でプロジェクトを最適化してコンパイルできる。これによりRustのコードは早く実行できるが、プログラムのコンパイルに時間がかかる。これは開発用のプログラムとユーザー用のプログラムを作成しているからである。
Cargo.lockって何?
cargo build
を実行するとCargo.lock
というファイルを作成する
[root] name = "hello_world" version = "0,0,1"
Cargoはこのファイルを使い、アプリの依存関係を追跡する。自分で編集する必要はない。Cargoが自動的に編集してくれる。
新しいCargoプロジェクトを簡単に作成する
新しいプロジェクトを始めるたびに上のようなことをする必要はない。Cargoはすぐに開発が始められるようにベアボーンのプロジェクトディレクトリをすぐに作成できる。
Cargoで新規プロジェクトを開始するにはcargo new
を実行する
$ cargo new hello_world --bin
このコマンドでは実行アプリケーションの作成を目的とするため、--bin
を渡している。
実行可能ファイルはよくバイナリと呼ばれる。
Cargoは2つのファイルと1つのディレクトリを生成する。Cargo.toml
とsrc
ディレクトリにmain.rs
ファイルがある。
Cargo.toml
は以下のようになっている
[package] name = "hello_world" version = "0.1.0" authors = ["ubuntu"] [dependencies]
[dependencies]
は後で解説する
Cargoはnew
に与えた引数とgitのグローバル設定をもとにCargo.toml
に適切なデフォルト値を設定する。
また、hello_world
ディレクトリにgitリポジトリが自動で生成される
Cargoについてはここに詳しく書いてある