Rust

RustでWeb API開発: Actix-webとAxumの比較と実装

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

RustでWeb API開発を始める前に知っておくべきこと

RustによるWeb API開発は、パフォーマンスと安全性が求められる現代のシステム構築に最適な選択肢です。しかし、Rustの特異性やフレームワーク選定の背景を理解していないと、初期段階で多くの壁にぶつかる可能性があります。このセクションでは、Actix-webAxumを選んだ理由や、Rust独自の開発フローについて詳しく説明します。

Actix-webとAxumの選択理由

RustにおいてWeb APIを開発する際、主に利用されるフレームワークはActix-webAxumです。両者には以下のような特徴があります。

項目 Actix-web Axum
フレームワークの設計思想 アクター(Actor)モデルに基づく非同期処理を強調 Tokioベースのシンプルなアーキテクチャ
性能 高い並列処理能力を持つが、学習曲線が急峻 シンプルで扱いやすく、学習コストが低い
拡張性 中規模以上のプロジェクトに適している 小~中規模のプロジェクト向け
コミュニティ/エコシステム 大規模プロジェクトが多いがコミュニティ規模は限定的 シンプルな設計により新規開発者が多い
実装例 高性能なリアルタイムアプリケーションに適す マイクロサービスやシンプルAPI向け

Actix-webはRustの高パフォーマンスを活かした非同期処理が得意ですが、Axumはシンプルなコード構成とTokioとの親和性で注目されています。どちらもRustの特徴である安全性(メモリ管理の自動化)やパフォーマンス向上に寄与します。

注意点:Rustでは一般的なWeb開発言語と異なり、ライフタイム(lifetime)や所有権(ownership)を意識したコード構成が必要です。特にasync/awaitの使い方や、エラー処理の記述方法が初期段階での落とし穴になります。


Cargo.toml設定とプロジェクト構成

RustでWeb APIを開発する際、プロジェクトの初期設定は非常に重要です。Cargo.tomlに正しい依存関係を追加し、モジュール構成を最適化することで、将来的な保守性や拡張性が大きく変わります。

依存関係の追加方法

Actix-webを導入するには、Cargo.tomlに以下の記述が必要です。

  • actix-webはWebサーバーのコアライブラリ
  • serdeはJSONデータのシリアライズ/デシリアライズに必須
  • tokioは非同期処理を実現するランタイム環境
  • dotenv.envファイルから環境変数を読み込むため

Axumの場合、以下のように記述します:


モジュール構成の最適化

src/ディレクトリ配下に以下のようにモジュールを分けるのが一般的です。

  • handlers/:ルーティング処理を分離
  • models/:データ構造やDB接続用コードを配置
  • config/:環境変数読み込みや設定管理を行う

ヒント:プロジェクト規模が大きくなると、mod.rsファイルでモジュールの公開範囲を細かく指定する必要があります。pub mod user;などの記述で公開対象を明示すると良いです。


Actix-webの基本構造とルーティング設定

Actix-webは、非同期処理と高性能なHTTPサーバーとして知られています。基本的な構造を理解し、ルーティングを正しく設定することで、効率的なAPI開発が可能です。

サーバー起動コードの構成

Actix-webのサーバー起動はmain.rsに記述します。以下は基本的なテンプレートです:

  • HttpServer:HTTPサーバーの起動処理
  • App::new():アプリケーションの構築
  • .service():ルーティングを追加

静的ルートと動的パラメータ

Actix-webでは、静的なURLと動的なパラメータを以下のように定義できます。

  • 静的ルート:固定のURLを指定する
  • 動的パラメータ{id}のように変数部分を定義し、URLから値を取り出す

注意点:動的パラメータはクエリパラメータと区別することが重要です。/api/user?id=123/api/user/{id}は完全に別の処理になります。


リクエスト処理とJSONデータのパース

Actix-webでは、HTTPリクエストを処理する際の標準的なパターンがいくつかあります。特にJSONデータの取得にはJson型やserdeライブラリの活用が不可欠です。

ペイロードの取得方法

以下はPOSTリクエストで送信されたJSONペイロードを取得する例です:

  • web::Json<T>:JSONデータを構造体に変換する型
  • #[derive(Deserialize)]:serdeライブラリでデシリアライズ可能にするためのアトリビュート

serdeによる構造体マッピング

JSONデータをRustの構造体に変換する際は、serdeライブラリが必須です。以下に構造体定義例を示します:

  • Serialize:RustのオブジェクトをJSONに変換
  • Deserialize:JSONデータをRustのオブジェクトに変換

実践例:以下のようにして、レスポンスとしてJSONを返すことが可能です。


環境変数管理とセキュリティ対策

Web API開発において、環境変数の管理やセキュリティ対策は非常に重要です。特にRustでは、dotenvライブラリを活用することで、.envファイルから秘密鍵やAPIキーを安全に読み込むことができます。

dotenvによる設定読み込み

以下のようにCargo.tomldotenvライブラリを追加し、.envファイルで環境変数を定義します:

.envファイル例

重要: .envファイルはリポジトリ外に保存し、gitignoreで自動的に無視されるように設定してください。本番環境ではDockerのENVディレクティブやクラウドサービスのシークレット管理機能を活用します。


セキュリティ対策の具体例

1. JWT認証の実装

アクセス制限が必要なエンドポイントでは、JWT(JSON Web Token)による認証を導入してください。jsonwebtokenライブラリを使用することで、トークン発行・検証が可能です。

2. HTTPS強制の実装

HTTPS通信を強制するには、以下のような設定を行います:

注意: 証明書はLet's Encryptなどから無料で取得可能です。本番環境では秘密鍵を外部に公開しないようにしてください。


テストコードの作成とDockerコンテナ化

RustでのWeb API開発では、ユニットテスト・統合テストの実装が非常に重要です。さらに、Dockerによるコンテナ化を行うことで、本番環境との差異を最小限に抑えることが可能です。

Dockerfile構築手順

Rustプロジェクトではマルチステージビルドが推奨されます。以下はDockerfileのサンプルです:

  • rust:1.63:Rust開発環境を提供する公式イメージ
  • alpine:latest:最小限のLinuxベースイメージで、実行ファイルを配置

ヒント.envファイルの内容はDockerコンテナ内でも読み込み可能ですが、本番環境ではENVに直接設定するなど、秘密情報を外に出さない工夫が必要です


結論

RustによるWeb API開発には、フレームワーク選定やセキュリティ対策が成功の鍵となります。Actix-webとAxumの特徴を理解し、プロジェクト規模に応じた最適な選択を行いましょう。また、環境変数管理Dockerコンテナ化により、安定性と保守性を向上させましょう。


スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Rust