【Effective-Rustlings-jp】2025年にEffectiveなRustの書き方を学びたいRustaceanに

# はじめに
🎍あけましておめでとうございます🎍
細々とプログラミングをしている[sotanengel](https://x.com/sota_eng_prog)です。

前回、Rustの読み書きの練習にピッタリな問題集(Rustlings)を日本語訳したところ、結構反響がありました。

https://qiita.com/sotanengel/items/e4ebb7ed4787fe60e4f4

ただ、この問題って基礎的なものばかりなので中級者向けではなく・・・・
そこで、2024/11に日本語訳が発売されたばかりの「[Effective Rust](https://www.amazon.co.jp/Effective-Rust-%E2%80%95Rust%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%94%B9%E5%96%84%E3%81%97%E3%80%81%E3%82%A8%E3%82%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E6%9C%80%E5%A4%A7%E9%99%90%E3%81%AB%E6%B4%BB%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE35%E9%A0%85%E7%9B%AE-David-Drysdale/dp/4814400942)」で紹介された内容を手を動かして学べる[Effective-Rustlings-jp](https://github.com/sotanengel/effective-rustlings-jp)を公開しました！

https://github.com/sotanengel/effective-rustlings-jp

※ 今後、1ヶ月くらいかけて問題を追加して、ブログで説明していくつもりなので、気長に見守ってくれれば幸いです🙇

<details>
<summary><strong>他の連載記事</strong> (<em>詳細</em>)</summary>

- [Day 1：型システムを使ってデータ構造を再現しよう](https://qiita.com/sotanengel/private/588a7f7cc03c36fc1adc)
- [Day 2：型システムを用いて共通の挙動を表現しよう](https://qiita.com/sotanengel/private/2a8fc62b6d9f8e916021)
- [Day 3：OptionとResultに対してはmatchを用いずに変換しよう](https://qiita.com/sotanengel/items/b54990dc82d877b9d70d)
- [Day 4：標準のErrorを使おう](https://qiita.com/sotanengel/private/79f683c3d75d09244567)
- [Day 5：型変換を理解しよう](https://qiita.com/sotanengel/private/8cc28c8b6108e5998e23)
- [Day 6：newtypeパターンを活用しよう](https://qiita.com/sotanengel/private/38814f8b5a88aad9eccc)
- [Day 7：複雑な型にはビルダを使おう](https://qiita.com/sotanengel/private/80bc555e95ed56b72f14)
- [Day 8：明示的なループの代わりにイテレータ変換を使用することを検討しよう](https://qiita.com/sotanengel/private/f7f4fc03f0b2dc445bf2)
- [Day 9：標準トレイトに習熟しよう](https://qiita.com/sotanengel/private/24a8ad443fc23e779ccd)
- [Day 10：RIIパターンにはDropトレイトを実装しよう](https://qiita.com/sotanengel/private/a3d1b04f98ea80b8989d)
- [Day 11：ジェネリクスとトレイトオブジェクトのトレードオフを理解しよう](https://qiita.com/sotanengel/private/8e2e88d5619b434c3ada)
- [Day 12：デフォルト実装を用いて、実装しなければならないトレイトメソッドを最小限にしよう](https://qiita.com/sotanengel/private/16b02d32732727eaf66f)
- [Day 13：Don't panic](https://qiita.com/sotanengel/private/aa833ce99c8e8b8eecf2)
- [Day 14：リフレクションを避けよう](https://qiita.com/sotanengel/private/6108b22f6644d4fde997)
- [Day 15：可視範囲を最小化しよう](https://qiita.com/sotanengel/private/4075925e05de50dfac96)
- [Day 16：ワイルドカードインポートを避けよう](https://qiita.com/sotanengel/private/555314f77c8318bb1c45)
- [Day 17：パブリックインターフェースのドキュメントを書こう](https://qiita.com/sotanengel/private/b4e8a11522b253ebb62e)
- [Day 18：分別を持ってマクロを使おう](https://qiita.com/sotanengel/private/a33b5ab66a82a26b4adc)
- [Day 19：Clippyに耳を傾けよう](https://qiita.com/sotanengel/private/b4c161bb87fc9e7e813e)
- [Day 20：ユニットテスト以上のものを書こう](https://qiita.com/sotanengel/private/58fcafaee5418b2b2b16)

</details>

以下、使い方をなどをざっくりとまとめておきます。

# 使い方
一応、[リポジトリにも同じような説明を書いている](https://github.com/sotanengel/effective-rustlings-jp)のですが、こちらでも書いておきます。

*※ 仕様の更新などで手順に変更が加わる可能性があるため、問題が生じた場合には[本家](https://github.com/rust-lang/rustlings/blob/main)などを確認し、[こちら](https://github.com/sotanengel/effective-rustlings-jp/issues)で修正内容を報告いただけますと幸いです。*

## 導入方法

※ 本ディレクトリは Rustlings という OSS のサードパーティコンテンツとして配信されています。
仕様の更新などで手順に変更が加わる可能性があるため、問題が生じた場合には[本家](https://github.com/rust-lang/rustlings/blob/main)などを確認し、
[こちら](https://github.com/sotanengel/effective-rustlings-jp/issues)で修正内容を報告いただけますと幸いです。

### 1. Rust をインストールする

まず[www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)にアクセスし、最新バージョンの Rust をインストールしましょう。

> 🐧 もしも Linux であれば, `gcc`をインストールしましょう。
>
> Deb: `sudo apt install gcc`.
> Dnf: `sudo dnf install gcc`.

> 🍎 もしも MacOS を使っている場合は,Xcode とデベロッパーツールを`xcode-select --install`でインストールしてください。

### 2. Rustlings をインストールする

Rustlings の演習をスムーズに進めるためのコマンドラインツールをターミナル上からインストールします。

```bash
cargo install rustlings
```

<details>
<summary><strong>もしも失敗した場合には…</strong> (<em>詳細を開く</em>)</summary>

- `rustup update`コマンドで最新バージョンの Rust か確認してください
- `--locked`フラグを利用してみてください、こんな感じで →`cargo install rustlings --locked`
- もしくは[本家の issue](https://github.com/rust-lang/rustlings/issues/new)で報告してください

</details>

### 3.演習問題のダウンロード

最新バージョンの演習問題をダウンロードしましょう！
ダウンロードした zip ファイルを解凍し、好きな場所に配置してください。

[ダウンロード](https://github.com/sotanengel/effective-rustlings-jp/tree/20250101)

### 4. 演習問題にチャレンジ！

ターミナル上で解凍した zipg ファイルのディレクトリに移動し、以下のコマンドを実行してください。

```bash
rustlings
```

<details>
<summary><strong>もしも「<code>rustlings</code>コマンドが見つからない」とターミナル上で警告が出た場合には…</strong> (<em>詳細を開く</em>)</summary>

もしも Linux 系を使っており、Rust をパッケージマネージャーでインストールしていた場合には、
Cargo が`~/.cargo/bin`にダウンロードされているものの、
`~/.cargo/bin`が`PATH`の環境変数に入っていない可能性があります。

解決方法としては、

- 手動で`~/.cargo/bin`を`PATH`に追加する
- Rust をアンインストールし、`rustup`: https://www.rust-lang.org/tools/install でインストールする

</details>

## 操作方法の簡単な説明

- `rustlings`：問題集を解くためのツールが起動する
- `n`：次の問題に進む
- `l`：問題のリスト一覧を表示する
  - `c`：カーソルで合わせた問題から演習を再開する
- `r`：問題の回答ステータスをリセットする

# さいごに
頑張って、本で紹介された項目全部掲載できるようにするぞ〜〜〜〜〜〜

もしも本リポジトリで不備などあれば、リポジトリのissueやPRなどでご指摘いただければと思います。