【Rust初心者】Rustの日本語ドキュメントを自分なりにまとめてみた(その2)

この記事は、2023年6月に作成したものです。

# はじめに
以前から興味があったRustを、日本語のドキュメントをもとに、学習を始めました!
自分の考えをまとめるために、記事を書いていこうと思います。

今回は、[日本語ドキュメント1.3](https://doc.rust-jp.rs/book-ja/ch01-03-hello-cargo.html)についてまとめていきます！

# この記事でできること
RustのCargoを用いて、コンソールに`Hello, Cargo!`と表示します。

# 環境
- macOS Monterey == 12.5
- Docker == 23.0.5
- Rust == 1.70.0
- Cargo == 1.70.0

# Cargoとは？
Rustに触れたことのない方は、Cargoという言葉を聞くことがそもそもないでしょう。
Cargoとは、Rustのビルドシステム兼パケージマネージャーです。

Cargoを使用することで、プログラムで必要とするライブラリのインストールや管理、コードのビルドを簡単に行えます。

Pythonをある程度書いたことがある方は、わかるかもしれませんが、ライブラリが必要になると`pip install ~`を頻繁に使用していました。
しかしRustでは、Cargoを用いることで、わざわざPythonのようにコマンドを叩くことなく、ライブラリをインストールし管理してくれます。(最近では、[rye](https://nsakki55.hatenablog.com/entry/2023/05/29/013658)というパッケージ管理ツールによってPythonでもこのような管理を行うことができます。)

**要するに超便利な何でも屋って感じです！**

# Cargoの確認
[以前の記事](https://qiita.com/a-im12/items/bc571e5d48301c90980f)を参考に環境を作った方は、Cargoがデフォルトでインストールされていると思いますが、念の為確認したい方やその他の方法でRustの環境を作った方は、以下のコマンドを実行してみてください。
~~~command
$ cargo --version
~~~

ここで、`cargo 1.~~`とバージョンを表す数値が表示されたら、Cargoがしっかりとインストールされている証拠です！
`command not found`などのメッセージが表示された場合は、うまくCargoがインストールされていないので、Cargoの個別インストールを行なってください。

# プロジェクトの作成
Cargoの恩恵を受けるためには、`cargo new`によってプロジェクトを作成する必要があります。
~~~command
$ cargo new hello_cargo
~~~
このコマンドを実行することで、カレンとディレクトリに`hello_cargo`というプロジェクトフォルダが作成されます。
今回はプロジェクト名を`hello_cargo`としていますが、newの後ろを任意の文字列にすることで、好きなプロジェクト名を指定することができます。

# 中身の確認
作成されたプロジェクトフォルダの中身はこのようになっています。
~~~
└── hello_cargo
    ├── Cargo.toml
    └── src
        └── main.rs
~~~

### Cargo.toml
このファイルには、主にビルド時に必要な設定を記述します。

ファイルを開くと、生成時点では以下のようになっています。
~~~Rust
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

[dependencies]
~~~
この形式はTOML形式といい、Cargoの設定フォーマットです。

**packageセクション** - この文以降に、設定を記述するという目印です

**name** -  パッケージ名が記述されています
**version** - そのプログラムのバージョンが記述されています
**edition** - 使用するRustのエディションが記述されています
※エディションに関しては、[こちら](https://doc.rust-jp.rs/book-ja/appendix-05-editions.html)を参照してください。

**dependenciesセクション** - この文以降に、依存するライブラリを記述していきます

# main.rs
次に、生成された`main.rs`を開いてみましょう。
~~~Rust
fn main() {
    println!("Hello, world!");
}
~~~
`Hello, world!`と表示するプログラムが自動で用意されていますね。
ここを少し変えて`Hello, Cargo!`と表示されるようにしてみましょう。
~~~Rust
fn main() {
    println!("Hello, Cargo!");
}
~~~
これで`Hello, Cargo!`と表示されるようになりました。

# プログラムをビルドしてみる
ここまでCargoを使用してRustを実装してみましたが、[前回の記事](https://qiita.com/a-im12/items/56d81b759c7b3b0aec81)の内容と何も変わらない！
むしろ、いろんなフォルダやファイルが生成されて複雑だ！

と思った方もいるかもしれません。
確かに、この程度のプログラムなら、Cargoの恩恵を十分に受けることはできません。
しかし、これから先のRustでの開発に向けてCargoに慣れておきましょう。

まずは、プロジェクトのビルドです。
プロジェクトフォルダで以下のコマンドを実行するとビルドすることができます。
~~~command
$ cargo build
~~~
ビルドが成功すると、プロジェクトフォルダに`targetフォルダ`が生成されます。
ここまでくれば、あとは生成した実行ファイルを参照するだけです！

# 実行してみる
実行ファイルは、target/debug/hello_cargoとなります。(windowsではtarget/debug/hello_cargo.exe)
これを実行するには、以下のパスをコンソールに入力します。
~~~command
$ ./target/debug/hello_cargo
~~~

このパスを実行し、コンソールに`Hello, Cargo!`と表示されていれば成功です！

# 便利なCargo
ここで、「いちいち実行するのにそんな長いパス書きたくない」「ビルドに毎回時間がかかるのが煩わしい」と思った方はいないでしょうか。
実は、みんなそう思っています。

そこでCargoには、より開発効率が良くなるようにいくつかのコマンドが用意されています。
### cargo run
このコマンドは、実行ファイルを参照する際に、いちいち長いパスを書かずとも一発で実行ファイルを参照してくれます。
プロジェクトディレクトリで、以下のようにコマンドを実行します。
~~~command
$ cargo run
~~~
たったこれだけで、あの長いパスを省略できるのは、とても便利ですね！

また、このコマンドは、`cargo build`を内包しているので、プロジェクトに対していきなり`cargo run`を実行すると、自動でビルドしてくれます。

### cargo check
このコマンドは、プロジェクトをビルドせずに、ソースコードにエラーがないかを確認してくれます。
これを使用しない場合、ソースコードのエラーの確認は、`cargo build`コマンドを実行しなければなりません。
ビルドには少し時間がかかるため、少しの修正でも多くの時間をかけなければなりません。

そういう時は`cargo check`を使いましょう。
プロジェクトディレクトリで、下記のコマンドを実行すると
~~~command
$ cargo check
~~~
エラーがない場合`Finished ~~`と表示され、エラーがある場合は`error : ~~`と表示されます。
このコマンドは実行すると、瞬時にソースコードをチェックし結果を返してくれるため、ビルドよりも大幅に時間を短縮することができます。

より効率良く、Rustでの開発ができるようにCargoを使いこなしていきましょう！
次回は、変数についてまとめていこう思います。

# 参考記事
- [The Rust Programming Language 日本語版](https://doc.rust-jp.rs/book-ja/ch01-03-hello-cargo.html)