Rust入門の新たな決定版!
Rustを基礎からきちんと学びたい方におすすめの1冊です。「解説」「例題」「練習問題」3つのステップで、学習ハードルを少しずつ取り除き、Rustでプログラミングを行う際に必要な知識・概念・機能を体系的かつ網羅的に身につけられるようにしています。
更新履歴
- 正誤訂正:2026年6月21日 更新
目次
- 第1章 イントロダクション
- 1.1 Rustの特徴
- 1.1.1 Rustの登場と成長
- 1.1.2 高速で優れたメモリ効率
- 1.1.3 メモリ安全性の確保
- 1.1.4 優れた並行性
- 1.1.5 自動テスト機能
- 1.1.6 モジュールシステムとパッケージマネージャーCargo
- 1.1.7 エディションとリリースチャネル
- 1.1.8 マルチパラダイムなプログラミング言語
- 1.2 Rustプログラムを開発/実行するための基本環境
- 1.2.1 Windowsにおける環境構築
- 1.2.2 macOSにおける環境構築
- 1.2.3 拡張機能のインストール(Windows/macOS共通)
- 1.2.4 Rustのフォルダーとプログラム
- 1.3 Rustプログラミングの基本
- 1.3.1 基本的なプログラムの作成と実行
- 1.3.2 ビルドと実行のその他の方法
- 1.4 ソースコードの全体像
- 1.4.1 文
- 1.4.2 式
- 1.4.3 関数
- 1.4.4 ブロック
- 1.4.5 名前空間とモジュール
- 1.4.6 コメント
- 1.4.7 アイテム
- 1.5 デバッグの基本
- 1.5.1 デバッグの構成の作成
- 1.5.2 ブレークポイントによる停止
- 1.5.3 ステップ実行
- この章の理解度チェック
- 第2章 Rustの基本
- 2.1 変数
- 2.1.1 変数の宣言
- 2.1.2 識別子の命名
- 2.1.3 よりよい識別子のためのルール
- 2.1.4 定数
- 2.1.5 パターン記法
- 2.1.6 シャドーイング
- 2.2 データ型
- 2.2.1 データ型の分類
- 2.2.2 整数型
- 2.2.3 浮動小数点型
- 2.2.4 論理値型
- 2.2.5 テキスト型(単独文字)
- 2.2.6 テキスト型(文字列)
- 2.3 リテラル
- 2.3.1 整数リテラル
- 2.3.2 浮動小数点リテラル
- 2.3.3 文字リテラル
- 2.3.4 文字列リテラル
- 2.4 シーケンス型
- 2.4.1 配列型
- 2.4.2 タプル型
- 2.5 型変換
- 2.5.1 明示的な変換(型強制、キャスト)
- この章の理解度チェック
- 第3章 演算子
- 3.1 算術演算子
- 3.1.1 算術単項演算子
- 3.1.2 除算/剰余算とデータ型
- 3.1.3 桁あふれ(オーバーフロー)
- 3.1.4 ゼロによる除算
- 3.1.5 算術演算子のトレイト
- 3.2 代入演算子
- 3.2.1 シーケンス型の代入
- 3.2.2 Copyトレイト
- 3.2.3 複合代入演算子のトレイト
- 3.3 比較演算子
- 3.3.1 同値性と大小の比較
- 3.3.2 シーケンス型の比較
- 3.3.3 比較演算子のトレイト
- 3.4 論理演算子
- 3.4.1 ビット論理演算子
- 3.4.2 ビットシフト演算子
- 3.5 遅延論理演算子
- 3.5.1 短絡評価
- 3.6 演算子の優先順位と結合規則
- 3.6.1 優先順位
- 3.6.2 結合規則
- この章の理解度チェック
- 第4章 制御構文
- 4.1 条件分岐
- 4.1.1 if式──単純分岐
- 4.1.2 if式──多岐分岐
- 4.1.3 if式──入れ子構造
- 4.1.4 match式──単純な分岐
- 4.2 繰り返し処理
- 4.2.1 while式
- 4.2.2 for式
- 4.2.3 loop式
- 4.3 繰り返しの制御
- 4.3.1 break式
- 4.3.2 continue式
- 4.3.3 繰り返しのネストとbreak式/continue式
- 4.3.4 ラベル
- 4.4 パターンマッチング
- 4.4.1 match式
- 4.4.2 if let式
- 4.4.3 while let式
- 4.4.4 for式
- 4.4.5 let文
- 4.4.6 let else文
- この章の理解度チェック
- 第5章 関数
- 5.1 関数の基本
- 5.1.1 関数定義と呼び出し
- 5.1.2 関数名
- 5.1.3 仮引数と実引数
- 5.1.4 戻り値
- 5.1.5 修飾子
- 5.2 関数に関するその他の事項
- 5.2.1 変数のスコープ
- 5.2.2 関数からの脱出
- 5.2.3 const関数
- 5.2.4 Rustにはない関数機能
- 5.2.5 再帰関数
- 5.3 関数ポインター
- 5.3.1 関数アイテム型
- 5.3.2 関数ポインター型
- 5.4 クロージャ
- 5.4.1 クロージャの基本
- 5.4.2 キャプチャー
- この章の理解度チェック
- 第6章 所有権と借用
- 6.1 所有権
- 6.1.1 所有権の基本
- 6.1.2 所有権とメモリ安全
- 6.1.3 所有権とトレイト
- 6.1.4 所有権の明示的な複製
- 6.1.5 シーケンス型と所有権
- 6.1.6 関数と所有権
- 6.2 借用
- 6.2.1 参照とは
- 6.2.2 ミュータブルな参照
- 6.2.3 参照の制約
- 6.2.4 無効な参照
- 6.2.5 参照外し
- 6.3 スライス
- 6.3.1 ミュータブルなスライス
- 6.3.2 例 スライスの効用
- 6.3.3 数列
- 6.4 クロージャと所有権
- 6.4.1 キャプチャーがない場合
- 6.4.2 外部変数をキャプチャーする場合
- この章の理解度チェック
- 第7章 ライブラリ
- 7.1 ライブラリの利用方法
- 7.1.1 外部クレートの利用
- 7.2 文字列操作
- 7.2.1 文字列を消去する
- 7.2.2 文字列長の長さを取得する
- 7.2.3 文字列が空であるかを判定する
- 7.2.4 文字列を検索する
- 7.2.5 文字列に特定の文字列が含まれるかを判定する
- 7.2.6 文字列を特定の区切り文字列で分割する
- 7.2.7 文字列の一部を置換する
- 7.2.8 文字列を整形する
- 7.3 正規表現
- 7.3.1 文字列が正規表現にマッチしたか判定する
- 7.3.2 正規表現で文字列を検索する
- 7.3.3 正規表現で文字列をグローバル検索する
- 7.3.4 キャプチャーグループを取得する
- 7.3.5 正規表現フラグでマッチング時の挙動を制御する
- 7.3.6 例 正規表現による検索
- 7.3.7 正規表現で文字列を置換する
- 7.3.8 正規表現で文字列を分割する
- 7.4 日付/時刻
- 7.4.1 日付/時刻を生成する
- 7.4.2 年月日、時分秒などの時刻要素を取得する
- 7.4.3 日付/時刻値を整形する
- 7.4.4 日付/時刻を加算/減算する
- 7.4.5 日付/時刻値の差分を取得する
- 7.5 ファイル入出力
- 7.5.1 テキストをファイルに書き込む
- 7.5.2 テキストファイルを読み込む
- 7.5.3 ファイルモード(OpenOptions構造体)
- 7.5.4 標準入出力を使う
- 7.5.5 バイナリファイルの入出力
- 7.6 ディレクトリ/ファイル操作
- 7.6.1 パスの基本種類を判定する
- 7.6.2 パスを分解する
- 7.6.3 パスを変更する
- 7.6.4 ディレクトリを作成する
- 7.6.5 ファイル/ディレクトリを削除する
- 7.6.6 ファイル/ディレクトリ名を変更する
- 7.6.7 ファイルをコピーする
- 7.7 その他のライブラリ
- 7.7.1 数値計算
- 7.7.2 ロガー
- 7.7.3 シリアライズとデシリアライズ
- 7.7.4 10進数による小数点演算
- この章の理解度チェック
- 第8章 コレクション
- 8.1 コレクションの基本
- 8.1.1 ジェネリック構文
- 8.1.2 基本的なコーディング手法
- 8.2 リスト
- 8.2.1 Vec(シンプルなリスト)
- 8.2.2 LinkedList(連結リスト)
- 8.3 マップ
- 8.3.1 HashMap(ハッシュマップ)
- 8.3.2 BTreeMap(ソート済みマップ)
- 8.4 セット
- 8.4.1 HashSet(ハッシュセット)
- 8.4.2 BTreeSet(ソート済みセット)
- 8.5 キュー
- 8.5.1 VecDeque(両端キュー)
- 8.5.2 BinaryHeap(優先度付きキュー)
- 8.6 イテレータ
- 8.6.1 基本的な操作
- 8.6.2 イテレータ内の検索
- 8.6.3 新たなイテレータの生成
- 8.6.4 新たなコレクションの生成
- この章の理解度チェック
- 第9章 構造体とトレイト
- 9.1 構造体
- 9.1.1 構造体の定義
- 9.1.2 構造体のインスタンス化
- 9.1.3 フィールドへのアクセス
- 9.1.4 関連関数(メソッド)
- 9.1.5 特殊な構造体
- 9.2 ジェネリクス
- 9.2.1 ジェネリック型の定義
- 9.2.2 メソッドの実装
- 9.2.3 型パラメーターの既定値
- 9.3 トレイト
- 9.3.1 トレイトの定義
- 9.3.2 トレイトの実装
- 9.3.3 トレイト境界
- 9.3.4 トレイトを使う関数
- 9.3.5 関連型
- 9.3.6 トレイトの継承
- 9.3.7 derive属性
- 9.4 列挙体
- 9.4.1 列挙体の定義
- 9.4.2 列挙体のインスタンス化
- 9.4.3 列挙子の内部値
- 9.4.4 タグ付き共用体
- 9.4.5 メソッドの実装
- 9.4.6 derive属性
- この章の理解度チェック
- 第10章 スマートポインター
- 10.1 ボックス(Box<T>構造体)
- 10.1.1 スカラー型とボックス
- 10.1.2 配列とボックス
- 10.1.3 構造体/列挙体とボックス
- 10.1.4 参照外しと解放
- 10.2 参照カウンター付きボックス(Rc<T>)
- 10.2.1 参照カウンター付きボックス
- 10.2.2 参照カウンターの確認
- 10.2.3 可変なボックスは不可
- 10.3 不変オブジェクトを可変のように扱うスマートポインター(Cell<T>/RefCell<T>構造体)
- 10.3.1 内部可変性パターン
- 10.3.2 Cell<T>構造体
- 10.3.3 RefCell<T>構造体
- この章の理解度チェック
- 第11章 エラー処理
- 11.1 回復不能なエラー処理
- 11.1.1 Panicによるプログラムの終了
- 11.1.2 unwrapメソッド
- 11.1.3 panic!マクロ
- 11.1.4 バックトレース
- 11.2 回復可能なエラー処理
- 11.2.1 Result列挙体
- 11.2.2 Result列挙体のメソッド
- 11.2.3 エラーの委譲
- 11.2.4 ?演算子によるエラーの委譲
- この章の理解度チェック
- 第12章 モジュールシステム
- 12.1 パッケージとクレート
- 12.1.1 パッケージ
- 12.1.2 クレート
- 12.2 モジュール
- 12.2.1 モジュールの定義
- 12.2.2 パス式
- 12.2.3 アクセス制御
- 12.2.4 別ファイルへの切り離し
- 12.3 ワークスペース
- 12.3.1 ワークスペースの構築
- 12.3.2 モジュールの関数呼び出し
- 12.3.3 ワークスペースの設定
- この章の理解度チェック
- 第13章 テスト
- 13.1 単体テスト
- 13.1.1 テスト構文
- 13.1.2 テストの実行
- 13.1.3 標準出力の利用
- 13.1.4 アサーションマクロ
- 13.1.5 should_panic属性
- 13.1.6 Result型を返すテスト関数
- 13.2 結合テスト
- 13.2.1 testsフォルダー
- 13.2.2 結合テストの実行
- 13.3 ドックテスト
- この章の理解度チェック
- 第14章 マクロ
- 14.1 宣言的マクロ
- 14.1.1 宣言的マクロの定義
- 14.1.2 マクロ呼び出しの展開
- 14.1.3 マクロの衛生性
- 14.2 手続き的マクロ
- 14.2.1 手続き的マクロのパッケージ構成
- 14.2.2 関数風マクロ
- 14.2.3 deriveマクロ
- 14.2.4 属性風マクロ
- この章の理解度チェック
- 第15章 高度なプログラミング
- 15.1 マルチスレッド処理
- 15.1.1 並列処理と非同期処理
- 15.1.2 スレッドの作成/実行
- 15.1.3 スレッド間のデータ共有
- 15.1.4 スレッド間の通信
- 15.2 async/await
- 15.2.1 非同期ランタイム
- 15.2.2 非同期関数とタスク
- 15.2.3 非同期関数の利用例
- 15.3 属性
- 15.3.1 属性の記述位置
- 15.3.2 属性の構文
- 15.3.3 組み込み属性
- 15.4 ライフタイム
- 15.4.1 参照とライフタイム
- 15.4.2 ライフタイム注釈
- 15.4.3 静的ライフタイム
- この章の理解度チェック
- コラム
- その他の開発環
- データとメモリ領域
- ドキュメントの作成
- プロファイル
正誤表
| 該当頁 | 該当箇所 | 修正刷 |
|---|---|---|
| 訂正箇所 | 訂正事項 | 更新日 |
| p.IV | サンプルファイルについて /chap07 の配下 | - |
| /lib-fileio が2つある | 正しくは1つです | 2026/06/21 New |
FAQ
現在、FAQはありません。
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。