SvelteKitで作成した静的サイトをFirebaseHostingにデプロイする
はじめに
最近Svelteを触ってみたいという理由でポートフォリオサイトをSvelteKitで書き直していた。
ひとまずトップページの書き換えが済んだのでFirebaseHostingにデプロイしたが、その際の手順を残しておく。
前提
@sveltejs/kit
のバージョンは現在最新の1.1.1
を使用する- SvelteKitのプロジェクト作成は
npm create svelte@latest
などで済んでいることとする - Firebaseの設定は
firebase init
などで済んでいることとする- 詳しくは公式ドキュメントを参照
手順
adapterのインストール
SvelteKitアプリをデプロイするには、デプロイ先に合ったadapterが必要になる。今回は静的なサイトをデプロイするので@sveltejs/adapter-static
というadapterを使用する。
npm i -D @sveltejs/adapter-static
ちなみに「sveltekit adapter firebase」などで検索するとjthegedus/svelte-adapter-firebase
というパッケージがヒットするが、こちらはサイトをCloudFunctionsで動かしたい場合に使うのが主な用途っぽい。
svelteの設定ファイルを編集
次にsvelte.config.js(ts)
ファイルにadapterの設定を記述する。adapterのインポート先を@sveltejs/adapter-static
に書き換え、自分のファイルは以下のようになった。
import adapter from '@sveltejs/adapter-static';
import { vitePreprocess } from '@sveltejs/kit/vite';
/** @type {import('@sveltejs/kit').Config} */
const config = {
preprocess: vitePreprocess(),
kit: {
adapter: adapter(),
}
};
export default config;
ビルド成果物の出力ディレクトリはデフォルトでbuild
になっている。adapter()
に渡す引数で出力先を変更することができるので詳しくはドキュメントを参照されたい。今回はこのまま進める。
プリレンダリング設定
今回は静的サイトなのでプリレンダリングの設定をルートのlayoutファイルに記述する必要がある。
// src/routes/+layout.js(ts)
export const prerender = true;
export const trailingSlash = 'always';
また、この際にtrailingSlash
の設定も一緒に記述しておく。SvelteKitではデフォルトでURLから末尾のスラッシュを取り除く挙動になっており、上記のtrailingSlash
の設定をしておくことで/hoge
に対するリクエスト時に/hoge.html
ではなく/hoge/index.html
を返すためのファイルが生成されるようになる。
trailingSlash
についてはドキュメントに記述があるので、各自のサイトに合った設定をしていただきたい。
firebase.jsonの設定
firebase init
コマンドによって自動生成したもを一応載せておく。hosting.public
の設定がSvelteKitの出力先ディレクトリと一致していることを確認していただきたい。
{
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
ビルドとデプロイ
以上の設定の上、以下のコマンドでbuild
ディレクトリにビルド成果物が作成された。
npm run build
これをfirebase deploy
コマンドでそのままデプロイしても良いし、firebase init
でGitHubActionsのファイルも自動生成しているのであればコミットしてプッシュすれば自動デプロイが走ってデプロイが完了する。
おわり
これでポートフォリオサイトがSvelte/SvelteKit製になった。公式ドキュメントが日本語対応しているので機能について一通り目を通すことができたし、Svelteを触るという当初の目的は達成できた。あとはプロフィールと問い合わせページがまだ書き換え途中なので早くやり切ってしまいたい。
参考
- Adaptersのドキュメント
@sveltejs/adapter-static
のREADMEtrailingSlash
の設定について