関連テンプレ構成
テンプレート
# 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 |