デプロイメントガイド
このプロジェクトでは、Cloudflare PagesとCloudflare Workersを使用してアプリケーションをデプロイします。
デプロイメント概要
デプロイメント先
apps/web: Cloudflare Pages(ポートフォリオサイト)apps/api: Cloudflare Workers(CMS API)apps/admin: Cloudflare Pages(管理ダッシュボード)apps/wiki: GitHub Pages(ドキュメントサイト)- Storybook: GitHub Pages(コンポーネントドキュメント)
デプロイメント方法
- 自動デプロイ: GitHub Actions経由で自動デプロイ
- 手動デプロイ: Wrangler CLIを使用した手動デプロイ
Cloudflare Pages デプロイメント
apps/web のデプロイ
前提条件
- Cloudflareアカウントの作成
- Wrangler CLIのインストールと認証
# Wrangler CLIのインストールbun add -g wrangler
# Cloudflareにログインwrangler loginビルド設定
wrangler.toml でビルド設定を定義します。
name = "portfolio-web"compatibility_date = "2024-01-01"pages_build_output_dir = "./build"
[env.production]name = "portfolio-web"環境変数の設定
# シークレットとして設定(推奨)wrangler pages secret put VITE_BASE_URL --project-name portfolio-web
# または、スクリプトを使用bun run scripts/env.ts production .envデプロイ手順
# 1. ビルドcd apps/webbun run build
# 2. デプロイbun run deploy# またはwrangler pages deploy ./build --project-name portfolio-web --branch masterapps/admin のデプロイ
apps/web と同様の手順でデプロイします。
cd apps/adminbun run buildbun run deployCloudflare Workers デプロイメント
apps/api のデプロイ
前提条件
- Cloudflareアカウントの作成
- D1データベースの作成
# D1データベースの作成wrangler d1 create portfolio-db
# データベースのマイグレーションcd packages/dbwrangler d1 migrations apply portfolio-dbビルド設定
wrangler.toml でビルド設定を定義します。
name = "portfolio-api"compatibility_date = "2024-01-01"main = "src/index.ts"
[[d1_databases]]binding = "DB"database_name = "portfolio-db"database_id = "your-database-id"環境変数の設定
# シークレットとして設定wrangler secret put BETTER_AUTH_SECRETwrangler secret put DATABASE_URLデプロイ手順
# 1. ビルドcd apps/apibun run build
# 2. デプロイbun run deploy# またはwrangler deployGitHub Pages デプロイメント
apps/wiki のデプロイ
Astro + Starlightを使用したドキュメントサイトをCloudflare Pagesにデプロイします。
前提条件
- GitHubリポジトリの設定
- GitHub Pagesの有効化
デプロイ手順
GitHub Actions経由で自動デプロイされます。
# ローカルでビルドを確認cd apps/wikibun run build
# GitHub Pagesへのデプロイは自動実行されますStorybook のデプロイ
StorybookをGitHub Pagesにデプロイします。
デプロイ手順
# 1. Storybookのビルドcd apps/webbun run build:ui
# 2. GitHub Pagesへのデプロイは自動実行されます自動デプロイ(GitHub Actions)
CI/CDワークフロー
.github/workflows/ にCI/CDワークフローが定義されています。
CIワークフロー
- コード品質チェック(フォーマット、リント、型チェック)
- テスト実行(ユニットテスト、E2Eテスト)
- ビルド検証
CDワークフロー
- ドキュメントのデプロイ(
apps/wiki) - Storybookのデプロイ
- Swaggerドキュメントのデプロイ
- テスト結果のデプロイ
デプロイメントトリガー
自動デプロイ
- masterブランチへのpush: 自動的にデプロイが実行されます
- Pull Request: プレビューデプロイが実行されます
手動デプロイ
GitHub Actionsのワークフローを手動で実行できます。
# GitHub Actionsのワークフローを手動実行gh workflow run deploy.ymlデータベースマイグレーション
D1データベースのマイグレーション
# 1. Prismaスキーマの変更cd packages/db# prisma/schema.prisma を編集
# 2. マイグレーションファイルの生成bunx prisma migrate dev --name migration_name
# 3. 本番環境への適用wrangler d1 migrations apply portfolio-dbローカル開発環境でのマイグレーション
# 開発環境でのマイグレーションcd packages/dbbun run push
# シードデータの投入bun run seed環境別デプロイ設定
開発環境
開発環境では、ローカルで実行します。
# 開発サーバーの起動bun run devステージング環境
ステージング環境では、Cloudflare Pagesのプレビューデプロイを使用します。
# プレビューデプロイwrangler pages deploy ./build --project-name portfolio-web --branch staging本番環境
本番環境では、masterブランチへのpushで自動デプロイされます。
# 本番環境へのデプロイgit push origin masterデプロイメント前のチェックリスト
ビルド前
- [ ] すべてのテストが通過している
- [ ] コードフォーマットが適用されている
- [ ] リントエラーがない
- [ ] 型チェックが通過している
デプロイ前
- [ ] 環境変数が正しく設定されている
- [ ] データベースマイグレーションが適用されている
- [ ] ビルドが成功している
- [ ] 本番環境での動作確認が完了している
デプロイ後
- [ ] アプリケーションが正常に動作している
- [ ] エラーログを確認している
- [ ] パフォーマンスを確認している
- [ ] アクセシビリティを確認している
ロールバック手順
Cloudflare Pages のロールバック
# 以前のデプロイメントを確認wrangler pages deployment list --project-name portfolio-web
# 特定のデプロイメントにロールバックwrangler pages deployment rollback --project-name portfolio-web --deployment-id <deployment-id>Cloudflare Workers のロールバック
# 以前のバージョンを確認wrangler versions list
# 特定のバージョンにロールバックwrangler rollback <version-id>トラブルシューティング
ビルドエラー
# キャッシュをクリアして再ビルドbun run cleanbun run buildデプロイエラー
# Wranglerの認証を確認wrangler whoami
# 環境変数を確認wrangler pages secret list --project-name portfolio-webデータベース接続エラー
# D1データベースの接続を確認wrangler d1 execute portfolio-db --command "SELECT 1"パフォーマンス最適化
ビルドサイズの最適化
- コード分割の活用
- 不要な依存関係の削除
- ツリーシェイキングの確認
デプロイメント時間の短縮
- Turborepoのキャッシュを活用
- 並列ビルドの設定
- インクリメンタルビルドの活用
セキュリティ
環境変数の管理
- シークレットは環境変数として設定
.envファイルをリポジトリにコミットしない- 本番環境のシークレットを適切に管理
アクセス制御
- Cloudflareのアクセス制御を設定
- APIエンドポイントの認証を実装
- 適切なCORS設定を適用