Rustプログラミングの学習を始めたばかりのあなたへ。実務で活躍できるレベルまでスキルを磨くための効果的な学習ステップを解説します。
本記事を参考に、Rustの知識を確実に身につけ、実務で役立つスキルを習得しましょう。
Rustを学ぶ(公式サイト)
まずは、Rustの公式サイトの「Rustを学ぶ - Rustプログラミング言語」を見てみます。
ステップ1. Rustを始める
Rustを始めるにあたり、Rustの構文を学べるドキュメントや実施にコマンドラインで読み書きしていきます。
はじめは、自分に合う方法で学び始めると楽しく学習を進められるでしょう。
- ✅「the book」というオンライン書籍を読む
- The Rust Programming Language でプログラミング言語Rustの概観を基本原理から学べます。
- ボリュームが多いですが、一通り読むことでRustの基礎知識を学べます。 Rustやるなら必ず読んでおきたいドキュメントです。
-
また、非公式の日本語翻訳版の The Rust Programming Language 日本語版 もあります。
- ✅ Rustlingsコースをやってみる
- コマンドライン上でRustの構文の基本的な読み書きを学べる
- GitHub - rust-lang/rustlings: Small exercises to get you used to reading and writing Rust code!
- 以下のように、コマンドラインでコンパイルエラーを解決しながらエクササイズを問いていきます。「the book」で学んだことを実際のコードで復習する使い方がオススメです!
- ✅ Rust by Exampleをみてみる
- たくさんのコード例を示し、説明は最小限。 練習問題もある
- Introduction - Rust By Example
ステップ2. Rustと共に成長する
Rustの基本的な構文や読み書きに慣れてきたら、次はRustの標準ライブラリや周辺ツールの基本的な部分を深く理解していきます。また、それとは別にコマンドラインや組み込みなど特定領域でのRustの使い方を学びながら応用力も高めていきます。
- コアドキュメントを読む
- アプリケーションドメインのスキルを得る
- コマンドラインブック
- Rustで便利なコマンドラインアプリケーションを作る方法を学ぶ
- Getting started - Command Line Applications in Rust
- WEBASSEMBLYブック
- Rustを用いてWebAssemblyを介したブラウザネイティブアプリを作る
- Introduction - Rust and WebAssembly
- 組み込みブック
- 組み込みシステムにおけるRustに習熟する
- Introduction - The Embedded Rust Book
- コマンドラインブック
ステップ3. Rustをマスターする
- リファレンスを読む
-
正式な仕様ではないが、the bookよりも詳細で包括的
- ‘nomiconを読む
- 黒魔術である庵セーフなRustへの手引書
- Unstableブックを読む
- nightly Rustのみで使える不安的な機能に関する記述がある
Rust初心者が実務レベルになるまでの学習ステップ(Chat GPT-4)
Chat GPT-4にRust初心者が実務レベルになるまでの学習ステップを聞いてみました。
回答結果の学習ステップを俯瞰してみると、次のように進めるとよさそうです。
- 学習ステップの1〜8ぐらいまでは、「the book」を読む、rustlingsでエクササイズをして復習する、Rust by Exampleでサンプルコードにふれるということを通して、Rustの基礎が学べそうです。
- 学習ステップの9〜14は、Chat GPT-4にやり方を聞きながら、コアドキュメントを読んだりしていくのがよさそうです。
Rustの学習ステップのプロンプトは次のとおりです。
以下、回答です。(※回答結果に対して、実際の学習教材ややってみた感想などを追記したかったため、画像ではなくテキストで回答内容を記載しています)
Rustプログラミングを実務レベルまで学ぶためのステップを以下にまとめました。
1. Rustの基本を学ぶ
- ✅ 公式ドキュメントや"The Rust Programming Language"という書籍を読む
- 「the book」と呼ばれるだけあり、Rustについて基本を一通り学べます。
- しかし、内容がボリューミーで途中で力尽きそうなので、以下の学習ステップを進めながら必要な部分を読んでいくほうが達成感を得やすくて学習が捗りそうです。
- ✅ Rustのインストールと環境設定
-
Rust をインストール - Rustプログラミング言語 を見ながら簡単に環境構築できました。
- 実プロジェクトで使う場合は、asdfなどで管理したほうがいいかもですね。
-
- ✅ Hello Worldプログラムを作成し、コンパイルと実行
- お決まりの Hello Worldですね。「the book」のHello, World! を見ながら、"Hello, world!"をコンソールに表示することができます。
2. Rustの基本構文を理解する
- ✅ 変数、データ型、関数、制御構造(if、else、for、while)
- 「the book」の第3章である 一般的なプログラミングのコンセプト概念を読み進めることで理解できます。
- ✅ エラーハンドリング(Result型、Option型、パニック、エラー処理)
- 「the book」の数当てゲームのプログラミングでハンズオン形式で数当てゲームを作ることで学べます。
-
また、Rustのエラーハンドリングガイド!Option型やResult型を使いこなすという記事を書いてみました。
3. 所有権、借用、ライフタイムを理解する
- ✅ 所有権、ムーブセマンティクス、参照、借用のルール
- 所有権はRustの最もユニークな機能とも言える部分であり、理解するのはなかなか大変ですが、おもしろいです。
- 「the book」の第4章の 所有権を理解するを読むことでなんとなく理解できます。また、GitHub - rust-lang/rustlings でも "move_semantics" というエクササイズでコードレベルで理解を深められます。
-
また、所有権を整理した初心者でもわかる!Rustの所有権をわかりやすく整理 という記事を書いてみました。
- ✅ ライフタイム注釈とその利用方法
-
「the book」の第10章のライフタイムで参照を検証する で基本的な部分を学べる。
-
ライフタイムの主な目的は、ダングリング参照を回避すること。ライフタイム注釈はコンパイラにより自動的に保管されているが、特定ケースでは指定する必要がある。
-
4. 構造体、列挙型、パターンマッチングを学ぶ
- ✅ 構造体の定義と使用法、メソッド、関連関数
- 「the book」の第5章の 構造体 で学べる。
- ✅ 列挙型、パターンマッチング、マッチガード
-
「the book」の第6章の Enumとパターンマッチング と18章の パターンとマッチングで学べる。
-
5. モジュール、パッケージ、クレートを理解する
- ✅ モジュールシステム、公開インターフェースの制御
-
「the book」の第7章の 肥大化していくプロジェクトをパッケージ、クレート、モジュールを利用して管理するで学べる。
- mod、use、ディレクトリ構成・パスなどでモジュール分割ができる
-
- ✅ Cargoの利用、依存関係の管理、クレートの公開
-
「the book」の第14章の CargoとCrates.ioについてより詳しくで学べる。
- CargoはRustのビルドシステム兼パッケージマネージャで、コードのビルドや依存ライブラリのダウンロードやビルドなどをおこなってくれる。
- 設定は`Cargo.toml`に記載し、依存関係の管理などできる。
- `cargo publish`で`crates.io`にクレートを公開できる。
-
6. トレイトとジェネリクスを学ぶ
- ✅ トレイトの定義と実装、トレイトオブジェクト、トレイト境界
- 「the book」の第10章のジェネリック型、トレイト、ライフタイムで学べそう。
- トレイトは抽象的な共通の振る舞いを定義できる。違いはあるが他の言語のインターフェイスに似ている機能。標準ライブラリにはDisplayトレイトとかある。
- ✅ ジェネリック型パラメータ、ジェネリック関数、構造体、トレイト
- 「the book」の第10章のジェネリック型、トレイト、ライフタイムで学べる。
- ジェネリック型により、関数や構造体などの型を抽象的な型ににすることができる。例えば、`Result<T, E>`とか。
7. 非同期プログラミングとコンカレンシーを学ぶ
- ✅ Futures、async/await構文、非同期I/O
-
「Getting Started - Asynchronous Programming in Rust」で学べます。(※Rust内でもまだ23年5月時点では仕様がFixした機能ではないのでTODOの部分も一部あります)
-
- ✅ スレッド、チャネル、Mutex、RwLock、アトミック操作
- 「the book」の第16章の並行性で学べる。
- スレッドは`thread::spwan`で作成し、`join()`でスレッドの実行を待つ
- `mpsc::channel`で送信側と受信側を作り、`send()`と`recv()`でやりとりする
- 並列処理の同一データのアクセスは`Mutex`でロックをとる。また、スレッドセーフなスマートポインタの`Arc`を使う
8. テストとドキュメントを書く
- ✅ 単体テスト、統合テスト、ドキュメントテストを行う
- ✅ コードに適切なコメントを追加し、ドキュメントを整備する
- `///`でコードコメントを書くことで自動的にHTMLドキュメントを生成できる。
- `cargo doc --open`で現在のクレートのドキュメント用のHTMLが生成され、Webブラウザで閲覧できる。
9. Rustのエコシステムに慣れる
- ✅よく使われるクレート(crate)やライブラリを調べ、実際に利用する
- Rustのパッケージ公開サイトの crates.io やカテゴリごとのクレートを探せるLib.rs 、Rustのクレートを(すべてではないが)一覧化しているawesome-rustをながめる。
- RustでWebアプリを作ったり、公開されているWebアプリのライブラリをみる
- また、RustのWebアプリケーション開発でよく利用するクレート(2023年版) という記事を書きました。
10. 実践的なプロジェクトを手がける
- ✅独自のプロジェクトを作成するか、オープンソースプロジェクトに貢献する。また、可能ならコードレビューを受け、改善点を学ぶ
11. パフォーマンスチューニングと安全性を向上させる
- ベンチマークテスト、プロファイリングツールを利用してパフォーマンスを最適化
- 未実施:ChatGPTに聞いてみる
- 安全性の向上、unsafeコードの最小化、セキュリティベストプラクティスの適用
- 未実施:ChatGPTに聞いてみる。「the book」の19章の Unsafe Rust が参考になるかも。
12. Rustの最新動向を追う
- Rustのリリースノートやブログ記事を読む
- 新機能や変更点を把握し、自分のプロジェクトに適用する
13. 高度なRustの機能を学ぶ
- マクロ、型レベルプログラミング、FFI(Foreign Function Interface)などの高度な機能を学ぶ
- 未実施:「the book」の第19章の 高度な機能で学べそう。
- 高度な機能を使って効率的で強力なRustコードを書く
- アトリビュートについて Rustアトリビュート活用法!コンパイラへの指示からテストまで幅広く説明 という記事を書いてみました。
14. Rustの設計原則とベストプラクティスを学ぶ
- Rustコミュニティが重視する設計原則やベストプラクティスを学び、自分のコードに適用する
- 未実施:ChatGPTに聞いてみる
- レビューを通じてフィードバックを得ることで、より良いRustコードを書く力を向上させる
- 未実施:ChatGPTに聞いてみる
これらのステップを繰り返し学習し、実践することで、Rustを実務レベルで利用できるようになります。お互いに助け合いながら、継続的にスキルを磨いていくことが重要です。
ぜひ、Rustの学習ライフを楽しんでください!