RustでのWeb APIサーバー開発において、エコシステムが成熟してきました。現在最も広く利用されているのは、非同期ランタイムtokioと親和性の高い axum、および長年高パフォーマンスな定番として愛される actix-web です。それぞれのユースケースについて解説します。
本記事では、高性能かつメモリ安全なWebバックエンド構築用言語として支持を集めるRustについて、主要な2大Webフレームワークの比較、および実際の実装サンプルを通じた選択基準を解説します。
1. 主要フレームワークの特徴と現在の立ち位置
2026年現在、RustでWebアプリケーションやAPIサーバーを構築する際、主に以下の2つのフレームワークが主流となっています。
1) axum (アクサム)
axum は、Rustの非同期ランタイムのデファクトスタンダードである tokio プロジェクトチーム自身が開発しているフレームワークです。
tokioエコシステムとの完全な統合:hyper、tower(ミドルウェアライブラリ)、tracingなどとの連携がスムーズで、エコシステム全体の標準ツールを組み込みやすい。- マクロを使わないクリーンなAPI: ルーティング定義やリクエスト抽出(Extractor)にマクロをほとんど使用せず、Rust標準の型システムを最大限に活かした設計。
- 今後の本命: 現在最も活発にメンテナンスされており、新規プロジェクトでの採用実績が急増しています。
2) actix-web (アクティクスウェブ)
長年にわたりRustのWebフレームワークのパフォーマンス王として君臨してきた、最も歴史があり安定したライブラリです。
- 圧倒的な処理速度: 各種ベンチマーク(TechEmpower等)において常に上位に位置し、マルチスレッドでのリクエスト並行処理能力が極めて高い。
- アクターモデル由来の堅牢性: アクターモデルベースで設計されており、スレッド分離やリソース管理が自律的。
- 豊富な実績とドキュメント: 古くから使われているため、サードパーティ製プラグインや解決事例がWeb上に豊富に存在します。
2. AxumによるWeb API実装サンプル
axumを用いて、シンプルなJSONを返却するAPIサーバーを構築するサンプルコードを示します。
use axum::{
routing::{get, post},
Json, Router,
};
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;
#[derive(Serialize)]
struct User {
id: u64,
username: String,
}
#[derive(Deserialize)]
struct CreateUser {
username: String,
}
#[tokio::main]
async fn main() {
// ルーターの設定
let app = Router::new()
.route("/user", get(get_user))
.route("/user", post(create_user));
// アドレスを指定して起動
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn get_user() -> Json<User> {
Json(User {
id: 1,
username: "user_name_example".to_string(),
})
}
async fn create_user(Json(payload): Json<CreateUser>) -> Json<User> {
Json(User {
id: 2,
username: payload.username,
})
}
このコードでは、serde ライブラリを使用して、型安全なJSONのパース(デシリアライズ)と構築(シリアライズ)をシームレスに行っています。
3. どちらのフレームワークを採用すべきか?
選定基準をまとめます。
| 項目 | Axum | Actix-web |
|---|---|---|
| 開発元・バックヤード | Tokio Team | Actix Community |
| マクロ依存 | ほぼ無し(関数と型抽出) | 多用(アトリビュートマクロ) |
| Tokioとの相性 | 最高(同じチーム) | 良好(内部で動くが独立) |
| パフォーマンス | 極めて高い | 世界トップクラス(最速レベル) |
| 初心者向け | 概念の学習コスト低(Web標準に近い) | 構成モデルの理解が必要 |
💡 結論
- 新しいプロジェクトで、Vercel / Cloudflare Workersなどのエッジ環境や一般的なクラウドコンテナ、Tokio周辺ライブラリを多用するなら
axumが最も無難で将来性があります。 - 一方、ベアメタルサーバーや専用インスタンスでミリ秒未満の極限のI/Oスループットを求めるサービスであれば、依然として
actix-webが最良の選択肢です。
