Svelte 5正式リリース後のエコシステム:Runesで何が変わった?周辺ライブラリの対応状況を徹底調査

Svelte 5の正式リリースから1年が経過し、Runesによるリアクティビティの刷新で周辺ライブラリはどう変わった?UIライブラリ、状態管理、フォーム処理、テストまで、2025年時点のエコシステムを徹底調査。

Svelte 5が2024年10月に正式リリースされてから1年以上が経ちました。Runesという新しいリアクティビティシステムの導入は、Svelteにとって最も大きな変更の一つです。しかし、フレームワークが進化すると気になるのが「周辺ライブラリは対応してるの?」という点ですよね。

今回は、2025年11月時点でのSvelte 5エコシステムの現状を徹底調査しました。UIライブラリ、状態管理、フォーム処理、アニメーション、テストまで、実際の開発で使うライブラリの対応状況を詳しく見ていきます。

著者
著者: Sera
大学院でAI作曲に関して研究中!
来春からデータサイエンティストとして働く予定の技術オタク。
初心者
登場人物: あかり
流行りのAIやWeb技術に興味津々!
『知りたい』気持ちで質問を止められない、好奇心旺盛な学生。

Svelte 5とRunes:何が変わったのか

normalの表情
初心者

そもそもSvelte 5のRunesって何?今までと何が違うの?

専門家

Svelte 5は2024年10月19日に正式リリースされたんだけど、最大の変更がRunesという新しいリアクティビティシステムなんだ。18ヶ月もの開発期間をかけて、Svelteの根幹を作り直したんだよ。

confusedの表情
初心者

リアクティビティシステムって何?難しそう...

専門家

簡単に言うと、「データが変わったら画面も自動で更新される」仕組みのことだね。Svelte 4までは、letで変数を宣言すると自動的にリアクティブになってた。でもSvelte 5からは、明示的に$state()を使って「これはリアクティブな変数です」って宣言するようになったんだ。

confusedの表情
初心者

え、わざわざ書かないといけなくなったの?面倒くさくなったんじゃない?

専門家

いや、実は逆なんだ。確かに一見面倒に見えるけど、明示的にすることでどこでもリアクティビティが使えるようになったんだよ。

暗黙的から明示的へ:Runesの主要な変更点

専門家

Svelte 5で導入された主なRunesは次の4つだよ。

  1. $state: リアクティブな状態を宣言する
  2. $derived: 他の状態から計算される値を作る
  3. $effect: データが変わったときに実行する処理を書く
  4. $props: コンポーネントのプロパティを受け取る

これらを使うことで、.svelteファイルの外でもリアクティビティが使えるようになったんだ。

surprisedの表情
初心者

ファイルの外でも使える!?どういうこと?

専門家

例えば、utils.svelte.jsみたいなファイルを作って、そこでリアクティブなロジックを書けるようになったんだ。今までは、Svelteファイルの外に出すとリアクティビティが失われて、Storeを使うしかなかったんだけど、Runesならそれが不要になる。

happyの表情
初心者

なるほど!コードの整理がしやすくなったんだね

パフォーマンスも向上

専門家

しかもパフォーマンスも改善されてる。バンドルサイズが15-30%小さくなって、ツリーシェイキング(使わないコードを削除する最適化)も改善されたんだよ。

excitedの表情
初心者

速くなって小さくなるなら、いいことばっかりじゃん!

専門家

そうなんだ。でも、大きな変更だから、周辺ライブラリがちゃんと対応できてるか気になるよね。じゃあ、実際のエコシステムを見ていこう。

UIライブラリの対応状況

normalの表情
初心者

まずはUIライブラリ!ボタンとかモーダルとか、便利なコンポーネントが入ってるやつだよね

専門家

そう!Svelte 5のリリース後、主要なUIライブラリは続々と対応を進めてる。大きく分けて「完全対応済み」「部分的対応」「Headlessライブラリ」の3つに分類できるね。

完全対応済みのUIライブラリ

専門家

まず、完全にSvelte 5に対応したライブラリから紹介するね。

Svelte Material UI (SMUI)

専門家

Svelte Material UI、通称SMUIは、Googleのマテリアルデザインを実装したライブラリなんだ。バージョン8からSvelte 5必須になってる。

confusedの表情
初心者

必須ってことは、Svelte 4では使えないの?

専門家

そう。SMUIはバージョンで対応を分けてる。

  • SMUI v8: Svelte 5専用
  • SMUI v7: Svelte 4対応の最終バージョン

新しいイベントシステムにも対応してるから、Svelte 5の機能を最大限活用できるようになってるんだよ。

happyの表情
初心者

明確に分かれてるなら、移行もしやすそうだね

Skeleton

専門家

Skeletonは、バージョン3.0でSvelte 5とTailwind CSS v4の両方に対応した。しかもモジュラー構造になって、必要なコンポーネントだけ選んで使えるようになったんだ。

normalの表情
初心者

モジュラー構造って何がいいの?

専門家

必要なものだけインポートできるから、バンドルサイズが小さくなるんだ。全部入りのライブラリだと、使わないコンポーネントまで含まれちゃうでしょ?モジュラーならそれを避けられる。

shadcn-svelte

専門家

shadcn-svelteは、React界隈で人気のshadcn/uiのSvelte版だね。Svelte 5対応に加えて、Tailwind CSS v4のサポートと新しいチャートコンポーネントも追加されてる。

surprisedの表情
初心者

Reactのライブラリを移植したんだ!人気なやつ?

専門家

shadcn/uiはReactエコシステムでめちゃくちゃ人気なんだ。コピペで使えるコンポーネント集って感じで、カスタマイズしやすいのが特徴だね。

Flowbite Svelte

専門家

Flowbite Svelteも対応済みで、60以上のUIコンポーネントを提供してる。ボタン、モーダル、ドロップダウンなど、Webアプリでよく使うものが一通り揃ってるよ。

部分的対応:Carbon Components Svelte

専門家

Carbon Components Svelteは、IBMのCarbon Design Systemを実装したライブラリなんだ。現在v0.93.0まで更新されてて、Svelte 5の互換性修正も行われてる。

confusedの表情
初心者

部分的対応ってどういうこと?使えないの?

専門家

いや、使えるよ。v0.83.0でSvelte 5対応の修正が入ってるから。ただ、関連パッケージが複数あって、それぞれ対応状況が少し違うんだ。

  • Carbon Components Svelte: v0.93.0(対応済み)
  • Carbon Icons Svelte: Svelte 4/5両方サポート
  • Carbon Charts Svelte: Svelte 5.20+推奨

という感じだね。

happyの表情
初心者

なるほど、パッケージごとに確認が必要なんだね

Headless UIライブラリ:スタイルなしで自由度最大

confusedの表情
初心者

Headlessライブラリって何?頭がない?

専門家

ハハハ、面白い発想だね。Headlessライブラリは、スタイルがないUIライブラリのことなんだ。機能とアクセシビリティだけ提供して、見た目は自分で自由にカスタマイズできる。

surprisedの表情
初心者

スタイルがないのにライブラリなの?何が便利なの?

専門家

良い質問だね。例えば、アクセシブルなドロップダウンメニューを作るって、実はすごく大変なんだ。キーボード操作、スクリーンリーダー対応、フォーカス管理...考えることがたくさんある。Headlessライブラリは、そういう難しい機能部分だけを提供してくれるんだよ。

happyの表情
初心者

あー!見た目は自分のデザインで作れて、機能は任せられるんだ!

Bits UI

専門家

Bits UIは、Svelte 5専用に設計されたHeadlessライブラリだね。Melt UIという別のライブラリの上に構築されてて、より使いやすいコンポーネントAPIを提供してる。フルアクセシビリティサポートも売りの一つだよ。

Melt UI

専門家

Melt UIは、Svelte 5のRunes($state$derived)をサポートしてる。こっちはコンポーネントビルダーって感じで、より低レベルな制御ができるんだ。

confusedの表情
初心者

Bits UIとMelt UIって何が違うの?

専門家

Melt UIが低レベルで柔軟性が高い代わりに使いこなすのが難しくて、Bits UIがその上に構築された使いやすいバージョンって感じかな。料理で言えば、Melt UIは食材を選んで自分で調理する感じで、Bits UIは半調理済みの便利なキットって感じだね。

happyの表情
初心者

なるほど、レベルに応じて選べるんだね

エンタープライズ向け:SVAR

専門家

SVARは、エンタープライズグレードのアプリケーション向けに設計されたライブラリだね。v2.1でDataGridとGanttチャートが追加されたんだ。

normalの表情
初心者

DataGridって何?

専門家

Excelみたいな表を表示できるコンポーネントだよ。大量のデータを表示して、ソートしたりフィルタしたりできる。業務アプリケーションには欠かせない機能だね。

SvelteKitとルーティング

normalの表情
初心者

UIライブラリはわかった!じゃあSvelteKitは?Svelte 5で動くの?

専門家

SvelteKitは完全に対応してるよ。実は、Svelte 5はほぼ完全にSvelte 4と後方互換性があるんだ。

surprisedの表情
初心者

後方互換性?それって古いコードも動くってこと?

専門家

そう!既存のSvelte 4のコンポーネントは、ほとんどそのままSvelte 5でも動く。しかも、SvelteKit 2を使うとSvelte 5への移行がさらにスムーズになるんだ。

ルーティングは変わらず

専門家

SvelteKitのルーティングシステムは、Svelte 4でもSvelte 5でも同じなんだ。ファイルシステムベースのルーティングで、src/routes以下のディレクトリ構造がそのままURLになる。

normalの表情
初心者

ファイルシステムベース?

専門家

例えば、src/routes/about/+page.svelteを作ると、自動的に/aboutというURLでアクセスできるようになる。Next.jsとかNuxtと同じ考え方だね。しかも<a>タグで普通にリンクするだけでいい。フレームワーク固有の<Link>コンポーネントとか不要なんだ。

happyの表情
初心者

それは簡単でいいね!

新機能:$app/state

専門家

SvelteKit 2.12では、Svelte 5のRunes APIをベースにした$app/stateが追加されたんだ。従来の$app/storesの機能を提供しつつ、より柔軟になってる。

confusedの表情
初心者

$app/storesと何が違うの?

専門家

$app/stateはRunesベースだから、より直感的にリアクティブな状態を扱えるんだ。Storeのsubscribeとかsetとか、ちょっと複雑だったでしょ?Runesなら普通の変数みたいに扱えるから、コードがシンプルになるよ。

状態管理:StoresとRunes

normalの表情
初心者

じゃあ状態管理は?Storeは使えなくなったの?

専門家

いや、Storeは非推奨ではないよ。引き続き使えるし、特定のケースでは今でも有効なんだ。

surprisedの表情
初心者

え!?Runesが新しいのに、Storeも残ってるの?

専門家

そう。Svelteチームは後方互換性を大切にしてるからね。ただ、多くのケースでRunesのほうが便利だから、新しいコードではRunesを使うのがおすすめだよ。

Runesが推奨されるケース

専門家

Runesが特に便利なのは、次の3つのケースだね。

  1. ロジックの抽出: コンポーネントから共通ロジックを切り出すとき
  2. 共有状態: 複数のコンポーネントで同じ状態を使うとき
  3. TypeScriptファイルでの使用: .svelte.js.svelte.tsファイルで状態管理したいとき

今まではこういうケースでStoreを使うしかなかったけど、Runesなら普通の関数として書けるんだ。

happyの表情
初心者

コードが読みやすくなりそうだね

Storesが有効なケース

専門家

逆に、Storesがまだ有効なのは、こういうケースだよ。

  1. 複雑な非同期データストリーム: WebSocketとか、リアルタイムで更新されるデータ
  2. 細かい制御が必要: 値の更新やリスニングを細かく管理したいとき
confusedの表情
初心者

非同期データストリームって何?

専門家

例えば、チャットアプリでメッセージがリアルタイムで送られてくる場合とか、株価が刻々と更新される場合とかだね。そういう複雑な非同期処理では、Storeの方が扱いやすいこともあるんだ。

happyの表情
初心者

なるほど、使い分けができるんだね

フォーム処理ライブラリ

normalの表情
初心者

フォームライブラリはどうなの?バリデーションとか面倒だから、ライブラリ使いたいんだけど

専門家

フォームライブラリは、正直まだ過渡期って感じだね。既存のライブラリの対応状況と、新しい選択肢を紹介するよ。

既存ライブラリ

Felte

専門家

Felteは、Svelteのストアとアクションをベースにしたフォームライブラリだね。yup、zod、superstruct、vestなど、人気のバリデーションライブラリと組み合わせて使えるのが特徴だよ。

confusedの表情
初心者

zodって何?

専門家

zodは、TypeScriptのスキーマバリデーションライブラリだね。「このフィールドは文字列で、最低5文字以上」みたいなルールを型安全に定義できるんだ。フォームのバリデーションによく使われるよ。

happyの表情
初心者

バリデーションライブラリと組み合わせられるのは便利だね

専門家

ただ、FelteのSvelte 5対応については、明確な情報が見つからなかったんだ。ストアとアクションをベースにしてるから、後方互換性で動くはずだけど、明示的なサポート表明はまだみたいだね。

svelte-forms-lib

専門家

svelte-forms-libは、ReactのFormikライクなAPIを持つ軽量ライブラリだね。初心者にも優しいドキュメントが特徴なんだけど...

confusedの表情
初心者

なんか言いにくそうだけど、何かあるの?

専門家

最終更新が4年前(v2.0.1)なんだ。だから、Svelte 5への明示的な対応はまだないと思われる。後方互換性で動く可能性は高いけど、新しいプロジェクトにはあまり推奨できないかな。

sadの表情
初心者

4年前...メンテナンスされてないのは不安だね

新しい選択肢

専門家

でも、Svelte 5時代の新しい選択肢もあるんだ!

Superforms

専門家

Superformsは、SvelteKit専用のフォームライブラリなんだ。サーバーサイドとクライアントサイドの両方でバリデーションできるのが大きな特徴だよ。

normalの表情
初心者

両方でバリデーション?なんで二回もやるの?

専門家

セキュリティのためだね。クライアント側のバリデーションだけだと、悪意のあるユーザーがブラウザの開発者ツールで回避できちゃう。だから、サーバー側でも必ずチェックする必要があるんだ。Superformsは、この二重チェックを簡単に実装できるようになってる。

surprisedの表情
初心者

なるほど!セキュリティ大事だもんね

Formsnap

専門家

Formsnapは、SuperformsとZodの上に構築された高レベルコンポーネントライブラリだね。より宣言的にフォームを書けるようになってる。

confusedの表情
初心者

宣言的って何?

専門家

プログラムで「どうやるか」じゃなくて「何がほしいか」を書くスタイルのことだね。例えば、「このフィールドはメールアドレスで、必須です」って宣言するだけで、バリデーションやエラー表示を自動でやってくれる感じだよ。

happyの表情
初心者

楽ちんでいいね!

アニメーションライブラリ

normalの表情
初心者

アニメーションライブラリはどう?カッコいい動きをつけたいんだけど

専門家

アニメーション関連は、正直まだ課題があるんだ。特に人気だったsvelte-motionが、現状Svelte 5に対応してないんだよ。

sadの表情
初心者

えー!対応してないの?

専門家

svelte-motionは、ReactのFramer Motionにインスパイアされた人気ライブラリだったんだけど、最終更新が約1年前で、メンテナンスが停滞してるんだ。

confusedの表情
初心者

じゃあどうすればいいの?アニメーション使えないの?

代替案

専門家

大丈夫、代替案があるよ!

@animotion/motion

専門家

@animotion/motionは、シンプルなSvelteアニメーションライブラリだね。時間経過とともに変化する値を使って、どんなプロパティでもアニメーション化できるんだ。

normalの表情
初心者

シンプルってことは、機能が少ないってこと?

専門家

いや、必要な機能は揃ってるよ。svelte-motionほど高機能じゃないけど、基本的なアニメーションなら十分できる。しかもSvelte 5対応だから安心して使えるね。

Tailwind CSSとSvelteの組み合わせ

専門家

あと、Tailwind CSSを使ったアニメーションも選択肢の一つだよ。Tailwindには豊富なアニメーションユーティリティが組み込まれてるから、簡単なアニメーションならライブラリなしでもいけるんだ。

happyの表情
初心者

Tailwind使ってるなら、追加のライブラリ不要かもしれないんだね

Motion-Start

専門家

svelte-motionからの移行を考えてる人向けに、Motion-Startという移行パスもあるよ。svelte-motionのコンポーネントをSvelte 5対応に変換するのを助けてくれるんだ。

テストライブラリ

normalの表情
初心者

最後にテストライブラリ!これも対応してるよね?

専門家

テストライブラリは、比較的対応が進んでるよ。特に**@testing-library/svelte**が、実験的ながらSvelte 5サポートを開始してる。

@testing-library/svelte

専門家

@testing-library/svelteは、Svelte 3、4、5すべてをサポートしてる。推奨される組み合わせはVitestと一緒に使うことだね。

normalの表情
初心者

Vitestって何?

専門家

Vitestは、Vite(ヴィート)というビルドツールのための高速テストランナーだよ。Jestと互換性があるAPIを持ってるから、Jestから移行しやすいんだ。しかも、めちゃくちゃ速い。

surprisedの表情
初心者

速いのはいいね!テスト遅いとイライラするもん

Svelte 5でのセットアップ

専門家

Svelte 5でテストを始めるには、いくつかのパッケージをインストールする必要があるんだ。

  1. @testing-library/svelte
  2. @testing-library/jest-dom
  3. @sveltejs/vite-plugin-svelte
  4. vitest
  5. jsdom

そして、vite.config.tssvelteTestingプラグインを追加する必要があるよ。

confusedの表情
初心者

jsdomって何?

専門家

jsdomは、Node.js環境でブラウザのDOM(Document Object Model)をシミュレートするライブラリだね。つまり、実際のブラウザを起動しなくても、ブラウザっぽい環境でテストできるようになるんだ。

happyの表情
初心者

なるほど、だから速いんだね

新しいアプローチ:Vitest Browser Mode

専門家

最近、新しいアプローチも登場してるんだ。Vitest Browser Modeっていって、jsdomのシミュレーション環境じゃなくて、実際のブラウザでテストを実行するんだよ。

surprisedの表情
初心者

実際のブラウザ!?それって遅いんじゃない?

専門家

確かに少し遅くはなるけど、その分より現実に近い環境でテストできるんだ。jsdomは完璧じゃないから、たまに「テストは通るのに、実際のブラウザでは動かない」ってことがある。Vitest Browser Modeなら、そういう問題を減らせるんだよ。

normalの表情
初心者

なるほど。でも、まだ新しいアプローチなんだよね?

専門家

そう、現在は実験的な機能だから、APIが今後変わる可能性があるんだ。プロダクションで使うなら、Vitestのバージョンを固定しておくのがおすすめだね。

移行における課題と注意点

confusedの表情
初心者

いろいろ対応してるのはわかったけど、実際に移行するのって大変なの?

専門家

正直に言うと、プロジェクトの規模や使ってるライブラリによって大変さは変わってくるね。実際に移行した人たちの経験をまとめてみよう。

エコシステムの成熟度

専門家

Svelte 5のエコシステムは、まだ完全に成熟してるとは言えないんだ。多くのライブラリ作者が、正式リリースを待ってから対応を始めたから、対応状況にばらつきがあるんだよ。

sadの表情
初心者

まだ全部は揃ってないんだね...

専門家

でも、主要なライブラリはほとんど対応してるから、普通のWebアプリなら十分開発できるよ。むしろ、ニッチなライブラリを使ってる場合に注意が必要って感じだね。

自動移行スクリプトの限界

専門家

Svelte 5には、自動でコードを移行してくれるスクリプトがあるんだけど、完璧じゃないんだ。特に、$:(リアクティブステートメント)を$derived()に変換すべきか、$effect()に変換すべきか、判断を間違えることがあるんだよ。

confusedの表情
初心者

$:って何?

専門家

Svelte 4までの書き方で、「この変数が変わったら、この計算を自動でやり直す」っていう宣言だったんだ。でもSvelte 5では、計算なら$derived()、副作用なら$effect()と、明確に分けるようになった。自動スクリプトは、この使い分けを完璧に判断できないことがあるんだよね。

sadの表情
初心者

結局、手作業で直す必要があるんだ...

専門家

すべてを直す必要はないよ。移行スクリプトが8割くらいはやってくれるから、残りの2割を手作業で調整する感じだね。テストをしっかり書いておけば、問題のある箇所はすぐ見つかるよ。

パターンの混在による混乱

専門家

移行中は、古いStoreベースのコードと新しいRunesベースのコードが混在することになるんだ。チームで開発してる場合、「どっちのパターンを使えばいいの?」って混乱することがあるみたいだね。

confusedの表情
初心者

どうすればいいの?

専門家

明確なガイドラインを決めておくのがおすすめだよ。例えば、「新しいコードは全部Runesで書く」「既存のStoreコードは、大きな変更のタイミングで移行する」みたいな感じでね。

happyの表情
初心者

ルールを決めておけば、迷わなくて済むんだね

頻繁なアップデート

専門家

Svelte 5のリリース後、かなり頻繁にアップデートがあったんだ。バグ修正や改善が次々と入ってくるから、本番環境に投入するタイミングが難しいって声もあるね。

confusedの表情
初心者

頻繁に更新されるのは良いことじゃないの?

専門家

良いことなんだけど、本番環境ではできるだけ安定してるバージョンを使いたいでしょ?頻繁にアップデートがあると、「今アップデートしても、来週また新しいバージョンが出るかも」って悩んじゃうんだよね。

happyの表情
初心者

確かに、安定してから移行したい気持ちもわかるな

プロダクション準備状況:2025年の評価

normalの表情
初心者

で、結局Svelte 5って本番環境で使っていいの?

専門家

2025年11月時点では、十分プロダクションレディだと言えるよ。実際に移行したチームからは、パフォーマンス向上が確認されたって報告が多いんだ。

excitedの表情
初心者

おお!じゃあもう安心して使えるんだね

メリット

専門家

Svelte 5に移行するメリットは次の通りだよ。

  1. パフォーマンス向上: バンドルサイズ15-30%削減、実行速度も向上
  2. 開発体験の改善: Runesによる明示的で予測可能なコード
  3. エコシステムの成熟: 主要ライブラリはほぼ対応済み
  4. 後方互換性: 既存のSvelte 4コードもほぼそのまま動く
happyの表情
初心者

いいことばっかりじゃん!

推奨事項

専門家

ただ、移行するなら次のことに注意してね。

  1. 依存ライブラリの確認: 使ってるライブラリがSvelte 5に対応してるか事前チェック
  2. 段階的な移行: 一度に全部変えるんじゃなくて、少しずつ移行する
  3. テストカバレッジ: 移行前にテストを充実させておく
  4. チームガイドライン: StoreとRunesの使い分けルールを決めておく
normalの表情
初心者

段階的な移行って、具体的にどうやるの?

専門家

例えば、新しい機能はSvelte 5とRunesで書いて、既存のコードは動いてる限りそのままにしておく。そして、バグ修正や大きな変更のタイミングで、少しずつSvelte 5の書き方に移行していく感じだね。

happyの表情
初心者

無理に全部変える必要はないんだね

まとめ

専門家

Svelte 5とそのエコシステムについて、ずいぶん長く話したね。最後にポイントをまとめよう。

normalの表情
初心者

はい!お願いします!

専門家

まず、Svelte 5は2025年時点で十分プロダクションレディだ。Runesという新しいリアクティビティシステムは、最初は戸惑うかもしれないけど、慣れればより明示的で理解しやすいコードが書けるようになる。

専門家

エコシステムも成熟してきてる。UIライブラリ(SMUI、Skeleton、shadcn-svelte、Flowbite)、SvelteKit、テストライブラリは完全対応済み。状態管理はRunesが基本だけど、Storesも引き続き使える。

専門家

注意が必要なのはアニメーションライブラリだね。svelte-motionが対応してないから、代替案(@animotion/motion、Tailwind CSS)を検討する必要がある。フォームライブラリも、新しい選択肢(SuperformsやFormsnap)を検討したほうがいいかもしれない。

happyの表情
初心者

全体的には、もう安心して使えるって感じだね!

専門家

そうだね。ただ、移行は段階的に、テストを書きながら慎重に進めるのがおすすめだよ。急いで全部変える必要はないからね。

excitedの表情
初心者

わかった!これでSvelte 5に挑戦できそう!教えてくれてありがとう!

専門家

どういたしまして。Svelte 5は本当に良いフレームワークだから、ぜひ試してみてね!

参考文献

この記事を執筆するにあたり、以下の情報源を参考にしました。

公式ドキュメント・ブログ

リリース情報

Runesとリアクティビティ

UIライブラリ

状態管理

フォームライブラリ

アニメーションライブラリ

テストライブラリ

移行とプロダクション対応

← ブログ一覧に戻る