SvelteKitをCloudflare Pagesにデプロイした話
SvelteKitで作ったTODOアプリを実際に公開するため、Cloudflare Pages へのデプロイ設定を行いました。 アダプターの役割と環境変数の扱いを中心に整理します。
このシリーズの記事
- SvelteKitで記事一覧・詳細ページを作った話
- SvelteKitでTODOアプリを作った話
- SvelteKitで認証・セッション管理を実装した話
- SvelteKitをCloudflare Pagesにデプロイした話(この記事)
アダプターとは
SvelteKitはビルド時に「どの環境で動かすか」を知る必要があります。アダプターはSvelteKitアプリを各プラットフォームが理解できる形式に変換する役割を担います。
SvelteKitアプリ
↓
アダプター(変換)
↓
各プラットフォームが理解できる形式
各プラットフォームはサーバーの起動方法やリクエストの受け取り方が異なるため、+page.server.ts や +server.ts の処理をアダプターが変換します。
主なアダプター
| アダプター | 用途 |
|---|---|
adapter-cloudflare |
Cloudflare Pages / Workers |
adapter-vercel |
Vercel |
adapter-node |
Node.jsサーバー(VPS・Dockerなど) |
adapter-static |
全ページを静的HTMLに変換(サーバー処理不可) |
adapter-auto |
デプロイ先を自動検出(開発時のデフォルト) |
adapter-auto はVercel・Cloudflare・Netliteなどの環境変数を見て自動判断しますが、ローカルではNode.jsにフォールバックします。本番では専用アダプターを明示することでビルドの挙動が確実になります。
アダプターの設定
npm install -D @sveltejs/adapter-cloudflare
svelte.config.js でアダプターを切り替えます:
import adapter from '@sveltejs/adapter-cloudflare';
/** @type {import('@sveltejs/kit').Config} */
const config = {
compilerOptions: {
runes: ({ filename }) => (filename.split(/[/\\]/).includes('node_modules') ? undefined : true)
},
kit: {
adapter: adapter()
}
};
export default config;
adapter-auto から adapter-cloudflare に変えるだけです。
環境変数の扱い
コードにパスワードを直書きしていた部分を環境変数に切り出します。
.env ファイル
SECRET_PASSWORD=1234
SvelteKitの環境変数モジュール
SvelteKitでは環境変数を用途に応じて使い分けます:
| モジュール | 用途 |
|---|---|
$env/static/private |
サーバー専用・ビルド時に確定する値 |
$env/dynamic/private |
サーバー専用・実行時に読む値 |
$env/static/public |
クライアントにも公開してよい値(PUBLIC_ プレフィックス必須) |
$env/static/private からインポートするだけで、クライアントへの漏洩をSvelteKitが防いでくれます。
// src/routes/login/+page.server.ts
import { redirect } from '@sveltejs/kit';
import { SECRET_PASSWORD } from '$env/static/private';
import type { Actions } from './$types';
export const actions: Actions = {
default: async ({ request, cookies }) => {
const data = await request.formData();
const password = data.get('password') as string;
if (password === SECRET_PASSWORD) {
cookies.set('session_id', 'logged-in', {
path: '/',
httpOnly: true,
maxAge: 60 * 60 * 24,
});
redirect(303, '/todo');
}
},
};
ビルドと確認
# 本番用ビルド
npm run build
# ビルド結果をローカルで確認
npm run preview
npm run preview は http://localhost:4173 で本番ビルドをそのまま動かします。デプロイ前の最終確認に使います。
Cloudflare Pages へのデプロイ手順
- プロジェクトを GitHub にプッシュ
- Cloudflare Pages ダッシュボードで「新しいプロジェクト」→ GitHub リポジトリを選択
- ビルド設定を入力:
- ビルドコマンド:
npm run build - 出力ディレクトリ:
.svelte-kit/cloudflare
- ビルドコマンド:
- 環境変数
SECRET_PASSWORDをCloudflareのダッシュボードで設定
.env ファイルはGitにコミットしないようにします。.gitignore に .env が含まれていることを確認してください。
実際のデプロイ手順と躓いたポイントは別記事にまとめています。
👉 SvelteKitアプリをGitHubからCloudflare Workersにデプロイした話
まとめ
| 概念 | 内容 |
|---|---|
| アダプター | デプロイ先に合わせてSvelteKitアプリを変換する |
adapter-cloudflare |
Cloudflare Pages / Workers 向けアダプター |
$env/static/private |
サーバー専用の環境変数(クライアントへの漏洩を防ぐ) |
npm run build |
本番用ビルドの生成 |
npm run preview |
本番ビルドをローカルで確認 |
アダプターを切り替えるだけでデプロイ先を変えられるのがSvelteKitの特徴のひとつです。開発中は adapter-auto のまま進め、デプロイ先が決まったタイミングで専用アダプターに切り替えるのが効率的です。