my.code(); Logomy.code();
Rust-0.Rustの世界へようこそ

my.code(); Logomy.code();

  • C++
    • 0.C++の世界へようこそ
    • 1.型システムと制御構造
    • 2.データ集合とモダンな操作
    • 3.ポインタとメモリ管理
    • 4.関数と参照渡し
    • 5.プロジェクトの分割とビルド
    • 6.クラスの基礎
    • 7.クラスを使いこなす
    • 8.継承とポリモーフィズム
    • 9.テンプレート
    • 10.STL ①:コンテナ
    • 11.STL ②:アルゴリズムとラムダ式
    • 12.RAIIとスマートポインタ
  • JavaScript
    • 0.JavaScriptへようこそ
    • 1.基本構文とデータ型
    • 2.制御構文
    • 3.関数とクロージャ
    • 4.'this'の正体
    • 5.オブジェクトとプロトタイプ
    • 6.クラス構文
    • 7.配列とイテレーション
    • 8.非同期処理①: Promise
    • 9.非同期処理②: Async/Await
  • Python
    • 0.環境構築と基本思想
    • 1.基本構文とデータ型
    • 2.リスト、タプル、辞書、セット
    • 3.制御構文と関数
    • 4.モジュールとパッケージ
    • 5.オブジェクト指向プログラミング
    • 6.ファイルの入出力とコンテキストマネージャ
    • 7.例外処理
    • 8.ジェネレータとデコレータ
  • Ruby
    • 0.rubyの世界へようこそ
    • 1.基本構文とデータ型
    • 2.制御構造とメソッド定義
    • 3.すべてがオブジェクト
    • 4.コレクション (Array, Hash, Range)
    • 5.ブロックとイテレータ
    • 6.クラスとオブジェクト
    • 7.モジュールとMix-in
    • 8.Proc, Lambda, クロージャ
    • 9.標準ライブラリの活用
    • 10.テスト文化入門
    • 11.メタプログラミング入門
  • Rust
    • 0.Rustの世界へようこそ
    • 1.基本構文と「不変性」
    • 2.関数と制御フロー
    • 3.所有権
    • 4.借用とスライス
    • 5.構造体とメソッド構文
    • 6.列挙型とパターンマッチ
    • 7.モジュールシステムとパッケージ管理
    • 8.コレクションと文字列
    • 9.エラーハンドリング
    • 10.ジェネリクスとトレイト
    • 11.ライフタイム
  • TypeScript
    • 0.TypeScriptへようこそ
    • 1.基本的な型と型推論
    • 2.オブジェクト、インターフェース、型エイリアス
    • 3.関数の型定義
    • 4.型を組み合わせる
    • 5.ジェネリクス
    • 6.クラスとアクセス修飾子
    • 7.非同期処理とユーティリティ型

第0章: Rustの世界へようこそ

Rustは、Mozillaによって開始され、現在はRust Foundationによって管理されているオープンソースのシステムプログラミング言語です。Stack OverflowのDeveloper Surveyで長年「最も愛されている言語」に選ばれ続けているのには理由があります。

Rustの特徴:なぜ学ぶのか?

経験豊富なプログラマにとって、Rustは「トレードオフを解消する」言語として映るはずです。

1. メモリ安全性(Memory Safety)

C/C++ではプログラマの責任であったメモリ管理を、Rustは所有権(Ownership)というコンパイル時のシステムで保証します。

  • ガベージコレクタ(GC)は存在しません。
  • ランタイムコストなしに、ダングリングポインタや二重解放、バッファオーバーフローをコンパイル段階で防ぎます。

2. ゼロコスト抽象化(Zero-cost Abstractions)

「使わないものにはコストを払わない。使うものについては、手書きのコード以上のコストをかけない」というC++の哲学を継承しています。イテレータや高階関数を使っても、最適化された低レベルコードと同等のパフォーマンスが得られます。

3. 安全な並行性(Fearless Concurrency)

多くの言語で並行処理はバグの温床(データ競合など)ですが、Rustではコンパイラがデータ競合を検知し、コンパイルエラーとして報告します。「コンパイルが通れば、並行性のバグを含んでいる可能性は低い」という安心感を持ってコーディングできます。

開発環境の構築

Rustの開発環境は非常にモダンで、バージョン管理やパッケージ管理が統合されています。

rustup のインストール

Rustのバージョンマネージャである rustup を使用してインストールするのが標準的です。

macOS / Linux / WSL (Windows Subsystem for Linux) の場合:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Windowsの場合: 公式サイト(rust-lang.org)から rustup-init.exe をダウンロードして実行します(C++ビルドツールが必要になる場合があります)。

インストール後、以下のコマンドでバージョンが表示されれば成功です。

rustc --version
cargo --version

Hello World (rustc を直接使う)

まずは、ビルドシステムを使わずにコンパイラ rustc を直接叩いて、Rustプログラムの最小単位を見てみましょう。

以下のコードを記述します。

ファイルを編集:hello.rs
fn main() {
    // !がついているのは関数ではなく「マクロ」の呼び出しです
    println!("Hello, world from rustc!");
}

コンパイルと実行は以下の手順で行います。

  1. コンパイル: rustc hello.rs
    • これにより、バイナリファイル(Windowsなら.exe)が生成されます。
  2. 実行: ./hello (Windowsなら .\hello.exe)
ブラウザ上で動作するrustの実行環境です。
左上の実行ボタンを押して、このページ内のhello.rsに書かれている内容を実行します。
Hello, world from rustc!

ポイント

  • fn main() { ... }: エントリポイントです。引数や戻り値がない場合、このように記述します。
  • println!: 末尾に ! がついているのはマクロであることを示しています。Rustでは可変長引数を取る機能などをマクロとして実装しています。
  • セミコロン ;: 文の終わりには必須です。

Cargo:Rustのビルドシステムとパッケージマネージャ

実際の開発では rustc を直接使うことは稀です。公式のビルドシステム兼パッケージマネージャである Cargo を使用します。Node.jsにおける npm、Pythonにおける pip + venv のような存在ですが、それ以上にプロジェクトのライフサイクル全体を管理します。

プロジェクトの作成 (cargo new)

新しいプロジェクトを作成します。

cargo new hello_cargo
cd hello_cargo

このコマンドにより、以下のディレクトリ構造が生成されます。

  • Cargo.toml: パッケージのマニフェストファイル(依存関係やメタデータを記述)。
  • src/main.rs: ソースコード。
  • .gitignore: Gitの設定ファイルも自動生成されます。

Cargoの主要コマンド

生成されたプロジェクトで、以下のコマンドを試してみましょう。

  1. cargo check

    • 重要: コンパイルが可能かどうかのチェックだけを行い、実行ファイルは生成しません。高速に動作するため、コーディング中の構文チェックとして頻繁に使用します。
  2. cargo build

    • デバッグビルドを行います。成果物は target/debug/ に生成されます。コンパイル速度重視で、最適化は行われません。
  3. cargo run

    • ビルドと実行を一度に行います。開発中はこれが最も使われます。
  4. cargo build --release

    • リリースビルドを行います。target/release/ に生成されます。コンパイル時間は長くなりますが、強力な最適化がかかり、実行速度が劇的に向上します。

src/main.rs の中身は以下のようになっています(生成時デフォルト)。

fn main() {
    println!("Hello, world!");
}

フォーマッタとリンタ

Rustは「公式のスタイル」を重視する言語です。議論の余地をなくすために強力なツールが標準で用意されています。

rustfmt (コードフォーマッタ)

Go言語の gofmt のように、コードを自動整形します。

cargo fmt

多くのエディタ(VS Codeなど)では保存時に自動実行されるよう設定するのが一般的です。

clippy (リンタ)

単なるスタイルチェックだけでなく、パフォーマンスの改善案や、Rustらしい書き方(Idiomatic Rust)を提案してくれます。

cargo clippy

例えば、無駄な計算や非推奨なAPIの使用などを指摘してくれるため、学習中はこのコマンドの警告に従うだけでRustの理解が深まります。

次のページ基本構文と「不変性」 »