😡

コンパイラに怒られて学ぶRust - Rustlings入門

に公開

Rustlingsとは

RustlingsはRust公式チームが提供する小さな演習問題集で、Rustのコードを読み書きすることに慣れることを目的としています。
The Rust Programming Language(通称「The Book」)と並行して取り組むことが推奨されています。

特徴的なのは、普通のチュートリアルとは違って、わざとバグのあるコードを渡されるところです。
コンパイルエラーを読み解き、コードを修正し、再コンパイルするプロセスを繰り返すことで学習を進めます。

インストールと始め方

# インストール
cargo install rustlings

# 初期化
rustlings init

# ディレクトリ移動
cd rustlings

# 自分の場合はVSCodeで開いています
code .

# 開始
rustlings

開始する以下のような感じです。

Rustlingsには94個程度の演習問題があり、基本的な構文から所有権、ライフタイム、並行性といった高度な概念まで段階的にカバーしています。

どんなことができるのか

1. コンパイラとの対話を学ぶ

Rustコンパイラは非常に意味のあるエラーメッセージを提供することで知られており、これによってコードの問題を理解しやすくなっています。
Rustlingsはこのコンパイラメッセージを読む練習にもなります。

実際の問題では、例えば変数の可変性(mutability)やシャドウイング、ライフタイムといったRust特有の概念をエラーメッセージと格闘しながら身につけていきます。

問題は以下のディレクトリにあります。
rustlings/exercises/

エラーが出ている状態ならば以下のようにエラーが表示されます。

エラーを解決して、コードを保存すると自動でチェックをしてくれます。

2. 進捗を可視化できる

rustlingsが起動していればlを押せば以下のように進捗を見ることができます。

このコマンドで全演習の一覧と完了状況が見られます。どこまで進んだか、どの問題が残っているかが一目瞭然です。

どんな楽しみがあるのか

パズルを解く感覚

各問題は小さな謎解きのようなものです。
コンパイラが「ここが違うよ」と教えてくれるので、それをヒントに正解を探していきます。
答えがわかった時の「ああ、そういうことか!」という瞬間が楽しい。

実践的なスキルが身につく

チュートリアルを読んで理解した気になっても、実際に書いてみると手が止まることはよくあります。
Rustlingsは最初から手を動かすスタイルなので、さらに理解が深まります。

段階的な達成感

94個の演習を一つずつクリアしていく過程は、ゲームのレベル上げのような感覚があります。最初は簡単な問題から始まり、徐々に複雑になっていく設計なので、挫折しにくい構成になっています。

実際の演習で学べること

所有権システムの実感

Rustの最大の特徴である所有権システムは、読んで理解するより、実際にコンパイラに怒られながら覚えた方が早いです。
「なぜこの値は使えないのか」「なぜここでムーブが起きるのか」といった疑問に、演習を通じて何度も向き合うことになります。

最初は理不尽に感じるかもしれませんが、10問、20問と進めるうちに、コンパイラの言っていることが自然と理解できるようになります。
この感覚の変化自体が、Rustを習得する過程での大きな節目だと感じました。

エラーハンドリングの考え方

Rustにはtryやcatchがありません。
代わりにResult型とOption型を使います。Rustlingsの演習では、unwrap()を使わずに適切にエラーを処理する方法や、?演算子の使い方を実践的に学べます。

この辺りは、他の言語からRustに来た人が最初に戸惑うポイントの一つですが、演習を通じて「失敗の可能性を型で表現する」というRustの哲学が腑に落ちてきます。

マクロの魔法

println!やvec!など、Rustでは末尾に!が付くマクロをよく使います。演習の中には、自分でマクロを定義する問題もあります。
マクロは最初は不思議に見えますが、理解すると強力なツールです。

コンパイル時にコードを生成できるという仕組みは、C++のテンプレートとも、他の言語のマクロとも違う独特なものです。

誰に向いているか

  • C++やJavaなど他の言語経験があり、Rustを学びたい人
  • The Rust Bookを読んでいるが、手を動かして理解を深めたい人
  • システムプログラミングに興味があるが、どこから始めればいいかわからない人
  • 「コンパイルが通ったら動く」という体験をしてみたい人

コンパイラエラーと向き合うことに抵抗がない人なら、かなり効率的に学べるはずです。逆に、まったくのプログラミング初心者には少しハードルが高いかもしれません。

まとめ

Rustlingsは「読む」学習ではなく「直す」学習です。
正しいコードを写経するのではなく、壊れたコードを直すことで、Rustの本質的な考え方が体に染み込んでいきます。

所有権やライフタイムといった概念は、理論として理解するより、コンパイラに怒られながら覚えた方が早いこともあります。
Rustlingsはその最適な環境を提供してくれるツールです。

演習を終える頃には、Rustのコンパイラエラーを見ても焦らなくなっているはずです。
それどころか、エラーメッセージを読むことが、デバッグのヒントとして頼もしく感じられるようになっているかもしれません。

皆さんもぜひ一度Rustlingsで遊んでみてください。

https://rustlings.rust-lang.org

Discussion