Webバックエンド - フレームワーク

Rocket ろけっと

RustWebフレームワーク型安全非同期処理REST APIマクロ
Rocketについて教えて

簡単に言うとこんな感じ!

RocketはRustというプログラミング言語で使えるWebサーバーのフレームワーク(土台)だよ!「速くて安全なWebアプリを作れる仕組み」で、ロケットみたいにキビキビ動くのが特徴なんだ。バグが出にくいように設計されてるから、品質重視のシステム構築にぴったりってこと!


Rocketとは

Rocketは、Rustプログラミング言語向けのWebアプリケーションフレームワークです。2016年に公開され、「型安全(かたあんぜん)」と呼ばれる仕組みを活用することで、開発者がコードを書く段階でバグを未然に防げる点が最大の特徴です。PythonDjangoJavaScriptExpressに相当するポジションですが、Rustならではの高速性と堅牢性を兼ね備えています。

型安全とは、「間違ったデータを渡したらコンパイル(プログラムを動かす前の変換処理)の時点でエラーにしてくれる」仕組みです。たとえば、数字を期待している入力欄に文字列が来たら、サーバーを起動する前に「ここおかしいよ」と教えてくれます。これにより、本番環境(実際のユーザーが使う環境)での予期しない障害を大幅に減らせます。

発注・選定する立場からみると、Rocketを採用したシステムは「起動後に壊れにくい」という安心感があります。一方で開発者の学習コストは高め(Rust自体が習得難易度の高い言語)なので、チームのスキルセットを確認した上で採用判断することが重要です。


Rocketの仕組みと構造

Rocketは大きく4つのコンセプトで動いています。

コンセプト役割身近な例え
ルーティングURLと処理を結びつける電話の自動音声「1番を押すと〜」
リクエストガードアクセス前に条件チェック入口の受付でIDカード確認
フェアリング処理の前後に共通処理を挟むお店の開店・閉店時のルーティン
レスポンダー結果をHTTPレスポンスに変換注文を受けて料理を皿に盛る

覚え方:「ル・リ・フェ・レ」で4役

ーティング → クエストガード → フェアリング → スポンダー、と処理が流れます。「ルリフェレ」と唱えると順番が覚えやすいです。

Rocketのコード例(雰囲気をつかむため)

#[get("/hello/<name>")]
fn hello(name: &str) -> String {
    format!("Hello, {}!", name)
}

上記は「/hello/(名前)というURLにアクセスされたら、『Hello, 〇〇!』と返す」というルートの定義です。#[get(...)]の部分がマクロと呼ばれるRocket特有の記述で、URLパターンと関数を直感的に結びつけられます。


歴史と背景

  • 2016年: Sergio Benitezによって公開。当時まだ安定版ではなかったRustの「Nightly(ナイトリー)ビルド」という先行リリース版が必要だったため、本番利用には敷居が高かった。
  • 2018〜2020年: Rustの言語機能が成熟し、Rocketの採用事例が増加。特に非同期処理(複数の処理を並行して捌く仕組み)への対応が求められるようになる。
  • 2021年: 待望のRocket v0.5リリース(RC版)。Rustの標準非同期ライブラリ「async/await」に対応し、高トラフィック環境でも安定して動作するようになった。
  • 現在: GitHubのスター数は2万超えで、Rustのウェブフレームワークの中でも最も知名度の高いプロジェクトの一つ。AxumやActix-webと並ぶ主要3フレームワークの一角を担っている。

主要Rustウェブフレームワークの比較

Rocketはどのような位置づけにあるのかを、代表的な競合フレームワークと比較します。

フレームワーク特徴学習コストパフォーマンス型安全
Rocket直感的・マクロ多用・型安全重視中〜高
AxumTokio公式・柔軟・非同期特化非常に高
Actix-web超高速・アクターモデル最高クラス
Warpフィルター合成・関数型スタイル

RocketとExpressの対比(Node.jsユーザー向け)

Node.js / Express          Rust / Rocket
─────────────────────      ─────────────────────
app.get('/path', fn)   →   #[get("/path")] fn
middleware             →   Fairing(フェアリング)
req.params             →   パスパラメーター(型変換自動)
res.json(data)         →   Json(data) レスポンダー

Rocketのリクエスト処理フロー

クライアント HTTPリクエスト ルーティング URLマッチング リクエスト ガード ハンドラー 処理・返却 フェアリング(前処理):ログ記録・認証チェックなど共通処理 フェアリング(後処理):レスポンス加工・ログ完了など

関連する規格・RFC

規格・RFC番号内容
RFC 9110HTTP Semantics(HTTPの基本仕様。Rocketが実装するプロトコルの根拠)
RFC 9112HTTP/1.1メッセージ構文(RocketがサポートするHTTP/1.1の仕様)
RFC 7519JWT(JSON Web Token)。Rocketで認証実装する際によく使われる規格
RFC 6455WebSocket。RocketのWebSocket拡張実装の基盤となる規格

関連用語

  • Rust — Rocketが動作するプログラミング言語。速度・安全性を両立した現代的なシステム言語
  • REST API — RocketでよくつくるAPI設計スタイル。HTTPメソッドとリソースURLで操作を表現する
  • Webフレームワーク — Webアプリ開発の共通処理をまとめた土台の仕組み全般
  • 非同期処理 — 複数の処理を並行して捌く仕組み。Rocket v0.5から本格対応
  • ミドルウェア — リクエスト・レスポンスの前後に挟む共通処理。Rocketではフェアリングに相当
  • Docker — Rocketアプリをコンテナ化してデプロイする際に使われる技術
  • JSON — RocketのAPIがデータをやり取りする際の標準フォーマット
  • JWT — Rocketで認証機能を実装するときによく組み合わせるトークン形式