devops-excellence について
devops-excellenceは、安全なソフトウェアデリバリーとインフラ運用を計画するチーム向けのDevOpsスキルです。CI/CD、GitOps、IaCに加え、コンテナとKubernetesの実践を扱います。
主な機能
- 01GitOpsとIaC
- 02プログレッシブデリバリーとリリース方式
- 03CI/CDのセキュリティとパイプライン最適化
- 04Dockerイメージとコンテナの強化
- 05Kubernetesのリソースとセキュリティ対策
- 06オブザーバビリティとポリシーのコード化
活用シーン
- 01短期認証情報を使ったCI/CDパイプラインの設計
- 02カナリアまたはブルーグリーンデプロイの選択
- 03実行用Dockerイメージの強化
- 04Kubernetesのヘルスチェックとリソース管理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ majiayu000/ spellbook --skill devops-excellenceインストール後、Claude Code で/devops-excellenceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/cicd.mdcontainers.mdextended.mdrelease-strategies.mdtemplates/Dockerfilegithub-actions.yaml詳細
DevOps の卓越性
コア原則
- シフトレフト — SDLC の早い段階でセキュリティと品質に対処します
- GitOps — インフラストラクチャとデプロイの信頼できる唯一の情報源として Git を使用します
- Infrastructure as Code — すべてのインフラストラクチャをバージョン管理し、再現可能にします
- プログレッシブデリバリー — フィーチャーフラグとカナリアリリースを使って段階的にロールアウトします
- イミュータブルインフラストラクチャ — 実行中のシステムを変更せず、置き換えます
- オブザーバビリティファースト — デプロイや機能に関連するメトリクスを監視します
- Policy as Code — コンプライアンスとセキュリティを自動的に適用します
- プラットフォームエンジニアリング — ゴールデンパスとセルフサービスポータルを構築します
厳守事項(必ず従うこと)
これらのルールは必須です。違反した場合、このスキルは正しく機能していません。
静的認証情報の禁止
有効期間の長い静的認証情報は決して使用しないでください。必ず OIDC または短命トークンを使用してください。
# ❌ FORBIDDEN: Static AWS credentials
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# ✅ REQUIRED: OIDC-based authentication
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
aws-region: us-east-1
# No long-lived secrets - uses GitHub OIDC provider
root コンテナの禁止
コンテナを root として実行してはいけません。必ず root 以外のユーザーを指定してください。
# ❌ FORBIDDEN: Running as root (default)
FROM node:20
WORKDIR /app
CMD ["node", "server.js"]
# ❌ FORBIDDEN: Explicit root user
USER root
# ✅ REQUIRED: Non-root user with UID > 1000
FROM node:20-alpine
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001
USER nodejs
WORKDIR /app
CMD ["node", "server.js"]
イメージへのシークレットの埋め込み禁止
Docker イメージにシークレットを決して埋め込まないでください。実行時の注入またはシークレットマネージャーを使用してください。
# ❌ FORBIDDEN: Secrets in build args or ENV
ARG DATABASE_PASSWORD
ENV API_KEY=sk-xxx
# ❌ FORBIDDEN: Copying secret files
COPY .env /app/.env
COPY credentials.json /app/
# ✅ REQUIRED: Mount secrets at runtime
# docker run -v /secrets:/app/secrets:ro myapp
# Or use Kubernetes secrets/configmaps
本番環境へのデプロイを保護する
本番環境へのデプロイには承認を必須とし、main ブランチに制限する必要があります。
# ❌ FORBIDDEN: Direct production deploy without protection
deploy:
runs-on: ubuntu-latest
steps:
- run: deploy-to-prod.sh
# ✅ REQUIRED: Environment protection
deploy:
runs-on: ubuntu-latest
environment:
name: production
url: https://myapp.com
# Requires: approval + main branch only
クイックリファレンス
使い分け
| シナリオ | ツール/パターン | 理由 |
|---|---|---|
| 公開 GitHub プロジェクト | GitHub Actions | ネイティブ統合、公開リポジトリでは無料 |
| エンタープライズ GitLab | GitLab CI | 統合プラットフォーム、高度なセキュリティスキャン |
| マルチクラウド IaC | Terraform | 成熟したエコシステム、幅広いプロバイダーをサポート |
| 開発者中心の IaC | Pulumi | 実際のプログラミング言語を使用でき、テストも容易 |
| Kubernetes のデプロイ | ArgoCD + Kustomize | GitOps の標準、宣言型の設定 |
| ダウンタイムのないリリース | Blue-Green または Canary | 即時ロールバックが可能 |
| 機能の段階的なロールアウト | フィーチャーフラグ(LaunchDarkly) | ターゲティングによるプログレッシブデリバリー |
デプロイ戦略の選択
| 戦略 | ダウンタイム | コスト | ロールバック速度 | 複雑さ | 最適な用途 |
|---|---|---|---|---|---|
| ローリング | 最小限 | 低 | 中 | 低 | 定期的な更新、コスト重視 |
| Blue-Green | なし | 高(2 倍) | 即時 | 中 | 重要なシステム、容易なロールバック |
| Canary | なし | 中 | 高速 | 高 | リスク軽減、データ主導 |
| 再作成 | 大 | 低 | 該当なし | 非常に低 | 重要でない環境、開発/テストのみ |
CI/CD パイプラインのベストプラクティス
パイプラインのセキュリティ
# Short-lived credentials (not static keys)
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
aws-region: us-east-1
# OIDC provider - no long-lived secrets!
# Protected environments for production
environment:
name: production
# Requires approval + restricts to main branch
速度の最適化
- 10 分ビルドルール — ほとんどのプロジェクトでは、ビルドを 10 分未満で完了させます
- 並列ジョブ — テスト、Lint、セキュリティスキャンを並行して実行します
- 依存関係のキャッシュ — node_modules、.m2、pip パッケージをキャッシュします
- 条件付き実行 — ファイルに変更がない場合はジョブをスキップします
# Example: conditional job execution
jobs:
backend-tests:
if: contains(github.event.head_commit.modified, 'backend/')
runs-on: ubuntu-latest
テストピラミッド
/\
/E2E\ <- Few (slow, expensive)
/------\
/Integration\ <- Some (medium speed)
/------------\
/ Unit Tests \ <- Many (fast, cheap)
/----------------\
- 70% 単体テスト(高速、分離)
- 20% 統合テスト(サービス間の連携)
- 10% E2E テスト(ユーザーのワークフロー全体)
セキュリティスキャンの統合
# Multi-layer security scanning
jobs:
security:
runs-on: ubuntu-latest
steps:
# SAST - Static code analysis
- uses: github/codeql-action/init@v3
# SCA - Dependency vulnerabilities
- name: Run Trivy
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
format: 'sarif'
# Secret scanning
- name: Gitleaks
uses: gitleaks/gitleaks-action@v2
# Container scanning
- name: Scan Docker image
run: trivy image myapp:${{ github.sha }}
Docker のベストプラクティス
マルチステージビルド
# Build stage - includes build tools (900MB+)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# Runtime stage - minimal image (<100MB)
FROM node:20-alpine AS runtime
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001
WORKDIR /app
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
COPY --chown=nodejs:nodejs . .
USER nodejs
EXPOSE 3000
CMD ["node", "server.js"]
セキュリティ強化
- root 以外のユーザー — 必ず root 以外(UID 1001)として実行します
- 最小限のベースイメージ —
alpine、distroless、またはscratchを使用します - 読み取り専用ファイルシステム —
docker run --read-only - レイヤーへのシークレットの埋め込み禁止 — ビルドシークレットまたは外部のボールトを使用します
- リソース制限 — DoS を防ぐために CPU/メモリ制限を設定します
- 署名済みイメージ — Docker Content Trust を有効にします
# Security best practices example
FROM gcr.io/distroless/nodejs20-debian12
COPY --chown=65532:65532 /app /app
USER 65532
EXPOSE 8080
.dockerignore
# Version control
.git
.gitignore
# Dependencies (install fresh in container)
node_modules
vendor/
*.pyc
__pycache__
# Secrets and configs
.env
.env.local
secrets/
*.key
*.pem
# Development files
README.md
Dockerfile
docker-compose.yml
.vscode/
.idea/
# Testing and CI
tests/
*.test.js
.github/
Kubernetes のデプロイパターン
リソース管理(適正化)
# 99.94% of clusters are over-provisioned!
# Average CPU usage: 10%, Memory: 23%
resources:
requests:
memory: "128Mi" # Guaranteed allocation
cpu: "100m" # 0.1 CPU cores
limits:
memory: "256Mi" # Maximum allowed
cpu: "200m" # Hard cap
# Use tools: Kubecost, Goldilocks, VPA
ヘルスチェック
# Liveness: Is container alive?
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Readiness: Can it receive traffic?
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
# Startup: Has initialization completed?
startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 30 # 30*10s = 5min for slow starts
periodSeconds: 10
ConfigMaps とシークレット
# Group related resources in single manifest
---
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_ENV: production
LOG_LEVEL: info
---
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
DATABASE_URL: postgresql://user:pass@db:5432/mydb
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: app
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secrets
セキュリティのベストプラクティス
# Pod Security Standards
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
capabilities:
drop:
- ALL
# Network Policies (deny-by-default)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
拡張リファレンス
## Infrastructure as Code (Terraform/Pulumi) から始まる詳細な内容は、このスキルを簡潔に保つため、reference/extended.md に移動しました。移動した例、コマンド一覧、チェックリスト、プラットフォームの詳細、実装テンプレートが必要なタスクでは、このリファレンスを読み込んでください。
コメント
Markdown 対応