Rust入門2026|所有権・借用・ライフタイムの仕組みから実践的なWebアプリ開発まで徹底解説

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の学習ロードマップ

  1. The Rust Book(無料):公式ドキュメントが最高品質の学習リソース
  2. Rustlings:対話型演習で基礎を固める
  3. 実プロジェクト:CLIツール → Webアプリ → システムプログラミングの順で
  4. Exercism.io:コミュニティメンタリングで実力向上

まとめ

Rustは学習曲線が急ですが、一度習得すると非常に生産的な言語です。特にWebAssembly・クラウドネイティブ・システムプログラミング分野での需要が急増しており、2026年以降のエンジニアには必須のスキルセットになりつつあります。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です