
よっしー
こんにちは。よっしーです(^^)
今日は、SvelteKitでの移行について解説しています。
背景
SvelteKitでの移行について調査する機会がありましたので、その時の内容を備忘として記事に残しました。
resolvePathは削除されました
SvelteKit 1にはresolvePath
という関数が含まれており、ルートID(/blog/[slug]
のような)とパラメータのセット({ slug: 'hello' }
のような)をパス名に解決することができました。残念ながら、戻り値にbase
パスが含まれていなかったため、base
が設定されているケースでの有用性が制限されていました。
そのため、SvelteKit 2ではresolvePath
を(やや良い名前の)resolveRoute
という関数に置き換えました。これは$app/paths
からインポートされ、base
を考慮に入れます。
import { resolvePath } from '@sveltejs/kit';
import { base } from '$app/paths';
import { resolveRoute } from '$app/paths';
const path = base + resolvePath('/blog/[slug]', { slug });
const path = resolveRoute('/blog/[slug]', { slug });
svelte-migrate
がメソッドの置き換えを行ってくれますが、後で結果にbase
を前置する場合は、自分で削除する必要があります。
解説
この変更は、SvelteKitのルート解決機能に関する重要な更新を説明しています:
- 旧機能の問題点:
resolvePath
関数は基本的な機能は提供していました- しかし
base
パスを含まないという制限がありました - これにより、
base
パスを使用する場合に追加の処理が必要でした
- 新機能の改善点:
- 新しい
resolveRoute
関数が導入されました $app/paths
からインポートして使用しますbase
パスを自動的に考慮します- 関数名がより適切になりました(pathからrouteへ)
- 移行について:
svelte-migrate
ツールが自動的に関数の置き換えを行います- ただし、手動で
base
を追加しているコードは、開発者自身で削除する必要があります
コード例の比較:
- 古い方法:
const path = base + resolvePath('/blog/[slug]', { slug });
- 新しい方法:
const path = resolveRoute('/blog/[slug]', { slug });
この変更により:
- コードがよりシンプルに
base
パスの扱いが統一的に- メンテナンス性が向上
という効果が期待できます。
おわりに
今日は、 SvelteKitでの移行について解説しました。

よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント