コンテンツにスキップ

Rustチートシート

レッスンを最初から読み直さずに、さっと確認したいことをまとめた早見表です。各セクションから、くわしく説明しているページへリンクしています。

キーワード 意味
let 変数を宣言する(変数)
mut 変数や参照を可変にする(変数)
const 定数を宣言する(変数)
fn 関数を宣言する(関数)
struct 構造体を宣言する(構造体)
enum 列挙型を宣言する(列挙型)
impl 型にメソッドを追加する(構造体、トレイト)
trait トレイトを宣言する(トレイト)
match 値をパターンマッチングする(match)
if let / while let 1つのパターンだけにマッチさせる(if let / while let)
loop / while / for 3種類のループ(loop、while、for)
break / continue ループを制御する(break / continue)
mod モジュールを宣言する(モジュール)
pub 項目をモジュールの外に公開する(モジュール)
use パスをスコープに持ち込む(モジュール)
unsafe 生ポインタなど、安全性を自分で保証する操作を使えるようにする(unsafe Rust)
move クロージャに、キャプチャした値の所有権を強制的に移す(並行処理)
& / &mut 値を借用する / 可変で借用する(借用)
メソッド 動作
.len() バイト単位の長さ
.trim() 前後の空白を取り除く
.to_uppercase() / .to_lowercase() 大文字・小文字に変換する
.contains(pat) 部分文字列やパターンが含まれているか
.replace(from, to) 一致する部分をすべて置き換える
.push_str(s) &str を末尾に追加する
.push(c) char を1文字だけ末尾に追加する
.chars() 1文字ずつ順に取り出す
.split(pat) 区切って、部分文字列のイテレータにする
.parse::<T>() テキストを別の型に変換する(Result を返す)

くわしい説明と例は文字列のページを見てください。

メソッド 動作
.push(x) 末尾に追加する
.pop() 最後の要素を取り除いて返す(Option)
.remove(i) インデックス i の要素を取り除く
.len() 要素の数
.is_empty() 要素が1つもないか
.get(i) インデックスで安全に取り出す(Option を返し、パニックしない)
.iter() 参照で順に取り出す
.contains(&x) 値が含まれているか
.sort() その場で並べ替える
.sort_by_key(|x| ...) フィールドや計算したキーで並べ替える
.dedup() 連続する重複を取り除く(先に並べ替えておく)

くわしい説明と例はベクタ、並べ替えと検索、イテレータのページを見てください。

どのコレクションを使えばいい?

Section titled “どのコレクションを使えばいい?”
型 こんなときに使う
Vec<T> 順番があり、伸び縮みするリストがほしい
HashMap<K, V> キーから値をすばやく探したい
HashSet<T> 重複のない要素を持ち、「これは入っている?」をすばやく調べたい
BTreeMap<K, V> キーと値のペアを、キーの順に並べて持ちたい
VecDeque<T> キューがほしい(両端で追加・取り出しができる)

くわしい説明と例はHashMapとHashSetとBTreeMapのページを見てください。

メソッド 使える型 動作
.unwrap() 両方 値を取り出す。None/Err ならパニックする
.expect("msg") 両方 .unwrap() と同じだが、パニック時のメッセージを指定できる
.unwrap_or(default) 両方 値を取り出す。なければ代わりの値を使う
.is_some() / .is_none() Option どちらのバリアントかを調べる
.is_ok() / .is_err() Result どちらのバリアントかを調べる
? 両方 None/Err なら、その場で早めに return する

くわしい説明と例はOptionとResultのページを見てください。

フォーマット指定子(println!、format!)

Section titled “フォーマット指定子(println!、format!)”
指定子 表示されるもの
{} 通常の表示(Display トレイトが必要)
{:?} デバッグ表示
{:#?} 見やすく整形したデバッグ表示
{:.2} 小数点以下2桁
{:5} 幅5になるように空白で埋める
{name} name という変数をその場に埋め込む

くわしい説明と例は出力のページを見てください。

コマンド 動作
cargo new name 新しいプロジェクトを作る
cargo run ビルドして実行する
cargo check ビルドせずに、すばやくエラーをチェックする
cargo test テストを実行する
cargo add crate 依存クレートを追加する
cargo fmt コードを整形する
cargo clippy よくあるミスがないかコードをチェックする(リント)
cargo build --release 最適化したバイナリをビルドする

くわしい説明と例はCargoとクレートのページを見てください。

書き方 意味
1..5 1から5の手前まで(5は含まない)
1..=5 1から5まで(5を含む)
..3 最初から3の手前まで(3は含まない)
2.. 2から最後まで
.. すべて

くわしい説明と例はforとスライスのページを見てください。

やりたいこと クレート レッスン
JSON(やその他の形式)を扱う serde + serde_json SerdeでJSONを扱う
非同期処理、タイマー、ネットワーク tokio async/await
コマンドラインインターフェース clap clapでCLIツール
手軽なエラー処理 anyhow、thiserror anyhowとthiserror
乱数 rand 乱数
正規表現 regex 正規表現
日付と時刻 chrono 日付と時刻
ログ出力 log + env_logger、tracing ログ出力
Webサーバー axum AxumでWeb API

どれも cargo add <クレート名> で追加できます。よいクレートの選び方はCargoとクレートを見てください。