Astro × Svelte: 静的と動的の完璧な融合

現代のWeb開発において、パフォーマンスとリッチなUIはしばしばトレードオフの関係にあります。しかし、AstroSvelte を組み合わせることで、その両方を妥協することなく実現できます。

Astro Islands アーキテクチャ

AstroはデフォルトでクライアントサイドのJavaScriptを出力しない、Zero-JS by Default のアプローチを採用しています。これにより、信じられないほど高速に読み込まれる静的サイトが生成されます。

しかし、ナビゲーションメニューの開閉や、ダークモードの切り替えなど、インタラクティブな要素にはJavaScriptが必要です。ここで活躍するのが Astro Islands(アイランドアーキテクチャ)です。

Astro Islandsとは

ページ全体を静的なHTMLとしてレンダリングしつつ、インタラクティブ性が必要な特定のコンポーネント(島)だけをクライアントサイドでハイドレーション(JavaScriptによる有効化)する仕組みです。

RavinでのSvelteの活用

Ravinコンポーネントライブラリでは、動きのない静的な要素は拡張子 .astro で作られ、アニメーションや状態管理が絡む要素は拡張子 .svelte で作られています。

SvelteはVirtual DOMを持たず、コンパイル時に小さくて効率的なバニラJSに変換されるため、Astroの思想と非常に相性が良いフレームワークです。

動作デモ

以下は、Svelteで記述された Toggle コンポーネントを記事の中に埋め込んだ例です。この部分はMDXの記述内で client:visible ディレクティブにより読み込まれ、画面に表示された瞬間にインタラクティブになります。

通知を有効にする
自動保存をオンにする

まとめ

Astroの静的生成の速さと、軽量かつ強力なSvelteの反応性を組み合わせることで、Ravinは「無駄のないリッチな体験」をユーザーに提供しています。

より詳しいコンポーネントの構造については、コンポーネント一覧ページから直接ソースコードをご確認ください。