出来事の日付:2026年9月25日。
Rustを中心に構築されたフルスタックのウェブフレームワークTopcoatが、バージョン0.9でサーバープッシュ対応を追加した。開発者は、サーバーレンダリングを基本としながら、ブラウザー上でも応答性の高いインターフェースを提供できるモデルを追求している。この更新により、ブラウザーはWebSocket接続を維持し、チャットのようなアプリケーションで必要になる反復的な更新も含めて、サーバーからのインターフェース変更を購読できるようになった。
このプロジェクトは2カ月前、ビュー、コンポーネント、メール送信機能、Toastyというオブジェクト関係マッピング層を備えた、必要な機能を一通りそろえるフレームワークとして発表された。掲げる目標は、Rustの性能と型安全性という利点を保ちながら、高水準のアプリケーション開発の生産性を高めることだ。Topcoatは、ネットワーク処理、スケジューリング、タイマー、入出力処理に用いられるRustの非同期ランタイムTokioを中心とするエコシステムと関わりがある。
Topcoatの設計は、サーバーサイドレンダリングを出発点としている。開発者は、この方式によってデータに簡潔にアクセスでき、ページを初回から素早く表示できるとする一方、ネットワークの往復を繰り返すことで対話性が制約される可能性も認めている。そのため、このフレームワークは、ブラウザーで実行するJavaScriptへ変換できる、型検査済みのRustのサブセットを使ったシグナルと実行時の式を提供する。こうした式は、ローディング表示を出したり、スタイル用のクラスを切り替えたりといった小さな即時変更を、サーバーに問い合わせることなく処理できる。
構造的な変更には、Topcoatはシャードと呼ぶコンポーネントを使う。関連するシグナルが変化すると、ブラウザーが現在の値をサーバーに送り、サーバーは対象コンポーネントの更新後のHTMLをレンダリングする。バージョン0.8では、サーバーでレンダリングされるインターフェースのコードが、シグナルを直接読み取れるようになった。フレームワークはそれらの依存関係を追跡し、変更された値に結び付くページ領域だけを取得する。更新対象の要素は、入力状態やフォーカスを維持できるよう、既存要素を変形させる方式で更新される。
このフレームワークは、複数回のインターフェース更新を送れるライブビューにも対応する。用途の1つが、ストリーミングによるサーバーサイドレンダリングだ。アプリケーションは、読み込み中のスケルトン画面をすぐに返し、データが届いた時点で置き換えられる。Topcoatには、このパターンのためにsuspenseとerror-boundaryのコンポーネントが用意されている。ライブビューは、時間のかかる処理の進捗表示など、一連の変更を順次送ることもできる。
バージョン0.9は、WebSocketベースのサーバープッシュによって、このモデルを初回のページ配信後にも広げる。ページが読み込まれた時点でストリームを終了するのではなく、ブラウザーが接続を維持し、その後もサーバー側の状態を起点とするインターフェース変更を受け取れるようにする。
付属のデータ層であるToastyも進化している。新しいupdateマクロでは、あらかじめレコードを読み込まずに、1回のデータベース操作でフィールドの変更と保存済みの値のインクリメントを行える。開発者はさらに、PostgreSQLのJSONB列に対するクエリーを含む、ドキュメントデータの本格的な対応も追加している。
Topcoatはまだ若いフレームワークで、具体的な形はなお開発中だ。それでも現在のリリースからは、その中心的な方針が明らかになっている。標準ではレンダリングとビジネスロジックをサーバー側に置き、遅延や操作性の要件に応じて、対象を絞ったクライアント側での実行、選択的な再レンダリング、持続的な接続を用いるという方針だ。



