CI/CDツール
このプロジェクトでは、コード品質と依存関係管理のために次のツールを使用しています。
GitHub Actions ワークフロー
このプロジェクトでは、CI/CDパイプラインとして2つの主要なワークフローを使用しています。
- CIワークフロー (
.github/workflows/ci.yml): コード品質チェックとテスト - CDワークフロー (
.github/workflows/cd.yml): デプロイメント
CIワークフロー ([CI] Validation and Checks)
トリガー条件
- pull_request: 次のパスが変更された場合
.github/**docs/**scripts/**app/**apps/web/e2e/**package.json
- push: 上記と同じパスが変更された場合
- 除外条件:
copilot/で始まるブランチは除外
ジョブ一覧
-
detect-changes
- 変更されたファイルを検出し、次のカテゴリに分類
- 出力:
web/e2e/docs/shell/actions/tsp - タイムアウト: 5分
-
run-format-ts (web変更時)
- TypeScriptファイルのフォーマットチェック
- コマンド:
bun run fmt:ts:check - タイムアウト: 10分
- 依存:
detect-changes
-
run-lint-ts (web変更時)
- TypeScriptファイルのリントチェック
- コマンド:
bun run lint:ts:check - タイムアウト: 10分
- 依存:
detect-changes,run-format-ts
-
run-typecheck (web変更時)
- TypeScriptの型チェック
- コマンド:
bun run typecheck - タイムアウト: 10分
- 依存:
detect-changes,run-format-ts
-
run-knip (web変更時)
- 未使用コードの検出
- コマンド:
bun run knip - タイムアウト: 10分
- 依存:
detect-changes,run-lint-ts,run-typecheck
-
run-test-ts (web変更時)
- ユニットテストの実行
- コマンド:
bun run test - タイムアウト: 15分
- 依存:
detect-changes,run-lint-ts,run-typecheck,run-knip
-
run-coverage-ts (web変更時)
- テストカバレッジの生成
- コマンド:
bun run coverage - アーティファクト:
vitest-coverage(docs/vitest/coverage/) - 保持期間: 7日
- タイムアウト: 15分
- 依存:
detect-changes,run-test-ts
-
run-sonarcloud (web変更時)
- SonarCloudによるコード品質分析
- カバレッジレポートを使用
- 権限:
contents: read,pull-requests: write,security-events: write - エラーハンドリング:
continue-on-error: true - タイムアウト: 15分
- 依存:
detect-changes,run-coverage-ts
-
run-e2e-ts (webまたはe2e変更時)
- E2Eテストの実行(Playwright)
- Docker Buildxを使用
- コマンド:
bun run e2e - アーティファクト:
playwright-report(docs/playwright/report/) - 保持期間: 7日
- タイムアウト: 30分
- 依存:
detect-changes,run-test-ts,run-coverage-ts
-
run-build (web変更時)
- アプリケーションのビルド
- コマンド:
bun run build:remix - タイムアウト: 15分
- 依存:
detect-changes,run-e2e-ts
-
run-lighthouse (web変更時)
- Lighthouse CIによるパフォーマンス分析
- コマンド:
bun run lighthouse - アーティファクト:
lighthouse-report(docs/lighthouse/report/) - 保持期間: 7日
- タイムアウト: 20分
- 依存:
detect-changes,run-build
-
run-format-actions (actions変更時)
- GitHub Actionsワークフローのフォーマットチェック
- コマンド:
bun run fmt:actions:check - タイムアウト: 5分
- 依存:
detect-changes
-
run-lint-actions (actions変更時)
- GitHub Actionsワークフローのリントチェック
- コマンド:
bun run lint:actions:check - タイムアウト: 10分
- 依存:
detect-changes,run-format-actions
-
run-format-shell (shell変更時)
- Shellスクリプトのフォーマットチェック
- コマンド:
bun run fmt:shell:check - タイムアウト: 5分
- 依存:
detect-changes
-
run-lint-shell (shell変更時)
- Shellスクリプトのリントチェック
- コマンド:
bun run lint:shell:check - タイムアウト: 10分
- 依存:
detect-changes,run-format-shell
-
run-format-md (docs変更時)
- Markdownファイルのフォーマットチェック
- コマンド:
bun run fmt:md:check - タイムアウト: 5分
- 依存:
detect-changes
-
run-lint-md (docs変更時)
- Markdownファイルのリントチェック
- コマンド:
bun run lint:md:check - タイムアウト: 10分
- 依存:
detect-changes,run-format-md
-
run-format-tsp (tsp変更時)
- TypeSpecファイルのフォーマットチェック
- コマンド:
bun run fmt:tsp:check - タイムアウト: 10分
- 依存:
detect-changes
-
run-lint-tsp (tsp変更時)
- TypeSpecファイルのリントチェック
- コマンド:
bun run lint:tsp:check - タイムアウト: 10分
- 依存:
detect-changes,run-format-tsp
CDワークフロー ([CD] Deploy)
CDワークフローのトリガー条件
- push (masterブランチ): 次のパスが変更された場合
docs/**app/**.storybook/**vite.config.tsdocs/swagger/**.github/workflows/deploy.yml
- pull_request (masterブランチ): 次のパスが変更された場合
docs/**.github/workflows/deploy.yml
- workflow_run: CIワークフロー完了時
- workflow_dispatch: 手動実行
CDワークフローのジョブ一覧
-
detect-changes (workflow_run以外)
- 変更されたファイルを検出し、次のカテゴリに分類
- 出力:
docs,storybook,swagger - タイムアウト: 5分
-
run-deploy-docs
- Astro + Starlightドキュメントのビルドとデプロイ
- 環境:
github-pages - ステップ:
- Astroのビルド (
bun run build) - Cloudflare Pagesへのデプロイ
- Astroのビルド (
- タイムアウト: 15分
- 依存:
detect-changes - 実行条件:
workflow_run以外でdocs変更時、またはworkflow_dispatch時
-
run-deploy-storybook
- Storybookのビルドとデプロイ
- 環境:
github-pages-storybook - ステップ:
- Storybookのビルド (
bun run build:ui) - GitHub Pagesへのデプロイ
- Storybookのビルド (
- タイムアウト: 15分
- 依存:
detect-changes - 実行条件:
workflow_run以外でstorybook変更時
-
deploy-swagger
- Swaggerドキュメントのデプロイ
- 環境:
github-pages-swagger - ステップ:
- Swaggerファイルのアップロード
- GitHub Pagesへのデプロイ
- タイムアウト: 5分
- 依存:
detect-changes - 実行条件:
workflow_run以外でswagger変更時、またはworkflow_dispatch時
-
deploy-test-results
- CIワークフローのテスト結果をGitHub Pagesにデプロイ
- 環境:
github-pages-test-results - 実行条件:
workflow_runイベント時- CIワークフローが成功時
copilot/で始まらないブランチ
- ステップ:
- UUID生成 (
run_id-run_number) - CIワークフローからアーティファクトをダウンロード
vitest-coverage(カバレッジレポート)playwright-report(E2Eテストレポート)lighthouse-report(Lighthouseレポート)
- レポートの準備と履歴保存
gh-pagesブランチにコミット- GitHub Pagesへのデプロイ
- UUID生成 (
- タイムアウト: 30分
- 権限:
contents: write,pages: write,id-token: write
同時実行制御
- concurrency:
pages-deploy - cancel-in-progress:
false(進行中のジョブをキャンセルしない)
CIワークフロー シーケンス図
sequenceDiagram
participant Trigger as トリガー<br/>(PR/Push)
participant Detect as detect-changes
participant FormatTS as run-format-ts
participant LintTS as run-lint-ts
participant TypeCheck as run-typecheck
participant Knip as run-knip
participant Test as run-test-ts
participant Coverage as run-coverage-ts
participant SonarCloud as run-sonarcloud
participant E2E as run-e2e-ts
participant Build as run-build
participant Lighthouse as run-lighthouse
participant FormatActions as run-format-actions
participant LintActions as run-lint-actions
participant FormatShell as run-format-shell
participant LintShell as run-lint-shell
participant FormatMD as run-format-md
participant LintMD as run-lint-md
participant FormatTSP as run-format-tsp
participant LintTSP as run-lint-tsp
Trigger->>Detect: 変更検出
Detect->>Detect: パスフィルタリング<br/>(web/e2e/docs/shell/actions/tsp)
alt web変更時
Detect->>FormatTS: フォーマットチェック
FormatTS->>LintTS: リントチェック
FormatTS->>TypeCheck: 型チェック
LintTS->>Knip: 未使用コード検出
TypeCheck->>Knip: 未使用コード検出
Knip->>Test: ユニットテスト
Test->>Coverage: カバレッジ生成
Coverage->>SonarCloud: SonarCloud分析
Test->>E2E: E2Eテスト
Coverage->>E2E: E2Eテスト
E2E->>Build: ビルド
Build->>Lighthouse: Lighthouse CI
end
alt actions変更時
Detect->>FormatActions: フォーマットチェック
FormatActions->>LintActions: リントチェック
end
alt shell変更時
Detect->>FormatShell: フォーマットチェック
FormatShell->>LintShell: リントチェック
end
alt docs変更時
Detect->>FormatMD: フォーマットチェック
FormatMD->>LintMD: リントチェック
end
alt tsp変更時
Detect->>FormatTSP: フォーマットチェック
FormatTSP->>LintTSP: リントチェック
end
CDワークフロー シーケンス図
sequenceDiagram
participant Trigger as トリガー<br/>(Push/PR/WorkflowRun/Dispatch)
participant Detect as detect-changes
participant DeployDocs as run-deploy-docs
participant DeployStorybook as run-deploy-storybook
participant DeploySwagger as deploy-swagger
participant DeployTestResults as deploy-test-results
participant CI as CIワークフロー
alt workflow_run以外
Trigger->>Detect: 変更検出
Detect->>Detect: パスフィルタリング<br/>(docs/storybook/swagger)
alt docs変更時 or workflow_dispatch
Detect->>DeployDocs: Astro + Starlightビルド&デプロイ
end
alt storybook変更時
Detect->>DeployStorybook: Storybookビルド&デプロイ
end
alt swagger変更時 or workflow_dispatch
Detect->>DeploySwagger: Swaggerデプロイ
end
end
alt workflow_run (CI完了時)
CI->>Trigger: ワークフロー完了通知
Trigger->>DeployTestResults: テスト結果デプロイ
DeployTestResults->>DeployTestResults: UUID生成
DeployTestResults->>DeployTestResults: アーティファクトダウンロード<br/>(coverage/e2e/lighthouse)
DeployTestResults->>DeployTestResults: レポート準備&履歴保存
DeployTestResults->>DeployTestResults: gh-pagesにコミット
DeployTestResults->>DeployTestResults: GitHub Pagesデプロイ
end
CI/CD統合フロー
sequenceDiagram
participant Dev as 開発者
participant PR as Pull Request
participant CI as CIワークフロー
participant CD as CDワークフロー
participant Pages as GitHub Pages
Dev->>PR: コード変更をプッシュ
PR->>CI: CIワークフロー開始
CI->>CI: フォーマット/リント/型チェック
CI->>CI: テスト実行
CI->>CI: カバレッジ生成
CI->>CI: SonarCloud分析
CI->>CI: E2Eテスト
CI->>CI: ビルド
CI->>CI: Lighthouse CI
CI->>CD: ワークフロー完了通知
CD->>CD: テスト結果をダウンロード
CD->>CD: レポートを準備
CD->>Pages: テスト結果をデプロイ
alt masterブランチへのマージ
PR->>CD: masterブランチへのpush
CD->>CD: ドキュメント/Storybook/Swaggerをビルド
CD->>Pages: デプロイ
end
Renovate
Renovateは依存関係の自動更新を管理するツールです。
設定
設定ファイルは .github/renovate.json にあります。
主な機能
- 自動依存関係検出:
package.jsonの依存関係を自動的に検出 - スケジュール実行: 毎週月曜日の午前10時(JST)にPRを作成
- グループ化: 関連するパッケージをまとめて更新
- Remix関連パッケージ
- Radix UIパッケージ
- Astro/Starlightパッケージ
- TypeScript関連パッケージ
- 開発依存関係
- 自動マージ: マイナー・パッチバージョンの更新は自動マージ可能
- セキュリティ更新: 脆弱性が検出された場合は即座にPRを作成
使用方法
-
Renovate Appのインストール:
- GitHub MarketplaceからRenovate Appをリポジトリにインストール
- 初回実行時に設定ファイルを自動検出
-
PRの確認:
- Renovateが作成したPRをレビュー
- マイナー・パッチバージョンは自動マージ可能
- メジャーバージョンは手動レビューが必要
-
設定のカスタマイズ:
.github/renovate.jsonを編集して設定を変更- 変更後、次回のスケジュール実行時に反映
設定例
{ "schedule": ["before 10am on monday"], "timezone": "Asia/Tokyo", "packageRules": [ { "matchUpdateTypes": ["minor", "patch"], "automerge": true } ]}SonarCloud
SonarCloudはコード品質・セキュリティ分析をするクラウドサービスです。
SonarCloudの設定
設定ファイルは sonar-project.properties にあります。
SonarCloudの主な機能
- コード品質分析: TypeScript/JavaScriptコードの品質を分析
- セキュリティ脆弱性検出: 既知の脆弱性パターンを検出
- コードカバレッジ統合: テストカバレッジレポートを統合
- PRコメント: プルリクエストに品質ゲート結果をコメント
初期設定
-
SonarCloudでプロジェクト作成:
- SonarCloud にアクセス
- GitHubアカウントでログイン
- 組織を作成(初回のみ)
- プロジェクトをインポート
-
トークンの生成:
- SonarCloudの「My Account」→「Security」からトークンを生成
- GitHubリポジトリの「Settings」→「Secrets and variables」→「Actions」に追加
- シークレット名:
SONAR_TOKEN
-
プロジェクトキーの確認:
- SonarCloudのプロジェクトページでプロジェクトキーを確認
sonar-project.propertiesのsonar.projectKeyとsonar.organizationを更新
CI統合
CIワークフロー(.github/workflows/ci.yml)に run-sonarcloud ジョブが含まれています。
- 実行タイミング: カバレッジレポート生成後
- 権限:
security-events: writeが必要 - エラーハンドリング:
continue-on-error: trueにより、失敗しても他のジョブに影響しない
カバレッジレポート
SonarCloudは次のカバレッジレポートを使用します:
- パス:
docs/vitest/coverage/lcov.info - 形式: LCOV形式
- 生成:
bun run coverageコマンドで生成
品質ゲート
SonarCloudの品質ゲートは次の条件で評価されます:
- コードカバレッジ
- コードスメル(コードの臭い)
- セキュリティ脆弱性
- バグ
品質ゲートが失敗した場合、PRにコメントが追加されます。
除外設定
次のパスは分析から除外されています:
node_modules/build/,dist/docs/- テストファイル(
*.test.ts,*.spec.tsなど) - 設定ファイル(
*.config.ts,*.jsonなど)
詳細は sonar-project.properties の sonar.exclusions を参照してください。
トラブルシューティング
RenovateがPRを作成しない
- Renovate Appがリポジトリにインストールされているか確認
.github/renovate.jsonがまさしく配置されているか確認- Renovate Appのログを確認
SonarCloudが実行されない
SONAR_TOKENシークレットが設定されているか確認sonar-project.propertiesのプロジェクトキーが正しいか確認- CIワークフローのログを確認
カバレッジレポートが見つからない
bun run coverageが正常に実行されているか確認docs/vitest/coverage/lcov.infoが生成されているか確認- カバレッジレポートのパスが正しいか確認