Rust×Axumで作るREST API ① セットアップ〜Hello Worldまで

rust×Axumで作るREST API

はじめに

本記事では、Rust と Axum を組み合わせて REST API を構築するシリーズの第一歩として、「Rust Axum セットアップと Hello World の表示」について解説します。

本シリーズで予定している内容は以下の通りです。

  • 第1回(本記事):Rust Axum セットアップ〜Hello Worldまで
  • 第2回:ルーティング・ミドルウェアの実装
  • 第3回:SeaORMでDB接続・CRUDを完成させる

本記事の対象は、Rust の基礎文法は学んだものの、Web アプリ開発はこれから、という方です。最終回では DB アクセス層として SeaORM を組み合わせるため、Rust×SeaORMで学ぶORM入門も合わせて参考にしてください。

開発環境の準備

本記事では以下の環境を前提とします。

  • Rust 1.75 以上(安定版)
  • Cargo(Rust に同梱)
  • VSCode + rust-analyzer 拡張機能(任意)

Rust のバージョンは、以下のコマンドで確認できます。


rustc --version
cargo --version

以下のようにバージョンが表示されれば準備完了です。


rustc 1.75.0 (82e1608df 2023-12-21)
cargo 1.75.0 (1d8b05cdd 2023-11-20)

なお、Rust のバージョンが古い場合は rustup update stable で最新の安定版に更新してください。

プロジェクトのセットアップ

まずは、Cargo で新しいプロジェクトを作成します。


cargo new axum-rest-api
cd axum-rest-api

作成直後のディレクトリ構成は以下の通りです。


axum-rest-api/
├── Cargo.toml
└── src/
    └── main.rs

次に、Cargo.toml に Axum と Tokio の依存を追加します。


[dependencies]
axum = "0.7"
tokio = { version = "1", features = ["full"] }

axum は Web フレームワーク本体、tokio は非同期ランタイムです。Axum は Tokio 上で動作するため、両方をセットで導入する必要があります。

なお、Axum の公式ドキュメントは以下を参考にしてください。

axum - Rust
axum is an HTTP routing and request-handling library that focuses on ergonomics and modularity.

Hello World エンドポイントの実装

Rust Axum セットアップが完了したので、Hello World を返すエンドポイントを実装していきます。以下の処理を src/main.rs に記述します。


use axum::{routing::get, Router};

#[tokio::main]
async fn main() {
    // GET /hello にhello関数を割り当てる
    let app = Router::new().route("/hello", get(hello));

    // 127.0.0.1:3000 でHTTPサーバーを起動
    let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
        .await
        .unwrap();
    println!("サーバーを起動しました: http://127.0.0.1:3000");
    axum::serve(listener, app).await.unwrap();
}

// /hello にGETリクエストが来たときに呼ばれるハンドラ
async fn hello() -> &'static str {
    "Hello, World!"
}

これで、/hello に GET リクエストを投げると「Hello, World!」が返るシンプルな API になります。

注意:#[tokio::main] マクロを付け忘れると、非同期ランタイムが起動せずビルドエラーになります。忘れずに付けてください。

動作確認

実装が終わったので、動作確認をしていきます。まずは、以下のコマンドでサーバーを起動します。


cargo run

以下のログが出力されれば起動完了です。


サーバーを起動しました: http://127.0.0.1:3000

次に、別のターミナルから curl でアクセスします。


curl http://127.0.0.1:3000/hello

Hello, World! と表示されれば成功です。ブラウザから http://127.0.0.1:3000/hello にアクセスしても、同じ結果が得られます。

まとめ

今回は、Rust Axum セットアップから Hello World を返すエンドポイントの実装までを行いました。これにより、シリーズの土台となる最小構成の API が動く状態になりました。

次回は、ルーティングの分離やログ・CORS などのミドルウェア導入に取り組みます。より実践的な API に近づけていく内容になるので、合わせてご覧ください。

また、シリーズ最終回では SeaORM と組み合わせて DB アクセスまで実装します。ORM の基礎を先に押さえたい方は、Rust×SeaORMで学ぶORM入門も参考になります。

タイトルとURLをコピーしました