
よっしー
こんにちは。よっしーです(^^)
今日は、SvelteKitのリファレンスについて解説して います。
背景
SvelteKitのリファレンスについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
Types
$lib/server
$lib
のサブディレクトリです。SvelteKitは、$lib/server
内のモジュールをクライアントサイドのコードにインポートすることを防止します。サーバーオンリーモジュールを参照してください。
解説
$lib/server
は、SvelteKitプロジェクトにおいてサーバーサイド専用のコードを分離するための特別なディレクトリです。この機能についてより詳しく解説します:
$lib/serverの目的と機能
- サーバー専用コード: サーバーでのみ実行される予定のコードを格納するための専用ディレクトリ
- セキュリティ保護: SvelteKitは自動的にこのディレクトリ内のコードがクライアントサイドにインポートされることを防止
- 明確な分離: サーバー専用ロジックとクライアント/サーバー両方で利用可能なコードを明確に分離
一般的な使用例
$lib/server
ディレクトリに格納される典型的なコード:
- データベース接続:
// $lib/server/db.js import { createPool } from 'mysql2/promise'; export const db = createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, // ...その他の接続設定 });
- 環境変数や機密情報へのアクセス:
// $lib/server/secrets.js export const API_KEY = process.env.API_SECRET_KEY; export const JWT_SECRET = process.env.JWT_SECRET;
- サーバーサイドユーティリティ:
// $lib/server/auth.js import jwt from 'jsonwebtoken'; import { JWT_SECRET } from './secrets'; export function verifyToken(token) { return jwt.verify(token, JWT_SECRET); }
正しい使用方法
$lib/server
内のモジュールは、以下のファイルでのみインポートできます:
- サーバーサイドのloadファンクション(
+page.server.js
,+layout.server.js
) - アクション(
+page.server.js
のアクション) - APIエンドポイント(
+server.js
) - フック(
hooks.server.js
)
例えば:
// src/routes/protected/+page.server.js
import { verifyToken } from '$lib/server/auth';
export async function load({ cookies }) {
const token = cookies.get('auth_token');
try {
const userData = verifyToken(token);
return { user: userData };
} catch (err) {
return { user: null };
}
}
エラー例
クライアント側のコンポーネントやクライアントサイドのloadファンクションから$lib/server
のモジュールをインポートしようとすると、ビルド時にエラーが発生します:
// src/routes/+page.js - これはクライアントでも実行される可能性がある
import { db } from '$lib/server/db'; // エラー!
export function load() {
// ...
}
このようなセキュリティ機能により、機密情報や純粋にサーバーでのみ動作するコードがクライアントに漏れることを防ぎ、SvelteKitアプリケーションのセキュリティを向上させることができます。
おわりに
今日は、 SvelteKitのリファレンスについて解説しました。

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