こんにちは!「Rustでサーバーサイドを書いてみたい」と思ったことはありませんか?Rustはメモリ安全性と高速性が売りの言語で、近年はWebバックエンドの分野でも存在感を増しています。今回はRustでWeb開発を始めるための基礎知識を解説します。
なぜRustがWebバックエンドに向いているのか
- メモリ安全性: ガベージコレクタなしでコンパイル時にメモリエラーを防ぐ
- 高速な実行速度: Node.jsやPythonと比較しても圧倒的なスループット
- 並行処理に強い: 所有権システムによりデータ競合をコンパイル時に排除
- WebAssembly対応: 将来的にフロントエンドにも進出可能
大規模なAPIサーバーやリアルタイム処理が必要なサービスで採用が進んでいます。
主要なWebフレームワーク
RustのWebフレームワークで最も人気があるのは以下の3つです。
| フレームワーク | 特徴 | スター数規模 |
|---|---|---|
| axum | モダンで型安全、Tokioとの親和性◎ | 急成長中 |
| actix-web | 成熟した実績、高パフォーマンス | 15k+ |
| warp | 関数型のフィルタベース、学習曲線やや高め | 10k+ |
2026年現在、新規プロジェクトではaxumを選ぶケースが増えています。
実際に動かしてみよう
プロジェクトの作成
cargo new my-web-app
cd my-web-app
依存関係の追加(axum + tokioの場合)
[dependencies]
axum = "0.8"
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
最小のWebサーバー
use axum::{Router, routing::get};
#[tokio::main]
async fn main() {
let app = Router::new()
.route("/", get(|| async { "Hello, Rust!" }));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
cargo run
# http://localhost:3000 にアクセス
シリアライズとデータベース接続
JSONを扱う(Serde)
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct User {
id: u32,
name: String,
email: String,
}
データベース接続(SQLx)
[dependencies]
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres"] }
let pool = sqlx::PgPool::connect("postgres://user:pass@localhost/db").await?;
let users = sqlx::query_as::<_, User>("SELECT * FROM users").fetch_all(&pool).await?;
注意点:学習コストへの向き合い方
Rustは所有権・借用・ライフタイムといった概念を理解する必要があり、最初はコンパイルエラーに悩まされることも多いです。しかし、コンパイラが厳しいぶん、本番でクラッシュするケースは格段に減ります。まずは小さなAPIから始めて、徐々に規模を拡大していくのがおすすめです。
まとめ
RustでのWeb開発は、axum + Tokio + Serde + SQLxの組み合わせが現在のデファクトスタンダードです。学習曲線は急ですが、身につければ高速で安全なバックエンドを書けるようになります。ぜひ最初の一歩を踏み出してみてください!
今日も最後までお読みいただき、ありがとうございました!

