AIイノベーションズ ブログ

【Railway】Rust Axumをデプロイする方法

最終更新日:
阿部隼也
阿部 隼也
AIイノベーションズ 代表取締役社長 | x.com/ai_abe_shunya
リアルタイムアンケートツール: LiveQ

お悩み相談AIチャット: AI相談.com

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

Rust Axumアプリをデプロイする方法

Axum は Rust 製の非同期 Web フレームワークで、tokiohyper 上に構築されています。安全性とパフォーマンスを両立しつつ、モジュール化された設計で高い生産性を実現します。

本記事では、Axum アプリを Railway にデプロイする 4 つの方法を紹介します。

  1. テンプレートからワンクリックデプロイ
  2. GitHub リポジトリからデプロイ
  3. Railway CLI からデプロイ
  4. Dockerfile を使ったデプロイ

どの方法を選ぶべき?

  • 初めてで最短で試したい: テンプレート
  • 手元から素早く都度デプロイしたい: CLI
  • プッシュで自動デプロイしたい: GitHub 連携
  • 既存の Docker イメージ/複雑な依存がある: Dockerfile

Axum アプリを作成する

既にプロジェクトがある場合はこの章をスキップしてください。
cargo new helloworld --bin
cd helloworld
cargo add axum
cargo add tokio --features full

次に src/main.rs を以下のように書き換えます。

use axum::{ routing::get, Router };
use std::net::SocketAddr;
 
#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(|| async { "Hello World, from Axum!" }));
 
    let port: u16 = std::env::var("PORT").unwrap_or_else(|_| "3000".into()).parse().unwrap();
    let addr = SocketAddr::from(([0, 0, 0, 0], port));
 
    println!("🚀 Axum app listening on {}", addr);
    axum::Server::bind(&addr).serve(app.into_make_service()).await.unwrap();
}
Railway はコンテナの PORT を自動で割り当てます。上記のように環境変数から取得し、0.0.0.0 で待ち受ける実装にしておくと安心です。

ローカルで実行

cargo run

ブラウザで http://localhost:3000 を開き、“Hello World, from Axum!” と表示されれば準備完了です。


Railway へのデプロイ方法

テンプレートからワンクリックデプロイ

Railway テンプレートマーケットプレイスに Axum テンプレートがあります。ワンクリックでインフラ設定からビルドまで自動化されます。

CLI からデプロイ

# CLI が未インストールなら
npm i -g @railway/cli
railway init   # プロジェクト初期化
railway up     # デプロイ
railway domain # 公開 URL 発行

CLI はプロジェクトを圧縮してアップロードし、実行ログをリアルタイムに確認できます。

GitHub リポジトリからデプロイ

Railwayダッシュボード
  1. Railway ダッシュボード → New ProjectDeploy from GitHub repo
  2. リポジトリ選択 → Deploy
  3. デプロイ完了後、Settings → NetworkingGenerate Domain をクリック

Dockerfile を使ったデプロイ

以下は cargo-chef を活用したマルチステージビルド例です。

FROM lukemathwalker/cargo-chef:latest-rust-1 AS chef
WORKDIR /app
 
FROM chef AS planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json
 
FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
RUN cargo build --release
 
FROM debian:bullseye-slim
WORKDIR /app
COPY --from=builder /app/target/release/helloworld ./helloworld
CMD ["./helloworld"]

次のステップ

  • データベースとの連携sqlx を使って Postgres に接続
  • 観測性の向上tracing と OpenTelemetry で分散トレースを導入
  • 環境変数/Secrets の管理 – Railway の Variables に DATABASE_URL などを登録

Rust × Axum × Railway で安全かつ高速なバックエンドを構築しましょう!

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

リアルタイムアンケートツール: LiveQ

お悩み相談AIチャット: AI相談.com