Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Rust Cheat Sheet

2025年09月21日に「Dev.to」が公開したITニュース「Rust Cheat Sheet」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Rustの基本を凝縮したチートシート。インストールから変数、データ型、制御フロー、関数、所有権、エラー処理、構造体、コレクション、Cargoコマンドまで、初心者SEがRust開発を始めるための重要ポイントを網羅。

出典: Rust Cheat Sheet | Dev.to公開日:

ITニュース解説

Rustは、安全性、パフォーマンス、並行処理に重点を置いて設計されたプログラミング言語である。システムプログラミングやWebAssemblyなど、幅広い分野で注目されている。

Rustの開発環境の準備は非常に簡単だ。まず、curlコマンドを使ってrustupというツールをインストールする。rustupはRustのバージョン管理ツールであり、Rustコンパイラや関連ツールを導入する。インストールが完了したら、rustc --versionと入力してRustコンパイラのバージョンを確認し、正しくインストールされていることを確かめることができる。新しいプロジェクトを開始するには、cargo new プロジェクト名というコマンドを使う。cargoはRustのビルドシステムとパッケージマネージャであり、プロジェクトの作成からビルド、実行までを効率的に管理する。プロジェクトのディレクトリに移動し、cargo buildでコードをコンパイルし、cargo runでコンパイルされたプログラムを実行する。

Rustプログラムの基本的な構造は、fn main() { ... }という形で定義されるメイン関数から始まる。この関数がプログラムのエントリーポイントだ。文字列を出力するにはprintln!("...")マクロを使用する。変数を定義する際にはletキーワードを使うが、デフォルトではその値は変更できない「不変(immutable)」となる。値を変更できるようにするには、let mutのようにmutキーワードを加えて「可変(mutable)」として宣言する必要がある。プログラム全体で利用できる固定値はconstキーワードで定数として定義する。

Rustには様々なデータ型が存在する。数値型には、符号付き整数(i32など)、符号なし整数(u32など)、浮動小数点数(f64など)がある。これらは「スカラ型」と呼ばれる単一の値を表す型である。他に、真偽値を表すbool型(trueまたはfalse)や、単一の文字を表すchar型もスカラ型だ。複数の値をまとめる「複合型」には、型が異なる複数の値を固定数まとめる「タプル」がある。タプルはlet (x, y, z) = tup;のように各要素を個別の変数に分解(デストラクチャリング)できる。また、同じ型の複数の値を固定数並べる「配列」もあり、let arr = [1, 2, 3, 4, 5];のように定義する。配列の一部を参照する「スライス」は、&arr[1..3]のように範囲を指定して作成され、元のデータへの参照として機能する。

プログラムの実行の流れを制御する「制御フロー」には、いくつかの種類がある。if-else文は、条件式が真か偽かによって異なる処理を実行する。forループは、指定された範囲の数値を順番に処理するなど、特定の回数だけ繰り返し処理を行いたい場合に使う。whileループは、指定された条件が真である限り繰り返し処理を実行する。

関数は特定の処理をひとまとまりにしたもので、コードの再利用性を高める。fn 関数名(引数名: 型) -> 戻り値の型 { ... }のように定義し、->の後に戻り値の型を指定する。Rustでは、関数の最後の式がセミコロンで終わっていない場合、その式の値が自動的に戻り値となる。

Rustの最も特徴的な概念の一つが「所有権(Ownership)」システムである。これはメモリ安全性を保証するための仕組みで、プログラム内のすべてのデータには必ず「所有者」がいる。ある変数が別の変数にデータを代入する際、もしそのデータがヒープに割り当てられているような複雑な型(Stringなど)の場合、所有権は元の変数から新しい変数へと「移動(move)」する。所有権が移動すると、元の変数はそのデータにアクセスできなくなり、コンパイルエラーとなる。一方で、整数型(i32など)のような単純なデータ型は、代入時にデータが「コピー(copy)」されるため、元の変数も引き続きその値を利用できる。所有権を移動させずにデータを利用したい場合は、「借用(Borrowing)」という仕組みを使う。これは、データの「参照(reference)」を関数などに渡す方法で、参照を渡す側は引き続きデータの所有権を保持し、参照を受け取った側はデータを一時的に利用できる。これにより、複数の箇所から安全にデータにアクセスできるようになる。

データを構造化するための型として、「構造体(Structs)」と「列挙型(Enums)」がある。構造体は、関連する複数のデータ(フィールド)を一つのまとまりとして定義する。例えば、User構造体はnameageというフィールドを持つ。列挙型は、取りうる値の集合を定義するもので、複数の選択肢の中から一つを選ぶような状況で便利だ。例えば、Direction列挙型はUpDownLeftRightという選択肢を持つ。列挙型の値に対しては、match式を使うことで、それぞれの選択肢に応じた処理を安全に記述できる。

「トレイト(Traits)」は、特定の型が持つべき共通の振る舞い(メソッド)を定義するための仕組みだ。例えば、Greetトレイトはsay_helloというメソッドを持つと定義できる。そして、impl トレイト名 for 型名 { ... }という構文を使って、特定の型(例えばPerson構造体)がそのトレイトをどのように「実装(implement)」するかを記述する。これにより、複数の異なる型に対して共通のインターフェースを提供し、ポリモーフィズムを実現できる。

Rustは堅牢な「エラー処理」を重視している。予期せぬエラーを防ぐために、処理が成功した結果と失敗した結果を明確に区別するResult型が広く使われる。Result<T, E>型は、成功した場合はOk(T)バリアントに結果を、失敗した場合はErr(E)バリアントにエラー情報を格納する。match式を使うことで、Okの場合とErrの場合に分けて処理を記述し、エラーを適切にハンドリングできる。

複数のデータを効率的に扱うための「コレクション」も充実している。可変長のリストとしてよく使われるのが「ベクタ(Vec)」で、vec![1, 2, 3]のように初期化し、pushメソッドで要素を追加できる。キーと値のペアを格納する「ハッシュマップ(HashMap)」は、特定のキーに対応する値を高速に検索したい場合に便利だ。std::collections::HashMapuseして利用する。

Rustには「マクロ」と呼ばれる特別な機能もある。これはコンパイル時にコードを生成する仕組みで、println!のように文字列を整形して出力したり、dbg!のようにデバッグ情報を標準エラー出力に表示したりする際に利用される。vec!マクロはベクタを簡単に初期化するために使われる。

「ライフタイム」はRustのもう一つの高度な概念で、主に参照の有効期間に関するものだ。fn longest<'a>(a: &'a str, b: &'a str) -> &'a strのように、ジェネリックなライフタイムパラメータ'aを使って、引数として渡される参照と戻り値の参照が少なくとも同じ期間有効であることをコンパイラに伝える。これにより、参照が指すデータが、その参照よりも先に破棄されてしまう「ダングリングポインタ」のようなメモリ安全性の問題をコンパイル時に防ぐ。

cargoコマンドは、Rustプロジェクトの開発サイクル全体をサポートする強力なツールである。cargo newでプロジェクトを作成し、cargo buildでコンパイル、cargo runで実行するだけでなく、cargo checkでコードの構文エラーや型エラーを高速にチェックできる。cargo testはプロジェクト内のテストを実行し、cargo fmtはコードスタイルを自動的に整形する。また、cargo doc --openコマンドは、プロジェクトのドキュメントを生成し、ブラウザで開くことができる。これらのコマンドを使いこなすことで、効率的なRust開発が可能となる。

関連コンテンツ

関連IT用語