■ はじめに
簡単なツールを作りたくて、 どうせなら、Rust で作れば、Rust の勉強になると思ったので 徐々にまとめていく
目次
【0】Rustの主要なWebフレームワーク 【1】Axum 【2】前提条件 【3】Hello world作成手順 Step1:プロジェクトを作成 Step2:Cargo を修正 Step3:Mainを修正 Step4:実行&動作確認 【4】補足1:古いバージョン(axum v0.6.20)の場合 【5】補足2:勉強の仕方
【0】Rustの主要なWebフレームワーク
[1] Axum << 今回のテーマ [2] Actix-web [3] Rocket [4] Poem
【1】Axum
* Rust の webアプリケーション フレームワーク
https://docs.rs/axum/latest/axum/
cf. Axum (アクサム)
【2】前提条件
* Rust の開発環境が構築していること => 構築していない場合、以下の関連記事を参照のこと
Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
【3】Hello world作成手順
Step1:プロジェクトを作成
# cargo new <ProjectName> --bin (--bin: バイナリ作成) cargo new hello_world --bin
Step2:Cargo を修正
* なお、dependencies のバージョンについては 以下のサイトから調べるといい。
Cargo.toml
[package] name = "hello_world" version = "0.1.0" edition = "2021" [dependencies] # Webフレームワーク本体 axum = "0.7" # 非同期ランタイム (Axumの動作に必須) tokio = { version = "1", features = ["full"] } # JSONのシリアライズ/デシリアライズ serde = { version = "1", features = ["derive"] } serde_json = "1" # 環境変数の管理 dotenvy = "0.15" # ログ出力 (任意だが推奨) tracing = "0.1" tracing-subscriber = "0.3"
Step3:Mainを修正
* 「#[tokio::main]」も重要
main.rs
use axum::{ routing::get, Router, }; use std::net::SocketAddr; use tokio::net::TcpListener; #[tokio::main] async fn main() { // ログの初期化 (デバッグ情報などをコンソールに出力) tracing_subscriber::fmt::init(); // 1. ルーターの定義 let app = Router::new() // HTTP GETリクエストを "/" パスで受け付ける .route("/", get(root_handler)) // HTTP GETリクエストを "/users" パスで受け付ける .route("/users", get(list_users)); // ここにさらにPOST, PUT, DELETEなどのルートを追加 // 2. サーバーアドレスの設定 let addr = SocketAddr::from(([127, 0, 0, 1], 3002)); tracing::info!("listening on {}", addr); // 3. サーバーの起動 let listener = TcpListener::bind(&addr).await.unwrap(); // 4. axum::serve 関数を使ってリスナーとアプリを紐づける axum::serve(listener, app) .await .unwrap(); } // GET / のハンドラー async fn root_handler() -> &'static str { "Hello, world!!!!" } // GET /users のハンドラー async fn list_users() -> String { "User list endpoint".to_string() }
Step4:実行&動作確認
実行
cd hello_world
cargo run
動作確認
* ブラウザで以下のURLにアクセスする => 「Hello, world!!!!」
【4】補足1:古いバージョン(axum v0.6.20)の場合
Cargo.toml
[package] name = "hello_world" version = "0.1.0" edition = "2021" [dependencies] axum = "0.6.20" tokio = { version = "1", features = ["full"] }
main.rs
use axum::{routing::get, Router}; use std::net::SocketAddr; #[tokio::main] async fn main() { let app = Router::new().route("/", get(handler)); let addr = SocketAddr::from(([127, 0, 0, 1], 3002)); axum::Server::bind(&addr) .serve(app.into_make_service()) .await .unwrap(); } async fn handler() -> &'static str { "Hello, world!!!!" }
** 参考文献 https://github.com/programatik29/axum-tutorial/blob/master/tutorial/03-hello-world.md
【5】補足2:勉強の仕方
* 書いていて、わからなかったら、以下の公式ドキュメントを読んで補う
https://doc.rust-jp.rs/rust-by-example-ja/index.html
関連記事
Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ Axum / REST ~
https://dk521123.hatenablog.com/entry/2025/11/27/145159