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の役割

Rustでアプリケーションを開発する際、Cargoというツールを利用することがデファクトスタンダードとなっています。このツールは、Rustアプリケーションのビルドを行ったり、他のライブラリへの依存関係を管理したりします。

Cargoはcargoコマンドを使って利用します。公式のインストーラを使ってインストールした場合は、Cargoも同時にインストールされています。以下のコマンドでインストールされていることを確認できます。

cargo --version

JS/TSプロジェクトでは公式のビルドシステムというのは無く、何かしらのバンドラツール(例:Vite)を頼ることになります。
ライブラリの依存関係は公式のnpmやサードパーティーのyarn・pnpmを使うことが一般的です。
Rustにおいてはそのどちらも公式ツールとして機能提供されていることが特徴的です。

cargo new

Cargoを使うには、そのプロジェクトが、前提となる構造に従っている必要があります。cargoには、その構造通りにプロジェクトを作成するサブコマンドが用意されています。

以下のコマンドで、カレントディレクトリの配下に新しいプロジェクトディレクトリを作成できます。

# qiita-sampleの部分は任意
cargo new qiita-sample

コマンドを実行すると、カレントディレクトリにqiita-sampleというディレクトリが生成され、その中に必要なファイルやディレクトリが生成されています。

cargo newによって生成されるのは以下のものです(厳密にはGitの初期化も行われるので.git.gitignoreも含まれますが、ここでは省略します)。

  • Cargo.toml
  • srcディレクトリ

Cargo.toml

Cargoプロジェクトの設定ファイルです。パッケージ名やバージョン、依存関係を管理します。

Node.jsプロジェクトにおけるpackage.jsonのようなものです。

srcディレクトリ

ソースコードが格納されるディレクトリです。Cargoは基本的にsrcディレクトリ配下のソースコードをビルド対象にするので、新規にファイルを追加する場合はsrcディレクトリ配下に作成しましょう。

srcディレクトリの中にはmain.rsが生成されています。Cargoでは、src/main.rsがエントリーポイントになります。cargo new直後のsrc/main.rsの中身は以下のようになっています。

src/main.rs
fn main() {
    println!("Hello, world!");
}

cargo buildcargo run

プロジェクトディレクトリ(前項でいうqiita-sampleディレクトリ)で以下のコマンドを実行すると、プロジェクトをビルドします。

cargo build

このコマンドによるビルド成果物はtarget/debug/qiita-sampleに生成されます。このファイルを実行すると、src/main.rsmain関数の処理を実行できます。

root@k4nd4windows:/work/rust/qiita-sample# ./target/debug/qiita-sample
Hello, world!

ビルドと実行を同時に行いたい場合は以下のコマンドでそれが可能です。

cargo run

Cargoによるコンパイルは、ソースコードに変更があったときに行われるため、すでにcargo buildによってコンパイル済みのバイナリがあり、そのときとファイルが変わっていなければ、コンパイルのフェーズは実行されません。

cargo buildには--releaseというオプションが存在します。このオプションを付与すると、プロダクションリリース向けに、より最適化されたバイナリを生成します(サイズが小さくなり、高速になる)。ただし、その最適化フェーズによってコンパイラ時間は増大します。
開発時により早いサイクルでビルドしたい場合は単にcargo buildを、最終的なプロダクションリリースをするときはcargo build --releaseを実行します。

cargo checkでコンパイラエラーだけ検証できる

cargo buildcargo runを実行したときに、例えばソースコードに誤りがあるとコンパイラエラーが出力され、そうでないときはビルドやバイナリの実行まで進みます。コンパイラエラーが存在するかどうかのみを検証する(=検証に成功すればそこでコマンドが終了してよい)場合はcargo checkというコマンドを使用します。

cargo check

cargo checkの具体的なユースケースを考えてみましたが、例えばGit hooksを組み合わせてコミット前に実行し、コンパイルエラーが発生しないソースコードを保証する、などがあるでしょうか。
似たようなケースを過去のNode.jsプロジェクトでやっていた経験があります。

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?