devops について
devopsは、ソフトウェアプロジェクト向けのインフラとデプロイに関するガイダンスをまとめたスキルです。CI/CD、Docker、監視、インフラ選定、インシデント対応のチェックリストと手順を扱います。
主な機能
- 01デプロイ前の確認チェックリスト
- 02CI/CDの段階と失敗時の対応
- 03マルチステージDockerビルドの指針
- 04監視とアラートの実践項目
- 05インフラの既定案とインシデント対応
活用シーン
- 01リリース前にデプロイ準備を確認
- 02CI/CDの障害対応とロールバックを計画
- 03Dockerビルドと監視の規約を整備
- 04本番インシデントの対応手順を整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ iankiku/ forwward-teams --skill devopsインストール後、Claude Code で/devopsを入力して読み込まれたか確認します。
詳細
DevOps — インフラストラクチャとデプロイ
確実にリリースし、すべてを監視し、迅速に修正します。
デプロイチェックリスト
デプロイ前に、以下を確認してください。
- CIですべてのテストが合格している(ローカル環境だけでは不十分です)
- デプロイ先の環境に環境変数が設定されている
- 本番環境に近いデータを使ってデータベースのマイグレーションをテストしている
- ロールバック計画を文書化している(「このコミットをリバートする」だけでも構いません)
- ヘルスチェックエンドポイントがあり、200を返す
CI/CDパイプライン
push → lint → typecheck → test → build → deploy staging → smoke test → deploy prod
| ステージ | 失敗時 | 対応 |
|---|---|---|
| リント/型チェック | マージをブロック | ローカルで修正 |
| テスト | マージをブロック | 修正するかテストを更新 |
| ビルド | マージをブロック | ビルドエラーを修正 |
| ステージングへのデプロイ | 本番デプロイをブロック | ステージングでデバッグ |
| スモークテスト | 本番デプロイをブロック | ステージングをロールバックして調査 |
| 本番デプロイ | オンコールにアラート | 直ちにロールバック |
Docker
イメージを小さく保つため、常にマルチステージビルドを使用してください。スタックを検出し、適切なベースイメージを使ってください。
Node.js / TypeScript
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --production=false
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]
Python
FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Go
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/api
FROM alpine:3.19
WORKDIR /app
COPY --from=builder /app/server .
EXPOSE 8080
CMD ["./server"]
Ruby on Rails
FROM ruby:3.3-slim AS builder
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install --without development test
FROM ruby:3.3-slim
WORKDIR /app
COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY . .
EXPOSE 3000
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
その他のスタック(Java/JVM、.NET、Rust)でも同じパターンです。ビルドステージでコンパイルし、最終ステージは最小限にします。ビルドツールチェーンを最終イメージにコピーしてはいけません。
すべてのスタックに共通するルール:
- ベースイメージのバージョンは常に固定してください(
latestは使わないでください) .dockerignoreを使い、ビルド成果物、.git、.envファイルを決して含めないでください- コンテナごとにプロセスは1つにしてください
- ヘルスチェックを追加してください:
HEALTHCHECK CMD curl -f http://localhost:<PORT>/health || exit 1
監視
| 対象 | ツールの選択肢 | アラート条件 |
|---|---|---|
| 稼働時間 | UptimeRobot, Checkly | 30秒を超えてダウン |
| エラー | Sentry, Datadog | エラー率が1%を超える |
| レイテンシ | Grafana, Datadog | p95が2秒を超える |
| リソース | クラウドプロバイダーのメトリクス | CPUが80%超、メモリが85%超 |
| ログ | Datadog, Axiom, CloudWatch | エラーパターン、キーワード |
ルール:
- すべてのアラートにランブックを用意してください(1行だけでも構いません)
- アラートが発火しても対応が不要なら、削除してください。アラート疲れは深刻な問題につながります
- printf形式の文字列ではなく、構造化JSONをログに記録してください
- トレースできるよう、すべてのログ行にリクエストIDを含めてください
インフラストラクチャのデフォルト
| 項目 | デフォルト | 理由 |
|---|---|---|
| ホスティング | Vercel / Railway / Fly.io | 設定不要で、スケールします |
| データベース | マネージドPostgres(Supabase、Neon、RDS) | 自分でDBを管理する必要がありません |
| キャッシュ | Upstash Redis | サーバーレスで、運用作業が不要です |
| キュー | Inngest、Trigger.dev、またはSQS | マネージドで、再試行機能が組み込まれています |
| ストレージ | S3 / R2 / Supabase Storage | 低コストで信頼性があります |
| DNS | Cloudflare | 高速で、無料プランがあります |
| シークレット | プラットフォーム経由の環境変数 | コードやgitには決して含めないでください |
インシデント対応
- 検知 — アラートの発火またはユーザーからの報告
- 確認 — 担当者を決める(5分以内)
- 緩和 — ロールバック、機能フラグの無効化、またはスケールアップ(問題の拡大を止めます)
- 調査 — 問題が収まってから根本原因を調べる
- 修正 — テストを伴う適切な修正
- ポストモーテム — 誰かを責めず、人ではなくシステムに焦点を当てる
コメント
Markdown 対応