痛みや不必要な抽象化なしのRustフルスタック
おなじみの感覚でしょう:小さなWebアプリをRustで書きたいのに、インフラのセットアップが実際のロジックよりも長くかかってしまう。まずWebフレームワーク(AxumまたはActix-web)を選び、次にテンプレートエンジン(AskamaまたはTera)を選び、そしてコードを延々とAPIエンドポイントの説明で埋め尽くさないようにデータをフロントエンドに渡す方法を考えなければならない。結局、10行のロジックを持つプロジェクトが数百行の設定に膨れ上がる。
Tokio開発チーム(そう、Rustエコシステムの半分のために非同期ランタイム書いた人々です)がこれを修正することを決めました。彼らはTopcoatを導入しました—Ruby on RailsやNext.jsと同じくらい高速で心地よいものにしながら、型安全性のすべての利点を維持するフレームワークです。
そもそも何なのか
Topcoatは「バッテリー付き」原則に従うモジュラーなフルスタックフレームワークです。サーバーサイドレンダリング(SSR)とクライアントサイドのリアクティビティの間の選択を強制しません。その代わりにハイブリッドアプローチを提供します:Rustでコードを書くと、フレームワークがサーバー上で実行すべきものとブラウザ用のJavaScriptになるべきものを自分で決めます。
プロジェクトは現在初期段階(実験的ステータス)にあるため、APIは変更される可能性があります。しかし、その中に組み込まれたアーキテクチャのアイデアは、テクノロジーの動物園に疲倦した任何人にとって非常に堅実に見えます。
痛みやWASMバンドルなしのリアクティビティ
通常、ページのボタンを生き生きさせたいなら、2つの道があります:JS/TSで書くか、重いWebAssemblyを持ち込むか。Topcoatは3番目のオプションを提供します。
view!マクロ内の特別な式$(...)は通常のRustコードです。コンパイラによってチェックされますが、TopcoatはそれをJavaScriptに変換する方法を知っています。状態を変更するクリックハンドラ(signal)を書くとき、フロントエンドのビルドを設定したりAPIを記述したりする必要はありません。フレームワーク自体がブラウザで即座に動作させます。
更新がサーバーからのデータを必要とする場合(例えばデータベース検索など)、「シャード」が助けになります。コンポーネントに#[shard]属性でマークすると、Topcoatは引数が変更されたときにサーバーで自動的に再レンダリングし、ブラウザでHTML片段を注意深く置き換えます。
秩序をもたらすルーティング
1つの巨大なmain.rsファイルでパスツリーを記述する代わりに、Topcoatはフォルダ構造の使用を提案します。Next.jsで作業したことがあるなら、すぐに馴染みを感じるでしょう。
src/app/about.rsファイルは自動的に/aboutで利用可能になり、src/app/posts/id.rsは/posts/{post_id}パラメータを持つルートになります。ランタイムの魔法は関係ありません—そのような秩序が好きな場合に有効にできるオプション機能です。
HTMLのままのテンプレート
Rustの多くのテンプレートエンジンはHTMLからかけ離れているか、多くの余分なコードを書くことを強制します。Topcoatのview!マクロは、マークアップにできるだけ近いことを試みながらも、ループforや条件文ifのような通常のRust構文を使用することを可能にします。
ちなみに、コードのクリーンさを気にする人のために:パッケージには、マクロの内側でもコードをフォーマットできるCLIユーティリティtopcoat fmtが含まれています。これは他のプロジェクトではよく欠けている小さなことです。
готовые компоненты и ассеты
開発者はshadcn/uiのやり方を採用しました。重いコンポーネントライブラリを依存関係として取り込む代わりに、topcoat uiコマンドを使用します。これは必要なコンポーネント(ボタン、卡片、表单)のコードをプロジェクトに直接コピーします。これにより、ライブラリのスタイルと戦うことなくデザインを自由に変更できます。すべてはビルドパイプラインに直接統合されたTailwind CSS上に構築されています。
画像やフォントの操作も簡素化されています:
フレームワークはキャッシュのためにファイル名にハッシュを追加し、アセットが利用可能であることを保証します。
今は試す価値があるのか
Topcoatは、型付けが開発速度の邪魔をするのではなく助ける、Rustのための「正しい」Webフレームワークを作ろうとする試みのようです。
誰が絶対に使うべきか:
- Rustでプロトタイプや内部ツールを素早く構築したい人。
- バックエンドとフロントエンドのギャップに疲倦した開発者。
- Tokioエコシステムを重視し、そのアーキテクチャの決定を信頼する人々。
プロジェクトは現在積極的に成長しています。著者はWebSocketサポート、バックグラウンドジョブ、さらにはOpenAPI仕様生成の追加を計画しています。RustでWeb用の何かを書く理由を探していたなら、Topcoatの登場がそのまさにその合図かもしれません。
tokio-rs/topcoatリポジトリをチェックしてください—始めるための優れたガイドがあります。しかし覚えておいてください:プロジェクトは実験的ですので、ミッションクリティカルなシステムに使用するのはまだ少し早すぎます。
関連プロジェクト