Rust

Rust入門

コードを実行し、コンパイラーの指摘を読みながら、Rustの基礎を一歩ずつ学びましょう。

Rust stable(Edition 2021以降、Rust 1.58以降)を対象にしています。

Rust入門の講座一覧

Rustの導入

Rust公式のrustup導入手順でRust stableを導入し、rustc --versionとcargo --versionを確認してください。Ubuntuではビルドに必要なbuild-essentialも導入します。Cargoでプロジェクトを作る手順は各講座で扱います。

01

Rustとは

Rustは、ネイティブコードの高速さとメモリ安全性を両立することを目指すプログラミング言語です。Webサーバー、CLIツール、組み込み、ゲーム、WebAssemblyなどで利用できます。

Rustの特徴
  • 所有権の仕組みで、解放済みメモリの利用などをコンパイル時に防ぐ
  • 型を明示しつつ、型推論で読みやすく書ける
  • Cargoがビルド、依存関係、テストをまとめて管理する

Rustは「エラーをなくす魔法」ではありません。安全でない可能性をコンパイラーが知らせてくれるので、指摘を読みながら設計を改善する言語です。

02

基本文法とデータ型

変数、条件分岐、繰り返し、関数、文字列、数値など、Rustの基本を順番に学びます。詳しいコード例は変数とデータ型の講座にまとめています。

短い関数を実行するRUST
fn add(left: i32, right: i32) -> i32 {
    left + right
}

fn main() {
    let total = add(12, 8);
    println!("合計: {total}");
}
実行結果OUTPUT
合計: 20
03

所有権と借用

Rustを学ぶうえで特に重要な所有権、move、参照、可変借用を扱います。まず所有権とはで値の管理者を理解し、次に借用と参照へ進みましょう。

学習の順番所有権を移動する例、参照を渡す例、可変参照で値を変更する例を同じプログラムで比べると、コンパイラーの指摘を読みやすくなります。
04

構造体とメソッド

複数の値をまとめる構造体にメソッドを実装すると、データとその操作をひとまとまりにできます。列挙型とコレクションは列挙型とコレクションの講座で詳しく扱います。

構造体とメソッドRUST
struct Product { name: String, price: u32 }

impl Product {
    fn discounted_price(&self, percent: u32) -> u32 {
        self.price * (100 - percent) / 100
    }
}

fn main() {
    let book = Product { name: String::from("Rust本"), price: 3000 };
    println!("{}: {}円", book.name, book.discounted_price(10));
}
実行結果OUTPUT
Rust本: 2700円
05

OptionとResult

値がない状態をOption<T>、失敗する可能性をResult<T, E>で表します。Resultによるエラー処理では、match、unwrap_or、?演算子を使って安全に処理する方法を解説します。

Rustの基本的な考え方

失敗する可能性を型で表し、呼び出し側が成功と失敗を選べるようにします。エラーを無視するのではなく、処理の一部として設計します。

06

次に学ぶこと

各講座を読み終えたら、Rust練習問題で確認し、Cargoとテストを使ってコードを改善しましょう。その先は、ファイル入出力、コマンドライン引数、Web API、非同期処理、WebAssemblyなどから目的に合うテーマを選びます。