PR:この記事にはアフィリエイトリンクが含まれます。
Rustを学び始めると、所有権や借用のエラーに驚くことがあります。コンパイラが何を守ろうとしているか分かれば、実行前に不具合を防ぐ仕組みも見えてきます。
本を読むときは用語を覚えるだけでなく、コードを動かす場面まで想像できると学びが進みます。所有権、ライフタイム、エラー処理を実装の流れに結び付ければ、知識を自分のコードで使えるようになります。
本の早見表
5冊の特徴を一覧にしました。価格は希望小売価格などの参考額で、実売価格は時期や販売店によって変わります。
| 本 | 参考価格(税込) | 主な内容 |
|---|---|---|
実践Rust入門[言語仕様から開発手法まで] | 4,378円 | 所有権、Result、パーサやCLIの実装 |
コンセプトから理解するRust | 3,520円 | 他言語との比較、仕様とエラーの読み解き |
Rustの練習帳 | 3,960円 | CLIツールを作りながら学ぶ実践演習 |
Effective Rust | 3,740円 | 入門後のコード改善、標準的なエラー処理 |
プログラミングRust 第2版 | 5,280円 | Rust 2021、所有権から実例まで幅広く解説 |
5冊は、言語全体をたどる入門書と仕様の考え方を掘り下げる解説書に分かれます。道具を作る演習書や、コード改善を扱う実践書もあります。自分の課題に照らせば、読み進める目的が定まります。
所有権は値の責任者、借用は一時的な参照と捉えるのが学習の軸です。そこにライフタイムとエラー処理を重ねると、Rustが安全性をどう支えているかが少しずつつながります。
所有権の感覚
Rustでは、値ごとに所有者が決まっています。所有者がスコープを抜ければ値も片付けられるため、誰がメモリを解放するかが明快です。使い終わった値を追いやすい仕組みですね。
let a = String::new(); let b = a; のようにStringを代入すると、値の所有権が移動します。以降はbが所有者なので、aは使えません。二重解放や解放済みの値を読む事故を防ぐルールです。
整数などの単純な型はCopyで、代入後も元の変数を使えます。Stringのようにヒープ領域を持つ型との違いを試すと、値が移動する条件をつかみやすくなります。
関数に所有権を渡さず値を読ませるなら、参照を引数にします。fn length(s: &String) -> usizeでは、関数は借りた値を読むだけ。所有権の移動と参照による借用を使い分け、必要な場合にcloneを選べば、コピーのコストにも目が向きます。
借用と寿命
借用には大切な規則があります。同じ値を変更する参照は同時に一つだけ。読み取り専用の参照は複数作れます。読みながら同時に変更する矛盾を防ぎ、データ競合を避ける仕組みです。
たとえばlet view = &items; items.push(value);では、viewを後で使う間にリストを変更しようとすると、コンパイラに止められます。先に必要な情報を取り出すか、借用の範囲を短くすれば解決できます。
ライフタイムは参照が有効な範囲を表します。参照の寿命を延ばす魔法ではありません。範囲は多くの場合コンパイラが推論しますが、戻り値が引数の参照を含む関数では、参照どうしの関係を示すことがあります。
fn longest<'a>(x: &'a str, y: &'a str) -> &'a strは、戻り値が引数のどちらか短いほうの有効範囲を超えないことを示す例です。注釈の意味をつかめば、返された参照を安全に使える理由も読み取れます。
エラーの分け方
Rustでは、値がない可能性をOption<T>で、失敗を含む処理結果をResult<T, E>で表せます。値がないこととファイルを読めないことは別の状態です。型で区別できるのが実用的ですね。
Resultを返す関数では、呼び出し側が成功と失敗の両方を扱います。?を使えば、失敗を呼び出し元へ返す処理を簡潔に書けます。利用者に何を伝えるかも考えておきたいところです。
コマンドライン引数を数値に変換するとき、入力が不正なら原因を表示して終了できます。エラーに対象の引数や処理名を添えておくと、利用者にも開発者にも直す場所が伝わりやすくなります。
panic!は、想定外の状態や続行すると危険な場合に使います。通常ありうる入力ミスにはResultを返し、回復できない不変条件の破れにはパニックを検討する。この使い分けがコードの読みやすさを左右します。
実装例の意味
小さな関数で所有権を試したら、入力を受け取り、変換して結果を返すプログラムへ進みます。処理の流れを追うと、所有する値や参照する場所に加え、失敗をどこで返すかも具体的になります。
テキストのパーサなら、不正な入力と正常な結果を扱います。CLIツールでは引数の読み取りからファイル操作や出力へ処理が続き、テストまで扱うとRustの型がどこで役立つかを実感できます。
演習やテストが用意された本では、まず答えを見ずにコードを動かすのがおすすめです。コンパイラの指摘を読み、守ろうとしているルールを説明できれば、似た問題にも対応しやすくなります。
実践Rust入門
『実践Rust入門[言語仕様から開発手法まで]』は576ページで、所有権、借用、ライフタイムからOptionやResultまでを扱う入門書です。言語仕様を押さえたうえで実装例にも進みたい初学者におすすめします。
四則演算のパーサやCLIツールに加え、WebアプリやJSON APIも作成し、テストを扱います。パーサ実装を通じてエラー処理を具体的に学べるのも特徴です。
2019年発行で、著者はκeen、河野達也、小松礼人。参考価格は4,378円(税込)です。Rustの基本から複数の実装例まで広く学びたい初学者には、この本がおすすめです。
コンセプトから理解
『コンセプトから理解するRust』は360ページで、所有権、ライフタイム、ジェネリクス、トレイトなどを他言語のコードと比較して解説します。仕様の背景まで考えたいITエンジニアにおすすめです。
コンパイラのエラーメッセージを読み解くのも本書の特徴です。エラーメッセージを読むことで、指摘の背後にある借用規則や型の意図も考えられます。他言語で書いた経験も理解の手掛かりになるでしょう。
2022年発行、著者は原旅人。参考価格は3,520円(税込)です。Rustがそのルールを採用する理由を知りたい人には、本書がおすすめです。
Rustの練習帳
『Rustの練習帳』は472ページの演習書です。echoやcat、headなどのCLIツールを作り、wcやfind、grepにも取り組みます。対象はプログラミング経験のあるRust初心者から経験者までです。
ツールの実装を積み上げながら、単体テストや統合テスト、解答例も扱います。Result型を使ったエラー処理や文字列をエラーに変換する例もあり、入力の失敗を含むコードに取り組めます。
2024年発行、Ken Youens-Clark著、中山光樹訳。参考価格は3,960円(税込)です。自分で手を動かす時間を取り、小さな道具を作りながら学びたい人におすすめします。
Effective Rust
『Effective Rust』は304ページで、入門書を読み終えた人向けの一冊です。Rustコードを改善する35項目で構成され、生存期間や借用チェッカの考え方を扱います。設計判断と結び付けて学びたい人におすすめです。
Option、Result、標準のError型に加え、むやみにpanicさせない方針も扱います。Cargo、Clippy、テストにも触れており、動くコードを保守しやすく整える視点が得られます。
2024年発行、David Drysdale著、中田秀基訳。参考価格は3,740円(税込)です。所有権の基礎を学んだ後、エラー処理やコード品質を見直すなら、本書をおすすめします。
プログラミングRust
『プログラミングRust 第2版』はRust 2021対応で688ページです。所有権と移動から参照や安全性、生存期間パラメータまで幅広く扱い、CLI引数やファイル操作の例も載っています。
エラー処理はパニックやResultから、?による伝播、複数種類のエラー、カスタムエラー型まで解説。検索と置換、並列マンデルブロ描画などの題材を通して、言語機能が一つのプログラムでどう働くかを追えます。
2022年発行、Jim Blandy、Jason Orendorff、Leonora F. S. Tindall著、中田秀基訳。参考価格は5,280円(税込)です。基礎から幅広い実例まで、一冊を長く参照したい人には本書をおすすめします。
結論
所有権やライフタイムを学んで実装例にも進みたい人には、『実践Rust入門』がおすすめです。他言語との違いから仕様を理解したい人には、『コンセプトから理解するRust』をすすめます。演習を重ねるなら『Rustの練習帳』を選んでください。
入門後にコードの質やエラー設計を見直す人には『Effective Rust』をおすすめします。所有権から幅広い実例まで一冊で参照したい人には、『プログラミングRust 第2版』をすすめます。学習段階に合う本なら、価格にも納得しやすいでしょう。
コンパイラの指摘を読み取って修正を重ねると、理解が深まります。参考価格は購入時期や販売店で変わるため、予算と読みたい内容を照らし合わせ、自分の次の一歩に合う本を選んでください。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。
![実践Rust入門[言語仕様から開発手法まで]](https://m.media-amazon.com/images/I/51e5B1Zx+yL._SL500_.jpg)





