学習計画
他の言語でプログラミングした経験があり、Rustは初めて、という出発点で用意した。各回は45〜60分が目安。週2〜3回なら4〜5週間、毎日進めてもよい。日付より、到達条件を優先する。未経験なら01・02をそれぞれ2〜3回に分ける。
毎回の進め方
- 予想(5分): 実行前に出力やコンパイル結果を自分の言葉で書く。
- 書く・動かす(20分): 最小例を読み、1つ変更して実行する。
- 壊す・調べる(15分): エラーを読み、ブレークポイントやテストで仮説を確かめる。
- 説明(5分): なぜそうなるか説明する。理解が曖昧なら、さらに小さい例に戻る。
- 記録(5分):
docs/progress.mdに実行結果と次の疑問を残す。
10回の道筋
| 回 | テーマ・作業 | 到達条件 |
|---|---|---|
| 01 | Cargo、main、変数、関数。挨拶を自分で書く(ex01) | コードを変えて実行し、テストの失敗を読める |
| 02 | 型、mut、if、for、式と文(ex02) | 入力と戻り値の型を説明できる |
| 03 | String、move、Copy、clone、drop | 移動とコピーの違いを図とコードで説明できる |
| 04 | &、&mut、&str、slice(ex03・ex04) | 借用で元の値を残せる。参照が使われる範囲を説明できる |
| 05 | コンパイル診断、LLDB、panic、境界のバグ | ブレークポイントで仮説を検証し、3つのテストを通せる |
| 06 | struct、enum、match、Vec、Option(ex06) | 状態と「値なし」を型で表現できる |
| 07 | Result、?、I/O、終了コード(ex05) | 失敗をpanicに頼らず呼び出し元へ返せる |
| 08 | impl、trait、generics、iterator、module | 共通動作をtraitで表し、ループとiteratorを比較できる |
| 09 | mini-grepを読み、機能を追加する | 引数・ファイル・検索処理・表示を分けて拡張できる |
| 10 | 要件、回帰テスト、fmt、Clippy、振り返り | 自作CLIを再現可能な手順とテスト付きで説明できる |
最終課題
mini-grep に、まず --ignore-case、次に任意で --count を追加する。最初は標準ライブラリだけでよい。
- 通常の検索結果と行番号を保つ。
- 大文字小文字の扱い、引数の順序、未一致時の終了コードを先に決める。
- 検索成功、未一致、空ファイル、不正な引数、存在しないファイルを試す。
- 学習者自身が書いたテスト、実行例、READMEの使い方を揃える。
出発点のCLIは用意済みだが、拡張課題の解答は入れていない。
図解の使い方
Rust図解 で操作し、必ず対応するRustコードでも確認する。
- 所有権: move・clone・Copyと、共有借用・可変借用の制約を比較する。
- Result: 入力からOk/Errへの分岐を観察する。
- デバッグ: 半開区間の終点を変え、最後の要素が処理されるか予想する。
図は理解を助ける簡略モデル。Rustをブラウザ内でコンパイルする機能はない。新しい疑問が出たら、図と10〜20行程度の実験コードを同じテーマで追加する。
その先
基礎が説明できたら、プロダクト学習の11〜30へ進む。同じ作業ログ「Trail」を、CLI → 保存基盤 → Web → ジョブと復旧 → 保守・配布へ育てる。
入口の Trail v0 は実行できる。各段階には具体的な作業手順、演習、検証、次へ進む条件がある。設計の考え方は メンタルモデル集と対応づけて学ぶ。
最初から全てを覚えない。asyncは保存と同期I/Oの後、unsafeは必要性がある時の専門分岐として扱う。
到達条件を使う理由
学習の順番は、章を読んだ順ではなく、前の小さな作業を自分で再現して説明できるかで決める。例えば所有権では、用語を暗記したかではなく、値がどこへ移動し、いつ借用だけで足りるかを短いコードと実行結果で説明する。失敗したコンパイルも証拠になる。診断の最初の数行を読み、最小例へ戻り、変更前後で何が変わったかを記録する。
各段階で新しい概念を増やし過ぎない。予想してから実行し、出力やエラーを観察して、自分の言葉で理由を書く。この往復を続けると、後で非同期処理や保存を扱う時にも、問題を型・所有者・失敗経路へ分解できる。学習記録には通過したコマンドだけでなく、まだ説明できない点も残す。次の実験の入力になるからである。
図解は実際のコンパイラの代わりにはならない。図で関係を予想し、対応する十行程度のRustを実行し、異なる結果なら仮説を直す。これを完了条件に含める。
一つの段階を終えるたび、変更した行、実行したコマンド、観察した結果を結び付けて残す。後から同じ問題に戻った時、記録が再現可能な説明になる。
理解は、観察可能な小さな根拠から少しずつ作る。焦らない。
参考: The Rust Book と Rust By Example。本を通読するより、各回の疑問に対応する章を読む。
教材のソースと演習は、非公開のKumyuリポジトリの labs/rust にまとまっている。自分の作業環境へcloneして、対象のレッスンと実行例を同じ版で読もう。
2024〜2026:固定された構文表でなく compiler feedback loop を学ぶ
Rust の2024年 project goals は、2024 Edition、より良い async 体験、stable Rust による Linux への進展を主要目標に置いた。Rust 1.85.0 は2025年2月に 2024 Edition を stable にした。最初の10 stage にとって重要なのは、edition が opt-in の互換性境界だという点である。新規 project は意図した edition を明示し、既存 project は cargo fix --edition で移行して diff をレビューする。自動書換えを設計 review と取り違えない。
stage 07 の後に次の実験を行う。edition = "2024" の scratch crate を作り、compile-time の演習として小さな unsafe extern 宣言を一度加えてから消す。別にローカル値を borrow する async || closure を書き、|| async { ... } と比較する。compiler diagnostic、rustc --version の正確な toolchain、await の地点で何を own しているかを記録する。新しい構文を集めるのでなく、compiler の境界を見えるようにするのが目的である。
公式 Rust Blog は2026-10-01に Rust 1.99.0 を掲載しており、この章の現在確認範囲に入る。これは現在の release 事実であり、全 lesson を変更する理由ではない。rustup update stable の後は release note を読み、workspace を変える前に既存 exercise を pin した toolchain で実行する。
AI 文脈も acceptance condition を変えない。Google の2026-10-01 Argon 発表は、C/C++ から Rust への移行に自動・手動 audit、emulation test、review を経て本番へ進むと記す。リンク先 r/rust はコミュニティ反応であり独立検証ではない。初学者は assistant に10行の counterexample を提案させてもよいが、自分で予測し、compile し、説明する。生成された ownership 説明を、対応する小プログラムと test が示すまで受け入れない。
MENTAL MODEL / 考える順序
発表から、自分の判断へ。
発表の主張と、論文・公式ドキュメントの条件を並べて読む。
出典
01自分のノート