サンプルコード
Rust のサンプルコード一覧
Rust で「○○するには」を解決するコードサンプル。28 件。
他の言語から探す
カードの実行確認済みは、この言語のコードを実際に実行して出力を確認したことを表す。静的確認は、実行環境を用意できず、構文と公式 API ドキュメントで確認したものである。
正規表現で部分文字列を取り出すには
captures は Option<Captures> を返すので、if let で取り出してから添字を引く。番号での添字と名前での添字のどちらも使えるが、存在しない添字はパニックになるため、パターンとコードを同時に直す。値が無いかもしれないグループは get を使って Option で受ける。
静的確認
文字列が正規表現に一致するか調べるには
regex クレートを Cargo.toml の依存に追加してから使う。Regex::new は Result を返すため、リテラルのパターンなら unwrap でよいが、外部入力から作る場合は失敗を扱う。同じパターンを繰り返し使うときは、ループの外で 1 度だけ生成する。
静的確認
正規表現で置換するには
replace_all が全件、replace が最初の 1 件で、どちらも Cow<str> を返すため元の文字列は変わらない。置換文字列の中では $1 や $name で後方参照できる。存在しない番号や名前を書いた場合は、エラーにならず空文字に置き換わる。
静的確認
2つの日付の差を求めるには
標準ライブラリにはカレンダー上の日付型が無いため、日付の差を取るには chrono を使う。NaiveDate 同士の引き算は TimeDelta を返し、num_days() で日数を取り出す。タイムゾーンを持たせたい場合は NaiveDate ではなく DateTime<Tz> 側を使う。
静的確認
文字列が含まれるか調べるには
str::contains は Pattern を受け取るため、&str だけでなく char や「char を判定するクロージャ」も渡せる。大文字小文字は既定で区別するので、無視したいときは to_lowercase で新しい String を作ってから判定する。位置が必要なときの find は -1 ではなく Option<usize> を返す。
静的確認
配列から重複を除くには
HashSet::insert は新規挿入のときだけ true を返すので、filter と組み合わせると初出だけが残り出現順を保てる。Vec::dedup は連続した重複しか除去しないため、そちらを使うなら先に sort する必要がある。
静的確認
配列を文字列に連結するには
&str や String のスライスには join が生えており、戻り値は String になる。数値のベクタには直接使えないので、to_string でいったん文字列へ写してから連結する。
静的確認
文字列を分割するには
str::split はイテレータを返すため、配列として扱いたいときは collect でまとめる。元の文字列を借用した &str のスライスが返るだけなので、コピーは発生しない。要素数を絞るなら splitn、空白区切りなら split_whitespace を使う。
静的確認
配列を条件で絞り込むには
イテレータの filter は遅延評価なので、collect を呼ぶまで何も走らない。iter は参照を返すため、値の Vec が欲しいときは copied や cloned を挟んでから集める。
静的確認
ディレクトリ内のファイル一覧を取得するには
fs::read_dir はイテレータを返し、各要素が Result になる。項目ごとに失敗しうるので filter_map で取りこぼしを落としてから判定する。file_name() は OsString なので、表示するときに to_string_lossy() で文字列へ移す。
静的確認
ネストしたJSONから値を取り出すには
serde_json の pointer は JSON Pointer(RFC 6901)形式のパスで一気に辿れる。戻り値は Option なので、as_u64 や as_str で型を確かめてから unwrap_or で既定値に倒す。構造が決まっているなら Value ではなく Deserialize 付き構造体の方が安全である。
静的確認
HTTPリクエストにヘッダーを付けるには
reqwest では header をメソッドチェーンで重ねる。ACCEPT のような定数が用意されているヘッダーはそちらを使うと綴り間違いを型検査で防げる。
静的確認
環境変数を設定するには
edition 2024 で std::env::set_var と remove_var は unsafe になった。他スレッドが getenv を呼んでいる最中に環境を書き換えるとデータ競合になりうるためで、呼ぶ側がシングルスレッドであることを保証する責任を負う。子プロセスへ渡すだけなら Command::env で足りるので、そちらを優先するとよい。
静的確認
.env ファイルを読み込むには
dotenvy はメンテナンスが止まった dotenv クレートの後継である。dotenv() は Result を返すので、.env を必須にしないなら ok() で握りつぶす。読み込み後は std::env::var で通常どおり取り出せる。
静的確認
日付文字列を日付型にするには
標準ライブラリに日付の書式解析は無いので chrono を使う。タイムゾーンを持たない値は NaiveDate / NaiveDateTime、オフセット付きの文字列は DateTime::parse_from_rfc3339 で受ける。いずれも Result を返すため、unwrap で潰さず match や ? で失敗を扱うと入力エラーをそのまま呼び出し元へ伝えられる。
静的確認
文字列の前後の空白を除去するには
str::trim は前後の空白を落とした部分文字列(&str)を返すため、新しい String は確保されない。特定の文字を落とすなら trim_matches に char やクロージャを渡す。接頭辞を外す strip_prefix は一致しなければ None を返すので、外れたかどうかを戻り値で判定できる。
静的確認
HTTP POSTでJSONを送るには
reqwest の json() は本文のシリアライズと Content-Type の付与をまとめて行うため、ヘッダを手で書く必要がない。error_for_status() を挟むのは、4xx / 5xx を Err に変換してエラー応答を作成結果として読み進めないようにするためである。json 機能を有効にしないとこのメソッドは生えない。
静的確認
ファイルが存在するか調べるには
Path::is_file は内部でメタデータを取得し、取得できなければ false を返す。存在しないのか権限が無いのかを区別したい場合は fs::metadata の Result を直接見る。
静的確認
オブジェクトをJSON文字列にするには
標準ライブラリに JSON は含まれないため、serde と serde_json をクレートとして追加する。to_string が 1 行、to_string_pretty が整形版で、どちらも Result を返す。derive(Serialize) を付けていない型は渡した時点でコンパイルエラーになる。
静的確認
日付を書式付きの文字列にするには
標準ライブラリにはカレンダー上の日付を書式化する機能が無いため、chrono クレートを依存に加えるのが一般的である。with_ymd_and_hms は存在しない時刻(夏時間の間隙など)を考慮して LocalResult を返すので、受け取り側で展開が必要になる。
静的確認
環境変数を読むには
std::env::var は環境変数が無い場合や不正な UTF-8 の場合に Err を返す Result 型である。未設定でも落とさないよう unwrap_or_else などで既定値を用意する。
静的確認
ファイルを読み込むには
fs::read_to_string はファイル全体を String として読み込む。? 演算子は Result のエラーを呼び出し元へ伝播するため、関数の戻り値を Result にしておく必要がある。
静的確認
ファイルに書き込むには
fs::write はファイルを作成または切り詰めてから内容を書き込む。? 演算子で Result のエラーを伝播するため、呼び出し元の戻り値を Result にしておく必要がある。
静的確認
HTTP GETリクエストを送るには
標準ライブラリに HTTP クライアントが無いため、Rust では reqwest のような外部クレートを入れるのが前提になる。error_for_status() を挟むのは、4xx / 5xx を Err に変換して本文をそのまま読み進めないようにするためである。
静的確認
配列をソートするには
Vec::sort は要素をその場で昇順に並べ替える破壊的メソッドである。降順や独自基準にするときは sort_by に比較クロージャを渡す。元の順序を残したいなら clone してから並べ替える。
静的確認
現在時刻を取得するには
標準ライブラリの SystemTime はエポックからの経過時間しか扱えず、年月日への変換や書式化の機能を持たない。カレンダー上の日時が必要なら chrono や time クレートを依存に追加する。
静的確認
JSONをパースするには
Rust の標準ライブラリに JSON パーサは無いため、serde と serde_json をクレートとして追加する。derive(Deserialize) を付けた構造体へ from_str で流し込む形が基本で、構造体のフィールドと JSON のキーが一致しないとコンパイル時ではなく実行時の Err になる。
静的確認
文字列を置換するには
str::replace はすべての一致箇所を置き換えた新しい String を返す。回数を制限したいときは replacen に上限回数を渡す。どちらも元の文字列は変更しない。
静的確認