【Rust】Rust ~ Axum / 入門編 ~

■ はじめに

簡単なツールを作りたくて、
どうせなら、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 のバージョンについては
 以下のサイトから調べるといい。

https://crates.io/

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!!!!」

http://localhost:3002/

【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