Svelte入門:SvelteKitでの高度なルーティング -Vol.1-

スポンサーリンク
Svelte入門:SvelteKitでの高度なルーティング -Vol.1- 用語解説
Svelte入門:SvelteKitでの高度なルーティング -Vol.1-
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、SvelteKitでのルーティングについて解説しています。

スポンサーリンク

背景

SvelteKitでのルーティングについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。

レストパラメータ

ルートセグメントの数が不明な場合、レスト構文を使用できます。例えば、GitHubのファイルビューアを次のように実装できます…

/[org]/[repo]/tree/[branch]/[...file]

…この場合、/sveltejs/kit/tree/main/documentation/docs/04-advanced-routing.md へのリクエストは、ページで以下のパラメータが利用可能になります:

{
  org: 'sveltejs',
  repo: 'kit',
  branch: 'main',
  file: 'documentation/docs/04-advanced-routing.md'
}

src/routes/a/[...rest]/z/+page.svelte は、/a/z(つまり、パラメータが全くない場合)だけでなく、/a/b/z/a/b/c/z などにもマッチします。レストパラメータの値が有効であることを確認してください。例えば、マッチャーを使用して検証することができます。

この機能により、柔軟なルーティングが可能になり、不特定の数のパスセグメントを含むURLに対応できます。ただし、セキュリティ上の理由から、レストパラメータの値を適切に検証することが重要です。

404ページ

レストパラメータを使用すると、カスタム404ページをレンダリングすることもできます。次のようなルート構造があるとします…

src/routes/
├ marx-brothers/
│ ├ chico/
│ ├ harpo/
│ ├ groucho/
│ └ +error.svelte
└ +error.svelte

…この場合、/marx-brothers/karlにアクセスしても、marx-brothers/+error.svelteファイルはレンダリングされません。これは、マッチするルートがないためです。ネストされたエラーページをレンダリングしたい場合は、/marx-brothers/*のリクエストに全てマッチするルートを作成し、そこから404を返す必要があります:

src/routes/
├ marx-brothers/
| ├ [...path]/
│ ├ chico/
│ ├ harpo/
│ ├ groucho/
│ └ +error.svelte
└ +error.svelte

src/routes/marx-brothers/[…path]/+page.js

import { error } from '@sveltejs/kit';

/** @type {import('./$types').PageLoad} */
export function load(event) {
  error(404, 'Not Found');
}

404のケースを処理しない場合、それらはhandleErrorに表示されます。

この方法を使用することで、特定のディレクトリ構造内でカスタム404ページを表示できるようになります。これにより、より細かいエラー処理と、ユーザーにとってより適切なエラーページの提供が可能になります。

オプショナルパラメータ

[lang]/homeのようなルートには、langという必須のパラメータが含まれています。場合によっては、これらのパラメータをオプショナルにすると便利です。例えば、homeen/homeの両方が同じページを指すようにしたい場合があります。これを実現するには、パラメータをもう一組の角括弧で囲みます:[[lang]]/home

注意点として、オプショナルルートパラメータはレストパラメータの後に配置することはできません([...rest]/[[optional]])。これは、パラメータが「貪欲に」マッチングされるため、オプショナルパラメータが常に未使用になってしまうからです。

この機能を使用すると、より柔軟なルーティング構造を実現できます。例えば:

  1. 多言語サイトで、デフォルト言語のページと特定言語のページを同じコンポーネントで処理できます。
  2. オプショナルなフィルタやカテゴリをURLに含めることができます。

ただし、オプショナルパラメータを使用する際は、アプリケーションロジック内で適切に処理する必要があります。パラメータが存在しない場合のデフォルト値や動作を明確に定義することが重要です。

おわりに

今日は、 SvelteKitでのルーティングについて解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました