Rust チートシート — クイックリファレンス
Rust 2021 の構文・所有権・エラー処理と最もよく使う std API を網羅したチートシート。日常の約80%をカバーします。
Rust Rust 2021 edition
rustc / cargo · コンパイル型 · システム · 関数型 · 並行 · 静的 · 強い型付け · アフィン (ムーブセマンティクス)
おすすめの学習パス
まず cargo new / run と println! → 変数の束縛、所有権、借用(Rust の核)を習得 → match、関数、クロージャを深く学ぶ → Vec / HashMap / イテレータでデータを整理 → トレイトとジェネリクスを理解 → Result と ? でエラー処理 → スレッドと channel で並行処理 → その後ネットワーク、時間、ビルド/テストを必要に応じて学習。FAQ セクションは落とし穴回避に立ち戻るのに最適です。
1.Hello World とビルド環境
Rust プログラムの実行、cargo プロジェクト、ツールチェーン。
最小プログラム
fn main が入口です。println! マクロで出力します。文はセミコロンで終わります。
実行とビルド
cargo run でコンパイルして実行、cargo build でバイナリ生成、cargo check で高速チェック。
cargo プロジェクト
cargo new でプロジェクトを初期化。Cargo.toml でパッケージと依存を宣言。src/ にソース。
edition
edition で言語版を宣言。2021 が現行版。rust-version で最低ツールチェーンを指定。
出力マクロ
println! / print! で出力、eprintln! でエラーストリーム、format! で文字列生成。
コマンドライン引数
std::env::args でコマンドライン引数を取得。先頭はプログラムパス。
複数ファイル
mod でモジュールを宣言。サブモジュールはファイルまたはディレクトリ。use で取り込み。
直接コンパイル
rustc で単一ファイルをコンパイル。cargo 依存なし。練習や小スクリプト向け。
2.変数と束縛
let 束縛、可変性、シャドウイング、スコープ、型。
let と mut
let の束縛は既定で不変。mut で可変に。Rust の変数は既定で不変です。
シャドウイング
同名の let が以前の束縛を覆います(シャドウイング)。型変更も可能。mut とは別物です。
const と static
const はコンパイル時定数。static は静的変数。命名は全大文字スネークケース。
型推論
コンパイラがコンテキストから型を推論。必要なら明示。整数の既定は i32。
分解束縛
let はパターン分解に対応。タプル・構造体・配列を一度に取り出せます。
スコープ
ブロックスコープ {}。変数のライフタイム。内側から外側をアクセス可能。
命名規則
Rust の命名規則。変数/関数は snake_case、型は CamelCase。
型変換
as は明示的な数値変換を行う。From/Into trait は安全な変換に用いる。
3.型システム
基本型、タプル、構造体、列挙型。
基本型
整数、浮動小数点、真偽値、文字。スカラー型とその幅。
整数型
i8〜u128、usize / isize。符号付き/なし。プラットフォーム依存のサイズ。
浮動小数点数
f32 / f64 は IEEE 754 に準拠。NaN、無限大、演算。
char 型
char は Unicode スカラー値で 4 バイトを占める。シングルクォートで囲むリテラル。
タプル
固定長の異種コレクション。インデックスアクセスと分解。空タプルは ()。
構造体
struct は名前付きフィールドを定義。生成・アクセス・更新構文。
列挙型
enum は複数のバリアントを定義。データを持てます。match で網羅的に処理。
ユニット型
() は値なし。関数の既定の戻り値。引数なし戻り値なしの慣習。
4.所有権と参照
所有権、借用、参照、スライス — Rust のメモリ安全性の核。
所有権
値は唯一の所有者を持ちます。スコープ終了で自動解放。コピーではなくムーブ。
参照
&T は不変参照であり、所有権は移動しない。借用後も元の値は引き続き利用できる。
可変参照
&mut T は可変参照。同一スコープで 1 つの変数に対し可変参照は 1 つだけ。
逆参照
* 演算子は参照の指す値にアクセスします。逆参照は参照と対になります。
ライフタイム
'a で参照の有効範囲を注釈。借用チェッカーが有効性を保証。省略規則。
スライス
&[T] は連続要素への参照。文字列スライスは &str。所有権を持ちません。
Deref 自動逆参照
Deref トレイトで &String を &str に自動変換。引数の多相が便利に。
Copy 型
Copy トレイト型は代入でコピーされ、ムーブしない。整数・浮動小数点・bool・char など。
5.制御フロー
if、match、ループ。Rust の制御フローは式ベースです。
if 式
if / else は式で値を返せます。条件に括弧は不要。
match
match は網羅的にマッチします。各分岐は式。パターン・範囲・ガードが使えます。
while ループ
while は条件ループ。条件が真の間繰り返します。
for ループ
for は範囲やイテレータを反復。Rust で優先されるループ。
無限ループ
loop は break までの無限ループ。値を返せます。ラベルも使えます。
break と continue
break はループ終了。continue はその反復をスキップ。ラベル併用可。
if let
if let は単一パターンのマッチを簡潔に書きます。一つのバリアントだけを見たい時に。
while let
while let はパターンがマッチする間ループ。コレクションの逐次処理に。
6.関数
関数定義、戻り値、所有権の移動、クロージャ、ジェネリクス。
関数定義
fn で関数を定義する。引数には型注釈が必要で、関数本体は式である。
戻り値
最後の式が戻り値。セミコロンで文と式を区別。
引数
引数は既定で不変。引数でのパターン分解。参照引数でコピーを回避。
所有権の引数
値で渡すと所有権がムーブ。借用すれば再利用可能。必要なら所有権を返す。
借用引数
&T は読み取り借用、&mut T は可変借用。所有権のムーブを回避。
クロージャ
クロージャは環境の変数をキャプチャします。|引数| 構文。変数に保持・関数に渡せる。
関数ポインタ
fn 型は通常の関数を参照する。fn(T) -> U 構文を用いる。クロージャを fn に変換できる。
ジェネリック関数
ジェネリックパラメータ <T> で型を抽象化。境界を追加可能。型推論。
7.文字列
&str と String、操作、フォーマット、解析、反復。
&str と String
&str は借用された文字列スライス、String は所有権を持つ可変長文字列。
String の操作
追加・挿入・置換・削除など String を変更するメソッド。
フォーマット
format! で文字列を連結。プレースホルダと書式指定。安全で高効率。
文字列スライス
&s[a..b] はバイト単位のスライス。文字境界でのみ可能、さもなくば panic。
文字列の反復
chars() は文字単位、bytes() はバイト単位、char_indices は位置付き。
文字列の解析
str::parse は文字列を数値に解析する。parse::<T>() は目標の型を注釈する必要がある。
文字の操作
char のメソッド: 大小文字、数字判定、空白判定。文字列メソッドと組み合わせ。
文字列メソッド
検索・トリム・分割・判定。よく使う str メソッドをチェーン。
8.コレクション
Vec、HashMap、集合型、イテレータ。
Vec
Vec<T> は可変長配列。長さ可変、要素追加・削除可。参照はスタック、データはヒープ。
Vec の操作
反復・フィルタ・マップ・収集。スライスビューと所有権。
HashMap
HashMap<K, V> はキー/値ペア。ハッシュ実装、順序なし。ルックアップ O(1)。
HashSet
HashSet<T> は一意要素の集合。重複除去・交差・和集合・差集合。
BTree
BTreeMap / BTreeSet はキーが順序付けられて反復可能。性能はハッシュにやや劣る。
イテレータ
Iterator trait がチェーン状の操作を駆動する。評価は遅延され、消費時に実行される。
VecDeque
VecDeque は両端キュー。両端で高効率に追加・削除。リングバッファ。
ネストコレクション
コレクションの組み合わせ。Vec<HashMap>、ネスト HashMap、多次元 Vec。
9.メモリと所有権の拡張
ヒープ割り当て、スマートポインタ、共有所有権。
スタックとヒープ
スタックは固定サイズで高速。ヒープは可変サイズで要確保。所有権が寿命を管理。
Box
Box<T> は値をヒープへ。サイズ確定・所有権のムーブ。再帰型に必須。
Rc
Rc<T> は参照カウントによる共有所有権。シングルスレッド。複数所有者で読み取りのみ。
RefCell
RefCell<T> は実行時に借用規則を検査。内部可変性。借用競合で panic。
Arc
Arc<T> はスレッド安全な参照カウント。複数スレッド間の共有所有権。原子カウンタ。
Mutex
Mutex<T> は内包する値への排他アクセスを提供し、ロックで保護する。Arc と組み合わせれば共有可能かつ可変になる。
アトミック型
AtomicU32 などのアトミック操作。ロックフリーな並行カウンタ。Ordering でメモリ順序。
スマートポインタ
Deref / Drop トレイト。Box / Rc / Arc が実装。ポインタ抽象と自動クリーンアップ。
10.トレイトとジェネリクス
トレイト抽象、実装、ジェネリック境界、多態。
trait 定義
トレイトは共有振る舞いを定義。メソッドシグネチャのみを宣言。インターフェースに類似。
trait の実装
impl Trait for Type で振る舞いを実装。オーファンルール: trait か型の少なくとも一方が自前。
デフォルトメソッド
トレイトのメソッドは既定実装を持てます。上書きは任意。呼び出しは自動選択。
トレイトオブジェクト
dyn Trait は動的ディスパッチ。異種コレクションを実行時に多相的に扱う。
ジェネリクス
ジェネリック型と関数。T で抽象化、コード再利用。単態化でゼロコスト。
ジェネリック境界
T: Trait で境界を指定。where 句、+ で複数境界の合成。
impl ブロック
impl ブロックで関連関数・関連メソッドを定義。self / Self、コンストラクタ慣習。
合成と多態
Rust には継承がありません。trait + 合成で再利用。既定実装が基底クラスの役割を果たす。
11.エラー処理
Result、Option、? 演算子、panic、カスタムエラー。
Result
Result<T, E> は成功値またはエラーを返す。Ok / Err のバリアントを持つ。
unwrap と expect
unwrap は成功なら値を取り、失敗で panic。expect は panic メッセージを付けます。デバッグ用。
? 演算子
? でエラー伝播を簡潔に。Err は自動で戻り、Ok は展開して継続。
Error の実装
標準の Error トレイト。Display + Debug で表示。エラーチェーン。
カスタムエラー
独自のエラー型を設計。列挙バリアントにコンテキストを保持。エラーを分類。
thiserror
thiserror の derive マクロで Display / Error を自動実装。ボイラープレートを大幅削減。
Option
Option<T> は値が無い可能性を表します。Some / None。安全にアクセス。
panic
panic! は回復不能なエラー。スタックを巻き戻しプログラムを終了。バグ時のみ。
12.入出力
標準入出力、ファイルの読み書き、ファイルシステム。
入力の読み込み
stdin から read_line で 1 行を String に読み込み。trim で改行を除去。
ファイルの読み込み
read_to_string で一括読み込み。Read トレイトでストリーム読み込み。
ファイルの書き込み
write / append で書き込み。OpenOptions でモード制御。バッファ書き込み。
ファイルシステム
ディレクトリ作成、削除、リネーム、存在判定。パス操作。
BufRead 行ごと
BufRead トレイットで行単位読み込み。lines()、read_line、split。
出力と書き込み
print! / println! / eprintln!。write! / writeln! は任意のライターへ。
標準ストリーム
stdin / stdout / stderr。インタラクティブとパイプの両方に対応。
バイト I/O
read でバイトをバッファに。バイナリをストリーム処理。write_all で全部書き込み。
13.よくある落とし穴
Rust 初学者が最も踏みやすい落とし穴と正しい書き方。
ムーブ後の使用
値がムーブされた後は利用できない。所有権を保ちたい場合は借用するか clone を使う。
借用競合
不変借用と可変借用は同時に存在できません。スコープで借用範囲を縮める。
ダングリング参照
ローカル変数の参照を返すとダングリング参照になる。所有権を持つ値で返すかライフタイムを付けて返す。
String の連結
+ は左辺をムーブします。繰り返し + は非効率。format! か push_str を使う。
インデックス型
インデックスと長さは usize。コレクションのインデックス型が合わないケースに注意。
match 分岐の型
match の全分岐は同じ戻り値型を持つ必要があります。欠けた分岐は _ で網羅。
クロージャのキャプチャ
クロージャは自動で借用またはムーブ。同時借用は競合。move で明示的にムーブ。
整数オーバーフロー
デバッグビルドはオーバーフローで panic。リリースビルドは折り返し。明示処理か大きい型。
14.並行処理
スレッド、channel、共有状態、Send / Sync。
スレッド
thread::spawn で新スレッド起動。join で完了待機。戻り値も受け取れる。
move クロージャ
move クロージャはキャプチャした値をスレッド内へムーブし、借用によるダングリングを防ぐ。
channel
mpsc はマルチプロデューサー・シングルコンシューマー。send / recv でデータ転送。型安全。
複数プロデューサー
Sender をクローンして複数プロデューサー。レシーバは共有。
共有可変
Arc<Mutex<T>> で複数スレッド間の共有可変データ。ロックがアクセスを保護。
scoped スレッド
thread::scope で 'static でないデータを借用。所有権のムーブ不要。
rayon 並列
rayon の並列イテレータ。par_iter を iter の代わりに使うだけ。データ並列が簡単に。
Send と Sync
Send はスレッド間で移動可能。Sync は参照共有可能。並行の安全性をコンパイル時に保証。
15.ネットワーク
TCP、UDP、HTTP、サードパーティ製ネットワーク crate。
TCP 接続
TcpStream で接続を確立。read / write でバイト送受信。ストリーム型プロトコル。
TCP リッスン
TcpListener でバインドして accept。複数接続はスレッドで処理。
HTTP リクエスト
reqwest で HTTP リクエストを送信。JSON リクエスト/レスポンスに対応。
HTTP サーバー
axum で HTTP サービスを構築。ルーティングとハンドラ。非同期対応。
URL 処理
url crate で URL のパース・構築。クエリパラメータ。
IP パース
std::net::IpAddr で IP をパース。IPv4 / IPv6 を判別。
UDP
UdpSocket はコネクションレスのデータグラム。send_to / recv_from。ハンドシェイク不要。
DNS 解決
ToSocketAddrs でホスト名を解決。アドレスのイテレータを返す。
16.時間と日付
SystemTime、Instant、Duration、chrono。
SystemTime
SystemTime はシステム時刻。現在時刻を取得して UNIX エポックと比較。
Instant 計測
Instant はモノトニッククロック。経過時間の計測に使い、システム時刻変更の影響を受けない。
Duration
Duration は時間の長さ。秒 / ナノ秒精度。演算と単位変換。
chrono 現在時刻
chrono crate で日時を扱う。Utc / Local タイムゾーン。人間に可読な書式。
フォーマット出力
format で日時を整形。strftime 風のプレースホルダ。
文字列のパース
DateTime::parse_from_str で文字列をパース。ISO 8601 も対応。
時刻演算
時刻の加算・減算、差分計算、範囲判定。
タイムゾーン処理
FixedOffset は固定タイムゾーン。ローカルオフセットを扱い、ゾーン間変換も可能。
17.プロセスと環境
コマンドライン引数、環境変数、子プロセス、パス。
引数と環境
std::env で引数と環境変数を取得。args と var。
clap 引数解析
clap でコマンドライン引数を解析。サブコマンド・オプション・自動ヘルプ。
std::process
終了コード、Command での子プロセス起動、現在プロセスの情報。
Command 子プロセス
Command で子プロセスを制御。引数、環境、パイプ、出力キャプチャ。
PathBuf
Path / PathBuf でパスを操作。連結・コンポーネント・正規化。クロスプラットフォーム。
作業ディレクトリ
カレントディレクトリ、ディレクトリ変更、ホームディレクトリ。パス関連操作。
ディレクトリの走査
read_dir でディレクトリを列挙。再帰は自前実装、種類でフィルタ可。
シグナル処理
ctrlc crate で Ctrl-C を捕捉。グレースフルシャットダウンとリソース解放。
18.正規表現
regex crate によるマッチ、キャプチャ、置換、分割。
正規表現のコンパイル
Regex::new でコンパイル。生文字列 r#... を使用。コンパイルは重いので再利用。
マッチ判定
is_match でマッチ有無を判定。部分マッチが既定。完全一致はアンカーを付ける。
キャプチャグループ
キャプチャグループで部分文字列を抽出する。captures はグループを返し、名前付きグループも利用可能。
全マッチ
find_iter ですべてのマッチを走査。captures_iter はグループ付き。
置換
replace でマッチを置換。$1 でグループ参照。replace_all ですべて置換。
分割
正規表現で文字列を split。splitn で分割数を制限。
よくあるパターン
よくある正規表現レシピ。メール、URL、電話番号、IP、文字クラス。
フラグと大小文字
(?i) などのインラインフラグ。RegexBuilder での詳細設定。
19.ビルドとテスト
cargo ビルド、ユニットテスト、lint、リリース設定。
cargo build
プロジェクトをビルド。デバッグ/リリースプロファイル。成果物の場所。差分コンパイル。
ユニットテスト
#[test] 属性。cargo test で実行。assertion マクロ。
ドキュメンテーションテスト
/// ドキュメントコメント内のコードはテストとして実行される。cargo test が検証。統合テスト。
依存関係管理
Cargo.toml で依存を宣言。SemVer。cargo update。
clippy チェック
cargo clippy がコードを検査。潜在バグとスタイルの問題を発見。
コードフォーマット
cargo fmt が rustfmt で整形。チームで一貫したスタイル。
リリース設定
[profile.release] で最適化設定。バイナリのストリップや LTO など。
ドキュメント生成
cargo doc が API ドキュメントを生成。rustdoc のマークアップ。リリース前にドキュメントテストを実行。
このチートシートについて
このページは Rust 2021 版の自己完結型チートシートです。実プロジェクトで日常の約80%を扱う言語コアと最もよく使う std API をカバーします。内容はモダンな慣用法を優先: ? でのエラー伝播、match での網羅、イテレータで手書きループを置換、String と &str を厳密に区別。权威あるリファレンスは Rust 公式ブックと標準ライブラリドキュメントを参照してください。 19 のセクションはそれぞれ 1 つのテーマに焦点を当てています — 最初のプログラムから、所有権、トレイト、並行処理、よくある落とし穴まで。各セクションは 8 つのサブトピック(各 5〜20 行)に分かれ、合計約 150 トピック。コードスニペットは意図的に短く自己説明的。 すべてブラウザ内で実行されます — アップロードも追跡もありません。このページは GuruToolkit の無料開発者ツールセットの一部です。スニペットは自由に利用できますが、保証はありません。
バージョン 2.1.0