← 語彙帳トップに戻る
🦀

Rust

極限のパフォーマンスとメモリ安全性。学習コスト高

✅ 最高速✅ メモリ安全✅ 組み込み ⚠ 学習コスト最高⚠ 開発速度遅め
📌 一言で言うと

速さと安全性を両立する、最難関の言語

所有権システムRustの独自機能。メモリの確保と解放をコンパイラが自動検証し、GCなしでメモリ安全性を保証する仕組みという独自機能によりC/C++と同等の速度を持ちながらメモリ安全性を保証。 ガベージコレクタを持たず実行時オーバーヘッドがほぼゼロ。学習コストは非常に高いが使いこなせれば最強の言語の一つ。

🎯 得意な用途

組み込みシステム・OS開発:メモリ制約が厳しいデバイスに最適。Linuxカーネルの一部もRustで書かれ始めている。

WebAssembly(Wasm):ブラウザ上で高速なネイティブコードを動かす仕組み。FigmaのレンダリングエンジンはRust製。

ゲームエンジン・グラフィクス:フレームレートが要求される処理。Bevy(Rust製ゲームエンジン)などが注目されている。

暗号・セキュリティ:メモリ安全性が必須な暗号処理ライブラリ。Cloudflare WorkersのランタイムもRust製。

⚖️ 他言語との比較
観点RustGoC/C++
実行速度 C/C++同等(最速) 速い 最速
メモリ安全性 コンパイラが保証 GCで管理 手動管理(危険)
学習コスト 非常に高い 低め 高い
開発スピード 遅め 速い 遅め
向いている場面 組み込み・Wasm・OS 高トラフィックAPI OS・ドライバ
✅ 選ぶ理由 / ⚠ 選ばない理由

選ぶ理由

C/C++の置き換えとして「速くて安全」が必要な場面。メモリリークやバッファオーバーフローをコンパイル時に防げる。長期運用するシステムの信頼性が上がる。

選ばない理由

Web・AI案件のPoCには絶対に向かない。所有権・借用の概念習得に数ヶ月必要。チームにRustが書ける人材を確保することが難しい。

💬 よくある会議での質問と答え方
Q.RustかGoか、どちらを採用しますか?
A.WebAPIやマイクロサービスならGoです。組み込みデバイス・WebAssembly・秒間数十万リクエストを超えるような極限性能が必要な場合にRustを検討します
Q.RustでAIアプリは作れますか?
A.作れますがAIライブラリのエコシステムがPythonに比べて非常に限られます。推論エンジンの高速化部分をRustで書き、インターフェースはPythonというハイブリッドが現実的です
🌐 エコシステム

パッケージマネージャ:cargo(標準)

主要フレームワーク

  • Axum — モジュラーWebフレームワーク・Tokio系・現行主流
  • Actix-web — 高性能Webフレームワーク・アクターモデル・実績あり
  • Rocket — 使いやすさ重視・マクロ豊富

主要ライブラリ

  • Tokio — 非同期ランタイム・デファクト・async-std 対抗
  • Serde — シリアライズ/デシリアライズ・ derive・JSON/TOML/YAML
  • Rayon — データ並列ライブラリ・イテレータの並列化
  • sqlx — 非同期Rust SQL・コンパイル時クエリ検証

ランタイム

  • Rust — 単一バイナリ・ランタイム不要・GCなし
💻 コード例

Hello World

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

所有権と借用

let s = String::from("hi");
let r = &s;           // 借用(不変参照)
println!("{}", r);

Result と ? 演算子

fn read(path: &str) -> Result<String, io::Error> {
    let s = std::fs::read_to_string(path)?;
    Ok(s)
}

非同期(async/await + Tokio)

#[tokio::main]
async fn main() {
    let data = reqwest::get("https://...").await?.text().await?;
}
📚 学習ロードマップ

初級(目安: 〜2-3ヶ月)

  • 基本文法 — 変数の不変性・match・enum・コレクション
  • 所有権システム(最重要) — ムーブ・借用・ライフタイムの基本・コンパイラと対話
  • cargo と標準ライブラリ — ビルド・テスト・docs.rs・Result/Option

中級(目安: 〜3-6ヶ月)

  • ライフタイム・借用チェッカー — 明示的ライフタイム・構造体のライフタイム・戦略
  • トレイト・ジェネリクス — trait・impl・境界・動的ディスパッチ(dyn)
  • Send/Sync(スレッド安全性) — マーカートレイト・Arc/Mutex・並行安全性の証明

上級(目安: 〜6ヶ月+)

  • 非同期(async/await + Tokio) — Future・ピン留め・ランタイム・select!
  • マクロ(macro_rules! / proc-macro) — 宣言的マクロ・属性マクロ・derive
  • unsafe と FFI — 生ポインタ・外部C連携・不変条件の手動維持