CI/CD統合:AI支援ワークフローの自動化
CCJKをCI/CDパイプラインに統合して、自動コードレビュー、テスト生成、ドキュメント更新を実現します。
C
CCJK Team2025年1月3日
14 分で読めます
1,634 回閲覧
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 groovypipeline { 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支援を開発ワークフローに自動的に組み込むことができます:
- 自動レビュー:すべてのPRで一貫したコードレビュー
- テスト生成:カバレッジギャップを自動的に埋める
- ドキュメント:コード変更と同期してドキュメントを更新
- リリース:リリースノートと変更履歴を自動生成
- モニタリング:メトリクスを追跡して継続的に改善
段階的に導入し、コストを管理し、セキュリティを維持してください。
次へ:VS Code統合でIDEでCCJKを使用する方法を学びます。
よくある質問
CI/CDでCCJKを使用するコストは?
使用量に基づきます。キャッシングと変更されたファイルのみのレビューでコストを削減できます。
プライベートリポジトリで使用できますか?
はい、APIキーをシークレットとして保存し、機密ファイルを除外してください。
既存のCI/CDツールと統合できますか?
はい、CCJKはGitHub Actions、GitLab CI、Jenkins、CircleCIなどと統合できます。
AIレビューが失敗した場合、ビルドは失敗しますか?
設定可能です。--fail-on-issuesフラグで制御できます。
继续阅读
関連記事
AIエージェントを理解する:自律的なコーディングアシスタント
CCJKのAIエージェントが、複雑な複数ステップの開発タスクを自律的に処理する方法を探索します。高レベルの意思決定に集中できます。
Jan 8, 202514 min
1848#ai-agents#automation#workflow
AI支援開発のための高度なプロンプトエンジニアリング
AIコーディングアシスタントで生産性を最大化するための効果的なプロンプトの作成技術をマスターします。エキスパート開発者が使用する実証済みのテクニックを学びます。
Jan 9, 202515 min
1783#prompt-engineering#ai#best-practices
CCJKのAIエージェントを理解する
CCJKでAIエージェントがどのように機能するかを発見し、自動化された開発ワークフローに活用する方法を学びましょう。
Jan 9, 202512 min
890#AIエージェント#自動化#ワークフロー
