ガイド

CI/CD統合:AI支援ワークフローの自動化

CCJKをCI/CDパイプラインに統合して、自動コードレビュー、テスト生成、ドキュメント更新を実現します。

C
CCJK Team2025年1月3日
14 分で読めます
1,634 回閲覧
CI/CD統合:AI支援ワークフローの自動化

CI/CD統合:AI支援ワークフローの自動化

AI支援をCI/CDパイプラインに統合することで、強力な自動化機能が解放されます。自動コードレビューからインテリジェントなテスト生成まで、CCJKは開発ワークフローのあらゆる段階を強化できます。

概要

何を自動化できるか?

ステージAI機能
プリコミットコードフォーマット、リント提案
プルリクエスト自動コードレビュー、セキュリティスキャン
ビルドドキュメント生成
テストテストカバレッジ分析、テスト生成
デプロイリリースノート、変更履歴生成

GitHub Actions統合

基本セットアップ

ワークフローファイルを作成:

hljs yaml
# .github/workflows/ai-review.yml name: AI Code Review on: pull_request: types: [opened, synchronize] jobs: ai-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install CCJK run: npm install -g ccjk - name: Run AI Review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | ccjk review --ci --output github-pr

高度なレビューワークフロー

hljs yaml
# .github/workflows/comprehensive-review.yml name: Comprehensive AI Review on: pull_request: types: [opened, synchronize, ready_for_review] jobs: code-review: runs-on: ubuntu-latest if: github.event.pull_request.draft == false steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - run: npm ci - run: npm install -g ccjk - name: Code Quality Review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk review \ --focus quality \ --severity-threshold minor \ --output review-quality.md - name: Security Review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk review \ --focus security \ --severity-threshold critical \ --output review-security.md - name: Performance Review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk review \ --focus performance \ --output review-performance.md - name: Post Review Comments uses: actions/github-script@v7 with: script: | const fs = require('fs'); const reviews = [ 'review-quality.md', 'review-security.md', 'review-performance.md' ]; let body = '## AIコードレビューサマリー\n\n'; for (const file of reviews) { if (fs.existsSync(file)) { body += fs.readFileSync(file, 'utf8') + '\n\n'; } } await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, body: body });

自動テスト生成

テスト生成ワークフロー

hljs yaml
# .github/workflows/generate-tests.yml name: Generate Missing Tests on: pull_request: types: [opened, synchronize] jobs: generate-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npm install -g ccjk - name: Analyze Test Coverage run: | npm run test:coverage echo "COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')" >> $GITHUB_ENV - name: Generate Tests for Uncovered Code if: env.COVERAGE < 80 env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk test \ --coverage-threshold 80 \ --auto-generate \ --output tests/ - name: Create PR for Generated Tests if: env.COVERAGE < 80 uses: peter-evans/create-pull-request@v5 with: commit-message: "test: AI生成テストを追加してカバレッジを改善" title: "🤖 AI生成テスト" body: | このPRは、テストカバレッジを改善するためにAIが生成したテストを含んでいます。 現在のカバレッジ: ${{ env.COVERAGE }}% 目標カバレッジ: 80% 生成されたテストをレビューして、必要に応じて調整してください。 branch: ai-generated-tests

ドキュメント自動化

ドキュメント生成ワークフロー

hljs yaml
# .github/workflows/update-docs.yml name: Update Documentation on: push: branches: [main] paths: - 'src/**' - 'docs/**' jobs: update-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npm install -g ccjk - name: Generate API Documentation env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk doc \ --type api \ --input src/api/ \ --output docs/api/ - name: Generate Component Documentation env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk doc \ --type components \ --input src/components/ \ --output docs/components/ - name: Update README env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk doc \ --type readme \ --update \ --include-examples - name: Commit Documentation uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "docs: ドキュメントを自動更新" file_pattern: "docs/** README.md"

リリース自動化

リリースノート生成

hljs yaml
# .github/workflows/release.yml name: Create Release on: push: tags: - 'v*' jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g ccjk - name: Generate Release Notes env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk release-notes \ --from-tag $(git describe --tags --abbrev=0 HEAD^) \ --to-tag ${{ github.ref_name }} \ --output RELEASE_NOTES.md - name: Generate Changelog env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk changelog \ --update \ --version ${{ github.ref_name }} - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: body_path: RELEASE_NOTES.md files: | dist/** CHANGELOG.md

GitLab CI統合

基本パイプライン

hljs yaml
# .gitlab-ci.yml stages: - review - test - build - deploy ai-review: stage: review image: node:20 script: - npm install -g ccjk - ccjk review --ci --output gitlab-mr only: - merge_requests variables: ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY generate-tests: stage: test image: node:20 script: - npm ci - npm install -g ccjk - ccjk test --auto-generate --coverage-threshold 80 only: - merge_requests artifacts: paths: - tests/ expire_in: 1 week update-docs: stage: build image: node:20 script: - npm install -g ccjk - ccjk doc --type api --input src/ --output docs/ only: - main artifacts: paths: - docs/

Jenkins統合

Jenkinsfile

hljs groovy
pipeline { agent any environment { ANTHROPIC_API_KEY = credentials('anthropic-api-key') } stages { stage('Setup') { steps { sh 'npm install -g ccjk' } } stage('AI Review') { when { changeRequest() } steps { sh ''' ccjk review \ --ci \ --output review.md ''' publishHTML([ reportDir: '.', reportFiles: 'review.md', reportName: 'AI Code Review' ]) } } stage('Generate Tests') { steps { sh ''' ccjk test \ --auto-generate \ --coverage-threshold 80 ''' } } stage('Update Documentation') { when { branch 'main' } steps { sh ''' ccjk doc \ --type api \ --input src/ \ --output docs/ ''' } } } post { always { archiveArtifacts artifacts: 'review.md, docs/**', allowEmptyArchive: true } } }

CircleCI統合

設定ファイル

hljs yaml
# .circleci/config.yml version: 2.1 orbs: node: circleci/node@5.1.0 jobs: ai-review: docker: - image: cimg/node:20.0 steps: - checkout - node/install-packages - run: name: Install CCJK command: npm install -g ccjk - run: name: Run AI Review command: | ccjk review \ --ci \ --output review.md - store_artifacts: path: review.md generate-tests: docker: - image: cimg/node:20.0 steps: - checkout - node/install-packages - run: name: Install CCJK command: npm install -g ccjk - run: name: Generate Tests command: | ccjk test \ --auto-generate \ --coverage-threshold 80 - persist_to_workspace: root: . paths: - tests/ workflows: version: 2 review-and-test: jobs: - ai-review: filters: branches: ignore: main - generate-tests: requires: - ai-review

カスタムスクリプト

プリコミットフック

hljs bash
#!/bin/bash # .git/hooks/pre-commit echo "🤖 AIコードレビューを実行中..." # ステージされたファイルを取得 STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(ts|tsx|js|jsx)$') if [ -z "$STAGED_FILES" ]; then echo "レビューするファイルがありません" exit 0 fi # AIレビューを実行 ccjk review --staged --quick if [ $? -ne 0 ]; then echo "❌ AIレビューで問題が見つかりました" echo "修正するか、--no-verifyでスキップしてください" exit 1 fi echo "✅ AIレビュー合格" exit 0

プリプッシュフック

hljs bash
#!/bin/bash # .git/hooks/pre-push echo "🧪 テストカバレッジを確認中..." # テストを実行 npm run test:coverage # カバレッジを確認 COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct') if (( $(echo "$COVERAGE < 80" | bc -l) )); then echo "⚠️ テストカバレッジが80%未満です(現在: ${COVERAGE}%)" echo "テストを生成しますか? (y/n)" read -r response if [[ "$response" =~ ^[Yy]$ ]]; then ccjk test --auto-generate --coverage-threshold 80 echo "✅ テストが生成されました。コミットして再度プッシュしてください" exit 1 fi fi echo "✅ テストカバレッジ合格(${COVERAGE}%)" exit 0

モニタリングとアラート

メトリクス収集

hljs yaml
# .github/workflows/metrics.yml name: Collect AI Metrics on: schedule: - cron: '0 0 * * *' # 毎日実行 jobs: collect-metrics: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Collect Metrics env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | ccjk metrics \ --period 7d \ --output metrics.json - name: Generate Report run: | ccjk metrics report \ --input metrics.json \ --output metrics-report.md - name: Send to Slack uses: slackapi/slack-github-action@v1 with: payload: | { "text": "週次AIメトリクスレポート", "attachments": [ { "color": "good", "text": "${{ steps.metrics.outputs.summary }}" } ] } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

ベストプラクティス

1. 段階的な導入

hljs yaml
# 段階1:読み取り専用レビュー - name: AI Review (Read-only) run: ccjk review --no-fail # 段階2:警告のみ - name: AI Review (Warnings) run: ccjk review --severity-threshold major # 段階3:完全な強制 - name: AI Review (Enforced) run: ccjk review --severity-threshold minor --fail-on-issues

2. コスト管理

hljs yaml
# キャッシングを使用 - name: Cache AI Results uses: actions/cache@v3 with: path: .ccjk-cache key: ccjk-${{ hashFiles('**/*.ts') }} # スコープを制限 - name: Review Changed Files Only run: ccjk review --changed-only

3. エラーハンドリング

hljs yaml
- name: AI Review with Fallback run: | ccjk review --ci || { echo "AIレビューが失敗しました。手動レビューが必要です" exit 0 # ビルドを失敗させない }

4. セキュリティ

hljs yaml
# シークレットを保護 - name: AI Review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | # .envファイルを除外 ccjk review --ignore ".env*" --ignore "secrets/"

トラブルシューティング

一般的な問題

問題1:タイムアウト

hljs yaml
# タイムアウトを増やす - name: AI Review timeout-minutes: 30 run: ccjk review --timeout 1800

問題2:レート制限

hljs yaml
# リトライロジックを追加 - name: AI Review with Retry uses: nick-invision/retry@v2 with: timeout_minutes: 10 max_attempts: 3 command: ccjk review --ci

問題3:大きなPR

hljs yaml
# PRを分割するか、スコープを制限 - name: Review Critical Files Only run: | ccjk review \ --include "src/critical/**" \ --severity-threshold major

まとめ

CI/CD統合により、AI支援を開発ワークフローに自動的に組み込むことができます:

  1. 自動レビュー:すべてのPRで一貫したコードレビュー
  2. テスト生成:カバレッジギャップを自動的に埋める
  3. ドキュメント:コード変更と同期してドキュメントを更新
  4. リリース:リリースノートと変更履歴を自動生成
  5. モニタリング:メトリクスを追跡して継続的に改善

段階的に導入し、コストを管理し、セキュリティを維持してください。

次へVS Code統合でIDEでCCJKを使用する方法を学びます。

よくある質問

CI/CDでCCJKを使用するコストは?

使用量に基づきます。キャッシングと変更されたファイルのみのレビューでコストを削減できます。

プライベートリポジトリで使用できますか?

はい、APIキーをシークレットとして保存し、機密ファイルを除外してください。

既存のCI/CDツールと統合できますか?

はい、CCJKはGitHub Actions、GitLab CI、Jenkins、CircleCIなどと統合できます。

AIレビューが失敗した場合、ビルドは失敗しますか?

設定可能です。--fail-on-issuesフラグで制御できます。

タグ

#cicd#automation#github-actions#devops#pipeline

この記事をシェア

继续阅读

関連記事