SvelteKit 最適化編
一部、執筆中
SvelteKitアプリケーションのパフォーマンスを最大限に引き出すための最適化技術を学びます。Core Web Vitals の改善、バンドルサイズの削減、レンダリング最適化など、実践的な手法を網羅します。
最適化の重要性
高速なWebアプリケーションは、ユーザー体験とビジネス成果に直結します。
パフォーマンスの影響
- ユーザー体験 - 直帰率を50%削減
- SEOランキング - Core Web Vitalsがランキング要因
- コンバージョン率 - 1秒の改善で7%向上
- 開発効率 - 最適化されたコードは保守しやすい
- インフラコスト - リソース使用量を削減
このセクションで学ぶこと
パフォーマンス最適化と計測 →
Core Web Vitals 改善ループと Pagefind 検索統合を解説します。
- LCP 最適化: enhanced-img / フォント戦略
- INP 改善: 動的 import / hydration 削減
- CLS 削減: aspect-ratio / size-adjust
- web-vitals v4: RUM 計測ループ
- Pagefind 統合: 静的全文検索
ビルド最適化 →
ビルドプロセスを最適化し、バンドルサイズを削減します。
- コード分割: 動的インポート戦略
- Tree Shaking: 不要コードの除去
- バンドル分析: Bundle Analyzer
- 画像最適化: 次世代フォーマット
- 圧縮戦略: Gzip/Brotli
キャッシュ戦略 →
効果的なキャッシュ戦略で高速化とコスト削減を実現します。
- ブラウザキャッシュ: Cache-Control最適化
- CDNキャッシュ: エッジ配信
- Service Worker: オフライン対応
- データキャッシュ: Redis/メモリ
- ISR: 増分静的再生成
Service Workers / PWA →
オフライン対応とインストール可能なWebアプリを実装します。
- service-worker.ts: SvelteKit規約
- プリキャッシュ: ビルド成果物
- ランタイムキャッシュ: fetchの制御
- manifest.json: インストール対応
- 更新戦略: skipWaiting と通知
Observability →
ログ/メトリクス/トレースで本番環境を計測します。
- Web Vitals: RUM の収集
- OpenTelemetry: 分散トレース
- server hooks: リクエスト計測
- Sentry: エラーモニタリング
- ダッシュボード: 可視化戦略
SEO 最適化 →
検索エンジン最適化で可視性を向上させます。
- メタタグ管理: 動的なSEOタグ
- 構造化データ: JSON-LD実装
- サイトマップ: 自動生成
- OGP設定: SNSシェア最適化
- i18n対応: 多言語SEO
パフォーマンス指標と目標
Core Web Vitals 目標値
| 指標 | 良好 | 改善が必要 | 悪い |
|---|---|---|---|
| LCP | < 2.5s | 2.5s - 4s | > 4s |
| INP | < 200ms | 200ms - 500ms | > 500ms |
| CLS | < 0.1 | 0.1 - 0.25 | > 0.25 |
| FCP | < 1.8s | 1.8s - 3s | > 3s |
| TTI | < 3.8s | 3.8s - 7.3s | > 7.3s |
Google が定義する Core Web Vitals は、2024 年 3 月の更新で FID(First Input Delay) が INP(Interaction to Next Paint) に置き換わりました。INP は「ユーザー操作の最初の遅延」だけでなく、ページ表示中のあらゆるインタラクションのうち最も遅いものを測るため、より実態に近い体感性能の指標になっています。web-vitals ライブラリは v4 系で onINP をエクスポートしているので、計測コードでは onFID から onINP への移行を行ってください。
最適化チェックリスト
// 最適化設定例
export const config = {
// プリレンダリング
prerender: {
crawl: true,
entries: ['*'],
},
// トレーリングスラッシュ
trailingSlash: 'never',
// CSP設定
csp: {
mode: 'auto',
directives: {
'script-src': ['self'],
},
},
}; 最適化テクニック
即効性のある最適化
- 画像の遅延読み込み - loading=“lazy”
- フォント最適化 - font-display: swap
- Critical CSS - インライン化
- プリコネクト - DNS事前解決
- バンドル分割 - 動的インポート
バンドルサイズ削減
// vite.config.ts
export default defineConfig({
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['svelte'],
utils: ['lodash-es'],
},
},
},
// Tree shaking
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
},
}); 学習の進め方
推奨学習順序
- ビルド最適化 - バンドル分析、Tree Shaking、圧縮
- キャッシュ戦略 - HTTP/CDN/Service Worker
- Service Workers / PWA - オフラインとインストール対応
- Observability - 本番環境の計測と可視化
- パフォーマンス最適化 - Core Web Vitals の改善ループ
- SEO 最適化 - svelte:head / OGP / JSON-LD / sitemap / canonical
学習目標
このセクションを完了すると、以下ができるようになります。
- Lighthouseスコア90点以上を達成できる
- Core Web Vitalsをすべて「良好」にできる
- 効果的なキャッシュ戦略を実装できる
- SEOに最適化されたサイトを構築できる
次のステップ
最適化編を習得したら、デプロイ・運用編で本番環境への展開を学びましょう。
パフォーマンス最適化は一度きりの作業ではありません。定期的な測定と改善のサイクルを回すことで、常に高いパフォーマンスを維持できます。
最適化は重要ですが、過度な最適化は開発速度を低下させます。まず測定して、本当に必要な最適化に集中しましょう。