## 環境最新化
[[Rustのtoolchainをアップデート]]する。
```console
rustup update
```
```console
$ rustc --version
rustc 1.72.0 (5680fa18f 2023-08-23)
$ cargo --version
cargo 1.72.0 (103a7ff2e 2023-08-15)
```
## プロジェクトの作成
```console
cargo new rust-tdd
```
```console
$ cd rust-tdd
$ ll
-a--- 177 10 Sep 09:48 -N Cargo.toml
d---- - 10 Sep 09:48 -N src
```
## 久々のHello World
久々すぎるのでウォーミングアップ。
`src/main.rs`
```rust
fn main() {
let message = "Hello, World!";
println!("{}", message);
}
```
```console
$ cargo run
Compiling rust-tdd v0.1.0 (C:\Users\syoum\work\rust-tdd)
Finished dev [unoptimized + debuginfo] target(s) in 0.40s
Running `target\debug\rust-tdd.exe`
Hello, World!
```
> [!positive] セミコロン付け忘れて『あれ...』とか思ってたくらいには久々だった
## ちょっとしたコレクション演算
これだけだと物足りないので、もう少し演算するプログラムを実行してみる。
```rust
use std::ops::Range;
fn main() {
let xs: Range<i32> = -10..10;
let result: i32 = xs.filter(|x| x.is_positive()).map(|x| x * x).sum();
println!("{}", result);
}
```
```console
$ cargo run
285
```
> [!positive] EASYなコードなのにコンパイルエラー出まくって15分くらいかかった... けど[[Rust]]のこの感じが久々で良い
## テストの自動化
[[cargo-watch]]を使う。
```console
cargo install cargo-watch
```
[[Cargoでソースコード変更時に自動でテスト再実行]] を参照。
## [[ライブラリクレート]]で作り直す
[[バイナリクレート]]だと結合テストが書きにくく、未使用警告が出まくるので...。
`main.rs`を`lib.rs`にrenameするだけでOKそう。あとは`tests/integration_test.rs`の追加。この辺は[[🦀11章 自動テストを書く#テストの体系化]]を参考に。
```console
src
dollar.rs
lib.rs
tests
integration_test.rs
```
## TODO
#todo あとは不満があるたびに改良していく