1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜRustでフロントエンドもバックエンドも書いたのか — Yew + Rocket構成の技術選定

1
Last updated at Posted at 2026-03-27

この記事は playpark Blog からの転載です。


この記事で分かること

  • フロントエンドもRustで書く判断に至った理由
  • Yew / React / Leptos の比較と選定基準
  • Rust統一フルスタック構成のメリット・デメリット

背景: APIをRustで書いていて思ったこと

バックエンドをRocketで書いていると、フロントエンドに切り替えるたびにコンテキストスイッチが発生する。型定義もRustとTypeScriptで二重管理になる。

「フロントもRustで書けたら、全レイヤーで型が一貫するのでは?」

ちょうどRustを深く学びたいタイミングだったので、クリックしたら数が増えるだけのカウンターアプリを題材にフルスタックRustに挑戦した。

カゾエルくんyaoyorozチームで開発中のプロジェクト。playpark LLCもチームの一員として参画。

選択肢の検討

フロントエンドをRustで書く方法はいくつかある。

フレームワーク 特徴 成熟度 React経験者の学習コスト
Yew React Hooks風API、コンポーネントモデル 安定 低め(Hooksに似ている)
Leptos シグナルベース、SSR対応 成長中 中(SolidJSに近い)
Dioxus React風API、マルチプラットフォーム 成長中 低め
Seed Elm風アーキテクチャ メンテナンス縮小 高い

バックエンド側も同様に選択肢がある。

フレームワーク 特徴 非同期
Rocket Rails風、ガード機能、型安全DI tokio
Actix Web 高パフォーマンス、Actor モデル tokio
Axum tower ベース、Extractors tokio

なぜYew + Rocketを選んだか

Yewを選んだ理由:

  1. React経験が活かせるuse_stateCallbackhtml!マクロなど、React Hooksの知識がそのまま使える
  2. エコシステムの安定性 — Rust WASMフレームワークの中では最も歴史が長く、ドキュメントも豊富
  3. 学習題材との相性 — シンプルなカウンターアプリなので、SSR不要。Yewのクライアントサイドレンダリングで十分

Rocketを選んだ理由:

  1. Guard機能 — Cookie処理やDIが宣言的に書ける。&State<T>でサービスを注入するパターンはExpressより直感的
  2. マクロベースのルーティング#[post("/session")]のように、エンドポイント定義がコードと一体化する
  3. 型安全なリクエスト/レスポンスJson<T>で入出力を型で縛れる

実装例: APIエンドポイント

#[post("/session")]
pub async fn increment_session(
    cookies: &CookieJar<'_>,
    redis: &State<RedisPool>,
    config: &State<AppConfig>,
) -> Result<Json<SessionResponse>, Status> {
    let session_id = get_or_create_session(cookies);
    let count = redis.incr(&session_id).await
        .map_err(|_| Status::InternalServerError)?;
    let expiration = calculate_midnight_expiration();
    redis.expire(&session_id, expiration).await?;

    if count == 1 {
        set_session_cookie(cookies, &session_id, expiration, config);
    }

    Ok(Json(SessionResponse { session_id, count, is_new: count == 1 }))
}

引数にGuard型を書くだけで、Cookie・Redis・設定が注入される。ボイラープレートが少ない。

まとめ: どういう場面で使うべきか

判断基準 Rust統一が向くケース 向かないケース
チーム構成 Rustに慣れたチーム フロントエンド専任がいる
プロダクト規模 小〜中規模、学習目的 大規模SPA(エコシステムの差)
重視するもの 型安全・パフォーマンス 開発速度・ライブラリの豊富さ

正直なところ、開発速度はReact + TypeScriptの方が速い。しかし「コンパイル通ればだいたい動く」「実行時エラーが激減する」という型安全の恩恵は、全レイヤーがRustで揃うことで最大化される。

Rustを深く学びたいなら、シンプルなアプリでフルスタックを試すのは良い入口だと思う。


さらに深掘りしたい方へ

この記事ではYew + Rocket構成の技術選定理由を解説しました。

:page_facing_up: 【Rust】「非生産的」なWebアプリを作ってみた - Yew + Rocketフルスタック開発 ではさらに:

  • Yewコンポーネントの完全な実装コードとReactとの詳細比較
  • Redis→PostgreSQL二段構え永続化の設計と同期実装
  • PgBouncer互換性・クロスサイトCookie・WASMビルド最適化など本番運用の落とし穴

を扱っています。


playpark について

playpark LLC - 業務自動化・AI活用・Web開発

:link: お問い合わせ | ブログ

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?