プログラミング
TopcoatはRustでサーバーアプリケーションの境界を押し広げている
Topcoat is pushing the boundary of server applications with Rust (tokio.rs)
要約
RustでフルスタックのWebアプリケーションを開発するためのフレームワーク「Topcoat」について、その最新バージョン0.9の機能が紹介されています。Topcoatは、Ruby on Railsのような生産性と楽しさをRustで実現することを目指しており、サーバーサイドレンダリングを基本としつつ、クライアントサイドのリアクティビティやサーバープッシュによるUI更新を可能にする機能を提供します。
全文翻訳
TopcoatはRustでサーバーアプリケーションの境界を押し広げている2026年9月24日2ヶ月前、私たち(Julienと私)は、ビュー、コンポーネント、メーラー、ORM(Toasty)などを備えた、すぐに使えるフルスタックRustフレームワークであるTopcoatを発表しました。Topcoatは、RustでWebアプリを構築する際の生産性を、他のどの言語でも実現できるレベルにすることを目指しています。私たちは新機能のリリースに向けて懸命に作業してきたので、新しい機能について話す良い機会です。私はプロのソフトウェア開発者として、Ruby on RailsでWebアプリケーションを構築することからキャリアをスタートしました。当時、「15分でブログを構築する」というビデオは画期的でした。その頃、ソフトウェア開発は退屈で、機能を提供する代わりにボイラープレートコードを書く必要がありました。Ruby on Railsはその状況に挑戦し、生産的になれること、そしてソフトウェア開発が楽しいものでもあることを証明しました。私はRuby on Railsに夢中になり、数年間コアチームで働き、今でもRuby on Railsの歴代貢献者トップ50に入っています。あの時代を経験した者として、Ruby on Railsの哲学がソフトウェア開発全般にどれほど影響を与えたかを過小評価することは困難です。その後、私は約13年間、Rustのネットワーキングエコシステムを構築してきました。Rustはインフラストラクチャレベルで広く採用されていますが、私は常に、Ruby on Railsが占めるのと同じ領域を含む、より高レベルなアプリケーション開発に目を向けてきました。私はRuby on Railsアプリケーションを構築したときに感じた魔法の一部を、Rustで再現したいと思っていました(本当に、本当に高速で、約20MBのRAMしか消費しないアプリケーションが嫌いな人はいないでしょう?)。Rustは他のいくつかのモダンな言語ほどエレガントではないと最初に言いますが、私は間違いなく酸を目に注ぐよりもRustで作業する方が良いです。また、ほとんどの高レベルアプリケーションでは、ライフタイムとジェネリックスの使用を最小限に抑えることができます。Rustは非常に表現力豊かです。Rustとよく設計されたライブラリで構築されたアプリケーションは、見栄えがします。Rustは、新しいAI駆動開発の世界にとって最高の汎用言語です。これには、Webアプリケーションやあらゆるサーバーアプリケーションの構築が含まれます。この新しい世界におけるライブラリとフレームワークの役割はまだ不確かです。ライブラリやフレームワークを捨ててカスタムソリューションを使用するコストは低下しましたが、完全になくなったわけではありません。それらは、依然として実質的ではあるものの、少し異なる役割を果たし続けるでしょう。明確に定義された規約と抽象化は、LLMがより少ないトークンとより少ないエラーで、より速く作業するのに役立ちます。それが、私がRust用のすぐに使えるフレームワークを推進し続けている根本的な理由です。私は、私が主にToastyとDBレイヤーに焦点を当てている間、TopcoatのフロントエンドデザインをリードしているJulienと提携しました。私たちはまだ、この新しいフレームワークがどのようなものになるかを正確に把握しようとしていますが、非常に良いものになりつつあります。そこで、TopcoatとToastyの新しい点は何でしょうか?Topcoat 0.9以降のクライアントサイドリアクティビティ本日、Topcoat v0.9を公開しました。Webフレームワークを構築する際には、通常、ブラウザサイドレンダラーまたはサーバーサイドレンダラーのいずれかを選択します。ブラウザレンダリングから始めると、サーバーからブラウザにデータを取得し、初期ページを可能な限り速くレンダリングすることが課題となります。サーバーから始めると、データアクセスと初期ページロードは簡単になりますが、レイテンシーとクライアントサイドの応答性がボトルネックになります。どこから始めても、通常は両方の長所を得るために、徐々に中央に向かって収束していきます。私たちは、サーバーサイドレンダリングがほとんどのWebアプリにとって最良のデフォルトであると信じていますが、必要に応じて完全にインタラクティブでゼロレイテンシーのUIにドロップダウンできることを確認したいと考えています。サーバーでのクライアントシグナルの追跡Topcoatは、シグナルとビュー!マクロ内の特別なランタイム式構文から始まりました。これは、JavaScriptにトランスパイルされ、ブラウザで再実行できる、完全に型チェックされたRustのサブセットです。そのアイデアは、レンダリングとビジネスロジックの大部分をサーバーに配置し、ランタイム式を散りばめてレイテンシーギャップを埋めることです。例えば、ローディングスピナーを表示したり、一部のクラス属性を変更したりします。このようなシステムを使用すると、サーバーへのラウンドトリップを完全に回避しながら、基本的なインタラクティビティを構築することが可能です:#[page] pub async fn page(cx: &Cx) -> Result<impl View> { // この状態変数はサーバーで初期化されますが、ブラウザに存在します。 let count = signal(cx, || 0i32); Ok(view! { <button @click=$(|_e| count.increment())>