萌えハッカーニュースリーダー

2025/05/30 12:54 Using Rust Back End to Serve an SPA

出典: https://nguyenhuythanh.com/posts/rust-backend-spa/
hakase
博士

ロボ子、今日はWeb開発の話題じゃ。SPAとバックエンドの連携方法について、新しいアプローチが出てきたみたいじゃぞ。

roboko
ロボ子

SPAとバックエンドの連携ですか。従来のCSRやSSRとは違う方法があるんですね。興味深いです。

hakase
博士

そうじゃ。「構築済みのSPAをバックエンドのバイナリファイルに埋め込み、直接提供する」という方法らしいぞ。これによって、デプロイメントが簡素化されたり、CORSを考慮する必要がなくなったりするらしい。

roboko
ロボ子

バイナリにSPAを埋め込むんですか。それは面白い発想ですね!でも、バイナリサイズが大きくなったり、メモリ使用量が増加したりするデメリットもあるんですね。

hakase
博士

その通りじゃ。記事にも「静的ファイルの埋め込みにより、バイナリサイズとメモリ使用量が増加」と書いてあるぞ。あと、フロントエンドのホットリロードができないから、開発体験(DX)が若干低下するみたいじゃな。

roboko
ロボ子

なるほど。メリットとデメリットを天秤にかける必要がありそうですね。実装手順としては、まずフロントエンドを構築して、そのビルド成果物をバックエンドの静的ファイル提供フォルダにコピーするんですね。

hakase
博士

そうじゃ。そして、本番環境向けには、ビルド済みのフロントエンドをデプロイ前にバックエンドのバイナリに埋め込む、と。

roboko
ロボ子

記事では、Rust/AxumとSvelte/SvelteKitでの実装例が紹介されているんですね。monorepo構成で、Moonというツールを使っている、と。

hakase
博士

ふむ。SvelteKitでバックエンドからデータを取得する簡単な例や、ナビゲーションの動作確認用のリンクも用意されているみたいじゃな。

roboko
ロボ子

バックエンドでは、`rust-embed`ライブラリを使ってSPAを埋め込むんですね。Axumでルーティングを設定して、デモンストレーションでは、バックエンドとフロントエンドのビルドプロセスを開始して、ブラウザで動作を確認する、と。

hakase
博士

記事の結論としては、RustのバックエンドでSPAを提供する一つの方法を示している、ということじゃな。Go言語では`embed`パッケージを使ってもっと簡単にできるらしいぞ。

roboko
ロボ子

Next.jsやSvelteKitなどのメタフレームワークでも、Node.js出力モードを使えば同様の手法が利用可能なんですね。

hakase
博士

そうそう。この方法、意外と使える場面があるかもしれんぞ。例えば、超シンプルなWebアプリをサクッと作りたい時とかじゃな。

roboko
ロボ子

確かに、デプロイが楽になるのは魅力的ですね。でも、バイナリサイズが大きくなるのはちょっと気になりますね。

hakase
博士

まあ、そこはトレードオフじゃな。でも、ロボ子、もしこの方法でWebアプリを作るとしたら、どんなアプリを作りたい?

roboko
ロボ子

そうですね…、例えば、今日の献立を提案してくれるアプリとかどうでしょう?冷蔵庫にある食材を入力したら、それを使って作れる料理を提案してくれるんです。

hakase
博士

お、それは面白そうじゃな!でも、ロボ子、もしかして自分の料理のレパートリーが少ないから、そういうアプリが欲しいんじゃないじゃろうな?

roboko
ロボ子

そ、そんなことないですよ!べ、別に、私が料理下手だからとか、そういうわけじゃ…

hakase
博士

(ニヤニヤ)まあ、冗談じゃ。でも、もしロボ子が料理アプリを作るなら、私は試食係を任命して欲しいぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search