こんにちは。よっしーです(^^)
今日は、SvelteKitでの静的サイト生成について解説しています。
背景
SvelteKitでの静的サイト生成 について調査する機会がありましたので、その時の内容を備忘として記事に残しました。
GitHub Pages
GitHub Pagesで構築する際、あなたのリポジトリ名が your-username.github.io
と同じでない場合、config.kit.paths.base
をあなたのリポジトリ名に合わせて更新することを確認してください。これは、サイトがルートではなく https://your-username.github.io/your-repo-name
から提供されるためです。
また、GitHub Pagesによって表示されるデフォルトの404ページを置き換えるために、フォールバックの 404.html
ページを生成することも望ましいでしょう。
GitHub Pages用の設定は以下のようになるかもしれません:
// svelte.config.js
import adapter from '@sveltejs/adapter-static';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter({
fallback: '404.html'
}),
paths: {
base: process.argv.includes('dev') ? '' : process.env.BASE_PATH
}
}
};
export default config;
解説
上記のコードは SvelteKit プロジェクトの設定を定義しており、静的サイト生成とベースパスの設定に焦点を当てています。
このコードの主な要素と目的を解説します:
import adapter from '@sveltejs/adapter-static';
- 静的サイトジェネレーション用のアダプターをインポートしています。
/** @type {import('@sveltejs/kit').Config} */
- TypeScript の型注釈コメントです。
config
オブジェクトが SvelteKit のConfig
型に準拠することを示しています。
adapter: adapter({ fallback: '404.html' })
- 静的サイトアダプターを設定しています。
fallback: '404.html'
は、存在しないルートにアクセスした際に表示される 404 ページを指定しています。
paths: { base: process.argv.includes('dev') ? '' : process.env.BASE_PATH }
- アプリケーションのベースパスを設定しています。
- 開発モード(
dev
)の場合はベースパスを空文字列に、それ以外の場合は環境変数BASE_PATH
の値を使用します。
この設定の意味と影響:
- 静的サイト生成:
@sveltejs/adapter-static
を使用することで、アプリケーションは完全に静的なサイトとしてビルドされます。
- フォールバックページ:
fallback: '404.html'
の設定により、存在しないルートへのアクセスは全て404.html
にリダイレクトされます。- これは特に SPA(シングルページアプリケーション)モードで重要です。
- 動的ベースパス:
- 開発環境と本番環境で異なるベースパスを使用できるようになっています。
- 開発時(
npm run dev
など)はベースパスが空になります。 - 本番環境では
BASE_PATH
環境変数の値がベースパスとして使用されます。
注意点と考慮事項:
- 環境変数:
BASE_PATH
環境変数が適切に設定されていることを確認する必要があります。- この設定は、アプリケーションがサブディレクトリにデプロイされる場合に特に有用です。
- 404 ページ:
404.html
ファイルを作成し、適切な内容を記述する必要があります。
- SPA モード:
- この設定は、静的サイトをSPAとして機能させることができます。すべてのルートが
404.html
にフォールバックするため、クライアントサイドのルーティングが可能になります。
- ビルドプロセス:
- 本番ビルド時に
BASE_PATH
が正しく設定されていることを確認してください。
- 開発と本番の一貫性:
- 開発環境と本番環境でベースパスが異なる場合、一部の機能(特に絶対パスを使用するもの)で問題が発生する可能性があります。十分なテストが必要です。
- 静的アセット:
- ベースパスが変更される場合、静的アセット(画像、CSS、JavaScriptファイルなど)の参照パスにも注意が必要です。
この設定は、静的サイトとして配信される SvelteKit アプリケーションに適しており、特に異なる環境(開発/本番)や、サブディレクトリへのデプロイを考慮しているプロジェクトに有用です。ただし、アプリケーションの具体的な要件に応じて、これらの設定を適切に調整する必要があるかもしれません。
GitHub アクション
GitHub アクションを使用すると、変更を加えたときにサイトを GitHub Pages に自動的にデプロイできます。ワークフローの例を次に示します。
// .github/workflows/deploy.yml
name: Deploy to GitHub Pages
on:
push:
branches: 'main'
jobs:
build_site:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# If you're using pnpm, add this step then change the commands and cache key below to use `pnpm`
# - name: Install pnpm
# uses: pnpm/action-setup@v3
# with:
# version: 8
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install dependencies
run: npm install
- name: build
env:
BASE_PATH: '/${{ github.event.repository.name }}'
run: |
npm run build
- name: Upload Artifacts
uses: actions/upload-pages-artifact@v3
with:
# this should match the `pages` option in your adapter-static options
path: 'build/'
deploy:
needs: build_site
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4
解説
上記のコードは GitHub Actions のワークフロー設定で、SvelteKit アプリケーションを GitHub Pages にデプロイするための自動化プロセスを定義しています。
このワークフローの主な要素と目的を解説します:
- トリガー:
on:
セクションで、main
ブランチへのプッシュ時にワークフローが実行されるよう設定されています。
- ジョブ:
build_site
: サイトのビルドを行います。deploy
: ビルドされたサイトをデプロイします。
build_site
ジョブの主なステップ:
- リポジトリのチェックアウト
- Node.js のセットアップ(バージョン 20)
- 依存関係のインストール
- アプリケーションのビルド
- ビルド成果物のアップロード
- 環境変数:
BASE_PATH: '/${{ github.event.repository.name }}'
- これにより、GitHub Pages のサブディレクトリにデプロイする際のベースパスが設定されます。
deploy
ジョブ:
build_site
ジョブの完了を待ちます(needs: build_site
)。- GitHub Pages へのデプロイ権限を設定します。
- 環境を
github-pages
に設定し、デプロイ URL を出力します。 actions/deploy-pages@v4
アクションを使用してデプロイを実行します。
注意点と考慮事項:
- Node.js バージョン:
- Node.js 20 を使用していますが、プロジェクトの要件に応じて調整が必要かもしれません。
- キャッシュ:
- npm のキャッシュを使用して、ビルド時間を短縮しています。
- ベースパス:
BASE_PATH
環境変数を使用して、GitHub Pages のサブディレクトリデプロイに対応しています。
- ビルド成果物:
build/
ディレクトリの内容をアップロードしています。これはadapter-static
の設定と一致している必要があります。
- 権限:
- GitHub Pages へのデプロイに必要な最小限の権限を設定しています。
- 環境:
github-pages
環境を使用し、デプロイ URL を動的に取得しています。
- pnpm コメント:
- pnpm を使用する場合のステップが
コメントアウトされています。必要に応じて有効化できます。
このワークフローは、SvelteKit アプリケーションを GitHub Pages に自動的にデプロイするための効率的な設定です。main ブランチへの変更がプッシュされるたびに、アプリケーションが自動的にビルドされ、デプロイされます。ただし、プロジェクトの具体的な要件(例:テストの実行、環境変数の設定、カスタムドメインの使用など)に応じて、このワークフローをさらにカスタマイズする必要があるかもしれません。
GitHub アクションを使用してサイトをデプロイしていない場合 (たとえば、ビルドしたサイトを独自のリポジトリにプッシュしている場合)、静的ディレクトリに空の .nojekyll ファイルを追加して、Jekyll が干渉しないようにします。
おわりに
今日は、 SvelteKitでの静的サイト生成について解説しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント