Rustで作れるもの — 初級から上級までのプロジェクトロードマップ
Hello Worldの次に何を作ればいいかわからない時
Rustの文法を一通り回した。The Rust Bookも読んだ。でも「次に何を作ればいい?」が途方に暮れる。Rubyならrails newで即何かが出てくるが、Rustにはそれがない。
実際に作れるプロジェクトを難易度別に整理した。各段階でどのRustの概念を練習できるかも一緒に。
🟢 初級 — コンパイラとの戦いに慣れる
この段階の目標:コンパイラと戦うことに慣れること。プロジェクト規模は小さくていい。
1. grepクローン(minigrep)
The Rust Bookにも載っている古典。ファイルから文字列を検索するCLIツール。
学べること:ファイルI/O、Resultエラー処理、コマンドライン引数、イテレータ
$ minigrep "pattern" filename.txt
2. todo CLI
ターミナルでタスクを追加/削除/一覧表示するツール。ファイル(JSONやテキスト)に保存。
学べること:struct、enum、ファイル読み書き、serde(JSONシリアライズ)
$ todo add "Rust勉強"
$ todo list
$ todo done 1
3. 数当てゲーム
ランダムな数を生成し、ユーザーが当てるまでヒントを出すゲーム。
学べること:ユーザー入力(stdin)、ランダム(rand crate)、loop、match
4. 単位変換器
温度(摂氏↔華氏)、長さ(km↔mile)、重さ(kg↔lb)変換CLI。
学べること:enumで単位表現、関数設計、型変換
5. マークダウン→HTML変換器
簡単なマークダウン(見出し、太字、リスト)をHTMLに変換。
学べること:文字列パース、String vs &str、正規表現(regex crate)
🟡 中級 — 実際に使えるツールを作る
この段階の目標:他人が使えるレベルの完成度。エラー処理、テスト、ドキュメントまで。
6. JSONフォーマッター / jqクローン
JSONを整形出力したり、特定フィールドを抽出するCLI。
学べること:serde_json、トレイト実装、再帰構造処理
$ cat data.json | rjq '.users[0].name'
7. ファイルウォッチャー
ディレクトリを監視してファイル変更時にコマンドを実行。Rubyのguard gemに近い。
学べること:notify crate、イベントループ、プロセス実行(std::process)
$ fwatch ./src "cargo test"
8. HTTPサーバー(フルスクラッチ)
TCPソケットから直接HTTPリクエストをパースしてレスポンスを作るサーバー。フレームワークなし。
学べること:std::net::TcpListener、スレッド、HTTPプロトコル、バッファ管理
これを一度やってこそ、axum/actixが何をしてくれるか理解できる。
9. REST APIサーバー
axumやactix-webでCRUD API実装。DB接続含む。
学べること:axum/actix-web、sqlx(DB)、async/await、ミドルウェア、JSONシリアライズ
GET /api/users
POST /api/users
GET /api/users/:id
DELETE /api/users/:id
RubyistならRails APIと比較しながら作ると面白い。
10. チャットサーバー(TCP/WebSocket)
複数クライアントが接続してメッセージをやり取りするサーバー。
学べること:tokio(非同期)、Arc/Mutex(共有状態)、チャネル(mpsc)、WebSocket
11. 静的サイトジェネレーター(SSG)
マークダウンファイルを読んでHTMLサイトを生成。Jekyll/Hugoの超小型版。
学べること:ファイルシステム探索、テンプレートエンジン(tera)、マークダウンパース(pulldown-cmark)
12. 画像リサイザーCLI
画像を読み込んでリサイズして保存。バッチ処理対応。
学べること:image crate、バイナリデータ処理、並列処理(rayon)
$ imgrs resize --width 800 *.jpg --output ./resized/
🔴 上級 — Rustの本当の力が出る領域
この段階の目標:Rustを選んだ理由が明確になるプロジェクト。性能、安全性、システムレベルアクセス。
13. データベースエンジン
B-treeベースのキーバリューストア。ディスクにデータを永続化。
学べること:低レベルファイルI/O、バイナリシリアライズ、B-tree実装、トランザクション
SQLiteが何をしているか自分で作ってみる経験。
14. プログラミング言語インタプリタ
自分だけの小さな言語を作る。Lexer → Parser → AST → Evaluator。
学べること:enumでトークン/AST表現、再帰下降パーサー、Boxで再帰構造、パターンマッチング
Rustのenum + matchが輝くプロジェクト。
15. WASM Webアプリ
RustをWebAssemblyにコンパイルしてブラウザで実行。画像処理、ゲームロジック等CPU集約的タスク。
学べること:wasm-bindgen、wasm-pack、JavaScriptインターフェース、メモリ管理
16. レイトレーサー
3Dシーンをレンダリングするプログラム。「Ray Tracing in One Weekend」をRustで実装。
学べること:ベクトル数学、並列処理(rayon)、画像生成、数値最適化
結果が画像で出てくるので達成感が大きい。
17. OSカーネル(教育用)
ベアメタルでブートするミニOS。「Writing an OS in Rust」シリーズに沿って。
学べること:no_std、インラインアセンブリ、メモリ管理、割り込みハンドリング
Rustがシステムプログラミング言語である理由を体感するプロジェクト。
18. ゲーム(Bevyエンジン)
Bevy ECSエンジンで2D/3Dゲーム制作。
学べること:ECS(Entity Component System)パターン、ゲームループ、物理エンジン連携、アセット管理
どこから始めればいいか
Ruby出身ならこの順番がおすすめ:
- minigrep → 基礎体力づくり
- todo CLI → struct/enum練習
- REST API(axum) → Railsと比較しながら学ぶ
- チャットサーバー → 非同期 + 並行性
- WASM Webアプリまたはインタプリタ → Rustの本当の楽しさ
Rubyで作ったことがあるものをRustで作り直すのも良い。同じ機能で実装方法がどれだけ違うか比較すると、2つの言語の設計思想の違いが鮮明に見える。
キーポイント
初級: minigrep、todo CLI、数当てゲーム、単位変換、MD→HTML
中級: jqクローン、ファイル監視、HTTPサーバー、REST API、チャット、SSG、画像処理
上級: DBエンジン、インタプリタ、WASM、レイトレーサー、OSカーネル、ゲーム
Rubyistおすすめ順: minigrep → todo → REST API → チャット → WASM/インタプリタ
メリット
- ✓ 各プロジェクトが特定のRust概念(所有権、async、trait等)を集中的に練習させる
- ✓ 初級→上級の順番で進めると自然にスキルが積み上がる
デメリット
- ✗ 上級プロジェクトはRust以外にも該当分野の知識(DB、コンパイラ等)が必要
- ✗ 中級からは外部crateへの依存が増えてエコシステムの学習も並行する必要がある