Rustとは?なぜ2026年にRustを学ぶべきか
RustはMozillaが開発した、安全性・速度・並行性を三位一体で実現するシステムプログラミング言語です。StackOverflow調査で7年連続「最も愛されるプログラミング言語」に選ばれ、LinuxカーネルへのRust採用・Windows/Androidへの統合など、2026年現在、急速に普及が進んでいます。
Rustが選ばれる理由
| 特徴 | 内容 |
|---|---|
| メモリ安全性 | ガベージコレクタなしでメモリ安全。コンパイル時にバグを検出 |
| 高パフォーマンス | C/C++と同等の実行速度 |
| 並行性 | データ競合をコンパイル時に防止 |
| 型安全性 | 強力な型システムで実行時エラーを最小化 |
| エコシステム | Cargo(パッケージマネージャ)が優秀 |
Rust入門:基本文法
// 変数宣言(不変がデフォルト)
let x = 5; // 不変
let mut y = 10; // 可変
y += 1;
// データ型
let integer: i32 = -42;
let unsigned: u64 = 42;
let float: f64 = 3.14;
let boolean: bool = true;
let character: char = 'A';
// 関数
fn add(a: i32, b: i32) -> i32 {
a + b // セミコロンなし = 返り値
}
// 文字列
let s1 = String::from("Hello"); // ヒープ割り当て
let s2 = "World"; // 文字列スライス(&str)
// タプルと配列
let tuple = (1, 2.0, "three");
let array: [i32; 5] = [1, 2, 3, 4, 5];
Rustの核心概念:所有権システム
// 所有権の移動(ムーブ)
let s1 = String::from("hello");
let s2 = s1; // s1の所有権がs2に移動
// println!("{}", s1); // コンパイルエラー:s1は無効
// 参照と借用
fn calculate_length(s: &String) -> usize {
s.len() // sはborrowのみ、所有権は移動しない
}
let s = String::from("hello");
let len = calculate_length(&s); // &sで参照を渡す
println!("'{}' の長さは {} です", s, len); // sはまだ有効
// 可変参照
fn change(s: &mut String) {
s.push_str(", world");
}
let mut s = String::from("hello");
change(&mut s);
println!("{}", s); // "hello, world"
構造体・列挙型・トレイト
// 構造体
#[derive(Debug)]
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
// impl(メソッド)
impl User {
fn new(username: String, email: String) -> Self {
User {
username,
email,
sign_in_count: 0,
active: true,
}
}
}
// 列挙型(Enum)
enum Shape {
Circle(f64),
Rectangle(f64, f64),
}
impl Shape {
fn area(&self) -> f64 {
match self {
Shape::Circle(r) => std::f64::consts::PI * r * r,
Shape::Rectangle(w, h) => w * h,
}
}
}
// トレイト(インターフェース相当)
trait Greet {
fn greet(&self) -> String;
}
impl Greet for User {
fn greet(&self) -> String {
format!("こんにちは、{}!", self.username)
}
}
Rustの実用例:Webアプリケーション(Axum)
use axum::{routing::get, Router};
use std::net::SocketAddr;
async fn hello() -> &'static str {
"Hello, Tech Athletes!"
}
#[tokio::main]
async fn main() {
let app = Router::new()
.route("/", get(hello));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("Listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
Rustの学習ロードマップ
- The Rust Book(無料):公式ドキュメントが最高品質の学習リソース
- Rustlings:対話型演習で基礎を固める
- 実プロジェクト:CLIツール → Webアプリ → システムプログラミングの順で
- Exercism.io:コミュニティメンタリングで実力向上
まとめ
Rustは学習曲線が急ですが、一度習得すると非常に生産的な言語です。特にWebAssembly・クラウドネイティブ・システムプログラミング分野での需要が急増しており、2026年以降のエンジニアには必須のスキルセットになりつつあります。