[テンプレ]CI/CD

関連テンプレ構成
テンプレート
# CI/CD

## CI/CDの目的

**Continuous Integration(継続的インテグレーション):**
- コードの統合を頻繁に行い、早期に問題を発見
- 自動テストによる品質の維持
- ビルドの自動化による効率化

**Continuous Delivery/Deployment(継続的デリバリー/デプロイメント):**
- 本番環境への迅速なリリース
- デプロイプロセスの自動化
- リリースサイクルの短縮

**主な目的:**
- **品質向上**: 自動テストによる早期バグ検出
- **効率化**: 手作業の削減、人的ミスの防止
- **迅速性**: 開発からリリースまでの時間短縮
- **一貫性**: 環境ごとの差異を最小化
- **トレーサビリティ**: ビルド・デプロイ履歴の記録

---

## CI/CDプラットフォーム

### 利用するプラットフォーム

本システムでは、GitHub Actions と AWS CodeSeries を組み合わせる。

---

## CI/CDの実装

具体的な仕様定義・実装は、開発工程に委ねる。

### 全体フロー概観

```mermaid
graph TB
    A[ソースコード] --> B[CI/CDプラットフォーム]
    B --> C[ビルド]
    B --> D[テスト]
    B --> E[デプロイ]
    C --> F[成果物]
    D --> G[テストレポート]
    E --> H[各環境]
```

### 禁止事項

#### ❌ ソースコードへの秘密情報の記述
```yaml
# NG例
env:
  DB_PASSWORD: "mypassword123"  # 秘密情報を直接記述
```

#### ❌ 本番環境への自動デプロイ(承認なし)
```yaml
# NG例
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Production
        run: ./deploy-prod.sh  # 承認なしで本番デプロイ
```

#### ❌ テストのスキップ
```yaml
# NG例
- name: Run Tests
  run: echo "Skipping tests"  # テストを実行しない
```

### 必須事項

#### ✅ 秘密情報の適切な管理
```yaml
# OK例: GitHub Secretsを使用
env:
  DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
```

#### ✅ 全環境でのテスト実行
```yaml
# OK例
- name: Run Unit Tests
  run: npm test
- name: Run Integration Tests
  run: npm run test:integration
```

#### ✅ 本番環境へのデプロイ承認
```yaml
# OK例
jobs:
  deploy-prod:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://prod.example.com
    steps:
      - name: Deploy
        run: ./deploy.sh
```

### 推奨事項

#### 🔵 並列実行によるビルド時間短縮
```yaml
# 推奨例
jobs:
  test:
    strategy:
      matrix:
        node-version: [14, 16, 18]
    runs-on: ubuntu-latest
    steps:
      - name: Test on Node ${{ matrix.node-version }}
        run: npm test
```

#### 🔵 キャッシュの活用
```yaml
# 推奨例
- name: Cache dependencies
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
```

#### 🔵 失敗時の通知
```yaml
# 推奨例
- name: Notify on failure
  if: failure()
  uses: 8398a7/action-slack@v3
  with:
    status: ${{ job.status }}
    webhook_url: ${{ secrets.SLACK_WEBHOOK }}
```

---

## 品質ゲート

### 品質基準

```mermaid
graph TD
    A[コード変更] --> B{静的解析}
    B -->|Pass| C{テストカバレッジ}
    B -->|Fail| Z[マージ拒否]
    C -->|>80%| D{ユニットテスト}
    C -->|<80%| Z
    D -->|Pass| E{統合テスト}
    D -->|Fail| Z
    E -->|Pass| F[マージ可能]
    E -->|Fail| Z
```

| 項目 | 基準 | ツール |
|------|------|--------|
| テストカバレッジ | 80%以上 | JaCoCo, Istanbul |
| 静的解析 | 警告なし | ESLint, SonarQube |
| セキュリティスキャン | 脆弱性なし | Snyk, Trivy |
| ビルド成功 | 必須 | Maven, npm |

---
プレビュー

CI/CD

CI/CDの目的

Continuous Integration(継続的インテグレーション):

  • コードの統合を頻繁に行い、早期に問題を発見
  • 自動テストによる品質の維持
  • ビルドの自動化による効率化

Continuous Delivery/Deployment(継続的デリバリー/デプロイメント):

  • 本番環境への迅速なリリース
  • デプロイプロセスの自動化
  • リリースサイクルの短縮

主な目的:

  • 品質向上: 自動テストによる早期バグ検出
  • 効率化: 手作業の削減、人的ミスの防止
  • 迅速性: 開発からリリースまでの時間短縮
  • 一貫性: 環境ごとの差異を最小化
  • トレーサビリティ: ビルド・デプロイ履歴の記録

CI/CDプラットフォーム

利用するプラットフォーム

本システムでは、GitHub Actions と AWS CodeSeries を組み合わせる。


CI/CDの実装

具体的な仕様定義・実装は、開発工程に委ねる。

全体フロー概観
graph TB
    A[ソースコード] --> B[CI/CDプラットフォーム]
    B --> C[ビルド]
    B --> D[テスト]
    B --> E[デプロイ]
    C --> F[成果物]
    D --> G[テストレポート]
    E --> H[各環境]
禁止事項
❌ ソースコードへの秘密情報の記述
# NG例
env:
  DB_PASSWORD: "mypassword123"  # 秘密情報を直接記述
❌ 本番環境への自動デプロイ(承認なし)
# NG例
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Production
        run: ./deploy-prod.sh  # 承認なしで本番デプロイ
❌ テストのスキップ
# NG例
- name: Run Tests
  run: echo "Skipping tests"  # テストを実行しない
必須事項
✅ 秘密情報の適切な管理
# OK例: GitHub Secretsを使用
env:
  DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
✅ 全環境でのテスト実行
# OK例
- name: Run Unit Tests
  run: npm test
- name: Run Integration Tests
  run: npm run test:integration
✅ 本番環境へのデプロイ承認
# OK例
jobs:
  deploy-prod:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: <https://prod.example.com>
    steps:
      - name: Deploy
        run: ./deploy.sh
推奨事項
🔵 並列実行によるビルド時間短縮
# 推奨例
jobs:
  test:
    strategy:
      matrix:
        node-version: [14, 16, 18]
    runs-on: ubuntu-latest
    steps:
      - name: Test on Node ${{ matrix.node-version }}
        run: npm test
🔵 キャッシュの活用
# 推奨例
- name: Cache dependencies
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
🔵 失敗時の通知
# 推奨例
- name: Notify on failure
  if: failure()
  uses: 8398a7/action-slack@v3
  with:
    status: ${{ job.status }}
    webhook_url: ${{ secrets.SLACK_WEBHOOK }}

品質ゲート

品質基準
graph TD
    A[コード変更] --> B{静的解析}
    B -->|Pass| C{テストカバレッジ}
    B -->|Fail| Z[マージ拒否]
    C -->|>80%| D{ユニットテスト}
    C -->|<80%| Z
    D -->|Pass| E{統合テスト}
    D -->|Fail| Z
    E -->|Pass| F[マージ可能]
    E -->|Fail| Z
項目 基準 ツール
テストカバレッジ 80%以上 JaCoCo, Istanbul
静的解析 警告なし ESLint, SonarQube
セキュリティスキャン 脆弱性なし Snyk, Trivy
ビルド成功 必須 Maven, npm