Rustの勉強の敷居を下げてみた〜演習問題集Rustlingsを翻訳して公開しました〜

# はじめに
こんにちは。細々とプログラミングをしている[sotanengel](https://x.com/sota_eng_prog)です。

Rustの読み書きの練習にピッタリな問題集として知られる[Rustlings](https://github.com/rust-lang/rustlings)を日本語に翻訳したので、
- 書籍などを読んで概要を理解したので実際にRustを書いてみたい👀
- Rustlingsは英語で書かれていてとっつきにくいなぁ

という人は以下のリポジトリの日本語翻訳バージョンにトライしてみてください！！

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

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

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

*※ 仕様の更新などで手順に変更が加わる可能性があるため、問題が生じた場合には[本家](https://github.com/rust-lang/rustlings/blob/main)などを確認し、[こちら](https://github.com/sotanengel/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ファイルを解凍し、好きな場所に配置してください。
※リポジトリをご確認ください。

## 4. 演習問題にチャレンジ！
ターミナル上で解凍した`rustlings-jp-YYYYMMDD`のディレクトリに移動し、以下のコマンドを実行してください。


```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`：問題の回答ステータスをリセットする


# 経緯
Rustを学んでみようと思ったきっかけは、
- 兼業先でRustを勉強している人がいた
- 勉強時間が取れそうだったので

の2点です。

実際に[The Rust Programming Language 日本語版](https://doc.rust-jp.rs/book-ja/title-page.html)を使って記法などについて学んでみたところ、「ライフタイム」や「ジェネリティクス」などは読むだけでは理解ができないなぁと思い演習問題を探してみました。
すると[Rustlings](https://github.com/rust-lang/rustlings)なるリポジトリがRustの勉強には最適らしく、いくつかのブログで紹介されていました。

例. 

https://zenn.dev/tarotene/articles/30fbe89c6ab686

https://qiita.com/fujino_tech/items/4ea8f9d739b84194b76e

RustlingsではRust本のチャプターごとに小問演習が用意されており、ターミナル上で動くコマンドラインツールも提供しているため、手を動かしながら勉強するにはもってこいのリポジトリでした。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 30
}
</style>
footer ツールを使うとこんな感じに進捗も確認しながら、問題を解くことができます
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1758960/0577942d-e972-f9dc-2a9d-357230198323.png>
@enduml
```

またRustlingsの作者さんは寛大な方らしく、サードパーティーの演習問題の作成や翻訳についても許容してくださっていたので、「せっかくRust学ぶなら後続の人がより学びやすくなるように翻訳版を作成してみるべ」って感じで今回の翻訳バージョンを作成してみた次第です。

もしも今回の記事を読んで「自作の問題を作ってみたい！！」という方がいれば以下のドキュメントを参考にしながら、あなたのRustlingsを作ってみてください！

https://github.com/rust-lang/rustlings/blob/main/THIRD_PARTY_EXERCISES.md

# さいごに
今回の翻訳ではRustlings本家のコードをただ翻訳しただけだったので、
- 解説部分で分かりにくい部分を加筆
- ヒントがまだ翻訳しきれていないので加筆
- 新しい問題などを追加

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