rustlingsでRustの基本的な読み書きに慣れる

Rustことはじめの一環として、GoでいうところのA tour of Goに相当するものがRustでもないのだろうかと考えていた。そこで、rustlingsというRustの基本的な読み書きに慣れるための良さそうなエクササイズ集がGitHubにあることを知り、早速トライしてみることにした。

github.com

使ってみる

リポジトリのREADMEでガイドされているOS毎のインストール手順を行ったら、コマンドラインからrustlingsのディレクトリに移動する。rustlingsのディレクトリ内には、コンパイルエラーを誘発する不正なrsファイルが沢山含まれており、それら一つ一つが問題である。

rustlings watchで起動することで、ターミナル上に(特定の問題の)エラーメッセージが表示されるので、該当する問題のrsファイルをVS Codeのようなエディタで開きデバッグを行っていくのが一連の流れ。

回答の手順

例えば以下の問題についてのエラーメッセージが表示されていたとする。

// variables3.rs
// Make me compile! Execute the command `rustlings hint variables3` if you want a hint :)

// I AM NOT DONE

fn main() {
    let x = 3;
    println!("Number {}", x);
    x = 5;
    println!("Number {}", x);
}

これはJavaScriptのような言語に慣れ親しんだ人からすると、一見正常なコードに見えるかもしれないが、Rustの場合だとコンパイルエラーとなる。おそらく、以下のようなエラーメッセージが表示されるはず。

f:id:p0ny:20200322225844p:plain

Rustは変数の宣言を行う際にmutというキーワードでミュービリティを宣言しない限りは、その変数の束縛を変更することが許可されない(デフォルトでは変数の宣言時にはすべてイミュータブル)。したがって、最初のxの変数宣言時にmutを含める必要がある。

let mut x = 3;

エラー箇所を修正すると、rustlingsがコードの変更を自動で検出して正誤判定をしてくれる。正答した後は、// I AM NOT DONEコメントアウト箇所を削除することで、次の問題をrustlingsがガイドしてくれる。

もし、問題がわからない場合は以下のコマンドを実行することでヒントが表示される救済措置もある。

rustlings hint exercise_name

ちなみにローカルで環境を構築するのが面倒な人向けに、Rust Playgroundを使ったWEB版もある。

雑感

現在、rustlingsの全項目のうち大体7割ほどの問題を解きおえた。rustlingsは言語機能毎に問題のセクションが分かれており、なおかつ難易度順に問題のガイドを行ってくれるので、Rustビギナーのステップアップのための教材としてはこの上なく最適だ。

Rustについてはまだ触り始めて間もないということもあり、コンパイルを通すので精一杯というのが正直なところ。個人的にRustはコンパイルエラー時のメッセージがかなり丁寧且つ的確なので、毎回のコンパイルエラー時に学びがある所がとても気に入っている。

rustaceanを目指してどんどん問題を解いていこう!🦀