JA Deployment CI CD - fumihumi/phantom GitHub Wiki
CI/CDパイプライン
English | 日本語
このドキュメントでは、GitHub Actionsを使用したPhantomの継続的インテグレーションとデプロイメントのセットアップについて説明します。
概要
PhantomはGitHub Actionsを以下に使用します:
- すべてのプッシュでの自動テスト
- プルリクエストの検証
- npmパッケージのリリース
- クロスプラットフォーム互換性テスト
GitHub Actionsワークフロー
ソース: .github/workflows/
(標準的なプラクティスから推測)
ワークフロー構造
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [22, 24]
CIパイプラインステージ
1. 環境セットアップ
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 10.8.1
2. 依存関係のインストール
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
3. 品質チェック
- name: Run linter
run: pnpm lint
- name: Run type check
run: pnpm typecheck
- name: Run tests
run: pnpm test
4. ビルド検証
- name: Build project
run: pnpm build
- name: Verify build output
run: |
test -f dist/phantom.js
./dist/phantom.js --version
テストマトリックス
オペレーティングシステム
プラットフォーム間でのテストにより互換性を確保:
OS | バージョン | 目的 |
---|---|---|
Ubuntu | latest | Linux互換性 |
macOS | latest | 開発者マシン |
Windows | latest | クロスプラットフォームサポート |
Node.jsバージョン
ソース: package.json#L36
バージョン | ステータス | 備考 |
---|---|---|
22.x | 必須 | 最小サポート |
24.x | 最新 | 将来の互換性 |
プルリクエストチェック
必須チェック
すべてのPRは以下を合格する必要があります:
- リンティング - コードスタイルの遵守
- 型チェック - TypeScriptの検証
- ユニットテスト - すべてのテストが合格
- ビルド - 成功したコンパイル
- 全プラットフォーム - Linux/macOS/Windowsで動作
PRワークフロー
name: PR Validation
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check commit messages
uses: wagoid/commitlint-github-action@v5
- name: Run all checks
run: pnpm ready
リリースプロセス
バージョン管理
npmバージョンコマンドを使用:
# パッチリリース (0.0.x)
npm version patch
# マイナーリリース (0.x.0)
npm version minor
# メジャーリリース (x.0.0)
npm version major
リリースワークフロー
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm build
- name: Publish to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GitHubリリースの作成
- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: |
詳細は[CHANGELOG.md]を参照してください
draft: false
prerelease: false
npm公開
公開設定
ソース: package.json#L7-L8
{
"name": "@aku11i/phantom",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
}
}
公開前スクリプト
ソース: package.json#L20
{
"scripts": {
"prepublishOnly": "pnpm run build"
}
}
これにより以下が保証されます:
- 公開前に常にビルド
- 公開されたパッケージには最新の変更が含まれる
- 手動のビルドステップが不要
含まれるファイル
ソース: package.json#L51-L56
{
"files": [
"dist",
"README.md",
"LICENSE"
]
}
必要なファイルのみが公開されます:
dist/
- ビルドされた実行可能ファイルREADME.md
- ドキュメントLICENSE
- 法的要件
セキュリティ
シークレット管理
GitHubで必要なシークレット:
シークレット | 目的 | セットアップ |
---|---|---|
NPM_TOKEN |
npm公開 | npmアクセストークン |
GITHUB_TOKEN |
GitHubリリース | 自動 |
依存関係のセキュリティ
- name: Audit dependencies
run: pnpm audit
- name: Check for known vulnerabilities
uses: actions/dependency-review-action@v3
監視と通知
ビルドステータスバッジ

失敗通知
GitHub Actionsは自動的に:
- 失敗時にメール送信
- PRにステータスを表示
- コミットステータスを更新
パフォーマンス最適化
キャッシング戦略
-
pnpmストアキャッシュ
- ダウンロードされたパッケージをキャッシュ
- ロックファイルのハッシュでキー設定
- インストールを高速化
-
ビルドキャッシュ
- name: Cache build outputs uses: actions/cache@v3 with: path: dist key: build-${{ hashFiles('src/**') }}
並列実行
テストは以下で並列実行されます:
- 複数のOSバージョン
- 複数のNodeバージョン
- 合計マトリックス: 6ジョブ
ローカルCIシミュレーション
CIをローカルで実行
CI環境をシミュレート:
# すべてのCIチェックを実行
pnpm ready
# 異なるNodeバージョンをシミュレート
nvm use 22 && pnpm test
nvm use 24 && pnpm test
# 異なるプラットフォームでテスト
# OSテストにはDockerまたはVMを使用
ローカルGitHub Actions用のact
# actをインストール
brew install act # macOS
# またはhttps://github.com/nektos/actからダウンロード
# ワークフローをローカルで実行
act push
act pull_request
CI失敗のデバッグ
よくある問題
-
プラットフォーム固有の失敗
- name: Debug info run: | echo "OS: ${{ runner.os }}" echo "Node: $(node --version)" echo "pnpm: $(pnpm --version)"
-
テストのタイムアウト
- name: Run tests with timeout run: pnpm test timeout-minutes: 10
-
ビルドの失敗
- name: Upload build artifacts if: failure() uses: actions/upload-artifact@v3 with: name: build-logs path: | dist/ *.log
SSHデバッグ
インタラクティブデバッグ用:
- name: Setup tmate session
if: ${{ failure() }}
uses: mxschmitt/action-tmate@v3
timeout-minutes: 15
ベストプラクティス
1. 高速フィードバック
- 最初にクイックチェックを実行(lint、types)
- エラーで早期失敗
- 並列テスト実行
2. 再現可能なビルド
- 依存関係のロックファイル
- 特定のツールバージョン
- 各実行でクリーンな環境
3. 包括的なテスト
- 複数のOSプラットフォーム
- 複数のNodeバージョン
- 実世界のシナリオ
4. セキュリティファースト
- 最小限の権限
- 安全なシークレット
- 定期的な依存関係の更新
将来の拡張
計画された改善
-
パフォーマンステスト
- name: Benchmark run: | time ./dist/phantom.js create test time ./dist/phantom.js list
-
カバレッジレポート
- name: Upload coverage uses: codecov/codecov-action@v3 with: file: ./coverage.lcov
-
リリース自動化
- 自動バージョンバンプ
- 変更ログ生成
- コミットからのリリースノート
高度なワークフロー
-
ナイトリービルド
on: schedule: - cron: '0 0 * * *'
-
依存関係の更新
- uses: dependabot/dependabot-core@v1 with: package-manager: "npm"
まとめ
PhantomのCI/CDパイプラインは以下を保証します:
- 品質 - すべてのコードが基準を満たす
- 互換性 - プラットフォーム間で動作
- 信頼性 - 自動テストが問題を検出
- セキュリティ - 依存関係が安全
- 効率性 - 高速なフィードバックとリリース
自動化されたパイプラインにより、高い品質基準を維持しながら、自信を持って迅速な開発が可能になります。