TIL

Today I Learned. 知ったこと、学んだことを書いていく

Cargoについて

Rustのビルドシステムとパッケージマネージャーである

以下のことに関して管理をする

  1. コードの構築
  2. コードが依存するライブラリのダウンロード
  3. それらのライブラリの構築

Cargoを使うことで依存関係を考えなくてもよくなる


使い方

  • 新しいプロジェクトを作成

    cargo new {project name} --bin

  • コンパイル

    cargo build

  • 実行

    cargo run


Cargoに変換する

以下の3つのことを行う

  1. ソースファイルを正しいディレクトリに配置する
  2. 古い実行ファイルを削除する
  3. Cargo設定ファイルを作成する

ソースディレクトリの作成と古い実行ファイルの削除

例)次のような構造の場合

~/projects/hello_world$ ls
main main.rs

srcというディレクトリを作成して、main.rssrcに移動する

~/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.tomlCは大文字にすること
  • 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.tomlsrcディレクトリに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についてはここに詳しく書いてある


参考文献

Getting Started - The Rust Programming Language