Rust Axumとは?Tokioベースの次世代Webフレームワーク完全ガイド
Axumの概要と設計思想 Axumは、Rustの非同期ランタイムであるTokioチームが開発・メンテナンスしているWebアプリケーションフレームワークです。HTTPの低レベル処理を担うHyperと、ミドルウェアの抽象化レイヤーであるTowerの上に構築されており、Rustエコシステムの中核コンポーネントとシームレスに統合される設計になっています。 GitHub上のスター数は約24,900、crates.ioでの累計ダウンロード数は2億3,700万回を超えています。出典: crates.io 出典: GitHub Axumの設計には3つの明確な方針があります。 1. Tokioエコシステムとの一体化 独自のランタイムや独自の抽象化レイヤーを持たず、Tokio・Tower・Hyperという既に広く使われているクレートの上に薄いAPIレイヤーを提供するという方針です。これにより、Tower向けに書かれたミドルウェア(タイムアウト、レート制限、認証など)をそのままAxumで利用できます。 2. マクロに頼らない型駆動設計 Actix-webやRocketがプロシージャルマクロを多用するのに対し、Axumはマクロの使用を最小限に抑えています。ルーティングやリクエスト処理はRustの型システムとトレイトによって実現されており、コンパイル時に不整合を検出できます。 3. 学習曲線の緩和 Axumが要求する独自概念は少なく、Handler・Extractor・Routerという3つの概念を理解すれば基本的なWebアプリケーションを構築できます。TowerのServiceトレイトを理解していればミドルウェアの実装もスムーズです。 Axum 0.8の主な変更点 2025年1月1日にリリースされたAxum 0.8は、APIの一貫性向上と開発体験の改善を目的としたメジャーアップデートです。最新バージョンは2025年12月20日にリリースされたv0.8.8です。出典: Tokio公式ブログ 出典: crates.io パスパラメータの構文変更 0.7以前ではコロン記法/:idを使用していましたが、0.8からは波括弧記法/{id}に変更されました。 // 0.7以前 Router::new().route("/users/:id", get(get_user)); // 0.8以降 Router::new().route("/users/{id}", get(get_user)); 波括弧記法はOpenAPI仕様や多くのWebフレームワークで採用されている標準的な記法であり、エコシステム全体との整合性が向上しています。 #[async_trait]マクロの廃止 Rust 1.75で安定化されたRPITIT(Return Position Impl Trait in Traits)により、FromRequestやFromRequestPartsトレイトの実装に#[async_trait]マクロが不要になりました。 // 0.7以前 #[async_trait] impl<S> FromRequest<S> for MyExtractor where S: Send + Sync, { type Rejection = StatusCode; async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> { // ... } } // 0.8以降(#[async_trait]が不要) impl<S> FromRequest<S> for MyExtractor where S: Send + Sync, { type Rejection = StatusCode; async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> { // ... } } 外部マクロへの依存が減り、コンパイル時間の短縮とエラーメッセージの明瞭化が実現されています。 ...