デプロイ手順
安全な本番リリースのためのデプロイ原則と意思決定。
スクリプトを暗記するのではなく、考えることを学びましょう。
⚠️ このスキルの使い方
このスキルが教えるのは、コピーするための bash スクリプトではなく、デプロイの原則です。
- すべてのデプロイは固有です
- 各ステップの背後にある WHY を理解しましょう
- 手順をお使いのプラットフォームに合わせて適応させましょう
1. プラットフォームの選択
決定ツリー
What are you deploying?
│
├── Static site / JAMstack
│ └── Vercel, Netlify, Cloudflare Pages
│
├── Simple web app
│ ├── Managed → Railway, Render, Fly.io
│ └── Control → VPS + PM2/Docker
│
├── Microservices
│ └── Container orchestration
│
└── Serverless
└── Edge functions, Lambda
プラットフォームごとに手順は異なります
| プラットフォーム | デプロイ方法 |
|---|
| Vercel/Netlify | Git push、自動デプロイ |
| Railway/Render | Git push または CLI |
| VPS + PM2 | SSH + 手動ステップ |
| Docker | イメージ push + オーケストレーション |
| Kubernetes | kubectl apply |
2. デプロイ前の原則
4 つの検証カテゴリ
| カテゴリ | 確認する内容 |
|---|
| コード品質 | テストが通っている、リンティングがクリーン、レビュー済み |
| ビルド | 本番ビルドが動作する、警告がない |
| 環境 | 環境変数が設定済み、シークレットが最新 |
| 安全性 | バックアップ済み、ロールバック計画が準備済み |
デプロイ前チェックリスト
3. デプロイワークフローの原則
5 フェーズのプロセス
1. PREPARE
└── Verify code, build, env vars
2. BACKUP
└── Save current state before changing
3. DEPLOY
└── Execute with monitoring open
4. VERIFY
└── Health check, logs, key flows
5. CONFIRM or ROLLBACK
└── All good? Confirm. Issues? Rollback.
フェーズの原則
| フェーズ | 原則 |
|---|
| 準備 | テストされていないコードをデプロイしない |
| バックアップ | バックアップがなければロールバックできない |
| デプロイ | その様子を見守る。その場を離れない |
| 検証 | 信頼するが、検証する |
| 確認 | ロールバックのトリガーを準備しておく |
4. デプロイ後の検証
検証する内容
| チェック | 理由 |
|---|
| ヘルスエンドポイント | サービスが稼働している |
| エラーログ | 新しいエラーがない |
| 主要なユーザーフロー | 重要な機能が動作する |
| パフォーマンス | 応答時間が許容範囲内 |
検証の時間枠
- 最初の 5 分間: アクティブなモニタリング
- 15 分: 安定していることを確認
- 1 時間: 最終検証
- 翌日: メトリクスをレビュー
5. ロールバックの原則
ロールバックすべきとき
| 症状 | 対応 |
|---|
| サービスダウン | 直ちにロールバック |
| 重大なエラー | ロールバック |
| パフォーマンスが 50% 以上低下 | ロールバックを検討 |
| 軽微な問題 | すぐに直せる場合は前進して修正 |
プラットフォーム別のロールバック戦略
| プラットフォーム | ロールバック方法 |
|---|
| Vercel/Netlify | 以前のコミットを再デプロイ |
| Railway/Render | ダッシュボードでロールバック |
| VPS + PM2 | バックアップを復元して再起動 |
| Docker | 以前のイメージタグ |
| K8s | kubectl rollout undo |
ロールバックの原則
- 完璧さよりもスピード: まずロールバックし、デバッグは後で
- エラーを重ねない: ロールバックは 1 回、複数の変更をしない
- コミュニケーション: 何が起きたかをチームに伝える
- ポストモーテム: 安定した後に原因を理解する
6. ゼロダウンタイムデプロイ
戦略
| 戦略 | 仕組み |
|---|
| ローリング | インスタンスを 1 つずつ置き換える |
| ブルーグリーン | 環境間でトラフィックを切り替える |
| カナリア | トラフィックを段階的に移行する |
選択の原則
| シナリオ | 戦略 |
|---|
| 標準的なリリース | ローリング |
| 高リスクの変更 | ブルーグリーン(ロールバックが容易) |
| 検証が必要 | カナリア(実際のトラフィックでテスト) |
7. 緊急時の手順
サービスダウン時の優先順位
- 評価: 症状は何か?
- 迅速な修正: 不明な場合は再起動
- ロールバック: 再起動で解決しない場合
- 調査: 安定した後に
調査の順序
| チェック | よくある問題 |
|---|
| ログ | エラー、例外 |
| リソース | ディスク満杯、メモリ |
| ネットワーク | DNS、ファイアウォール |
| 依存関係 | データベース、API |
8. アンチパターン
| ❌ やらないこと | ✅ 推奨 |
|---|
| 金曜日にデプロイする | 週の早い段階でデプロイする |
| デプロイを急ぐ | プロセスに従う |
| ステージング環境を省略する | 必ず先にテストする |
| バックアップなしでデプロイする | デプロイ前にバックアップを取る |
| デプロイ後に放置する | 15分以上監視する |
| 複数の変更を同時に行う | 一度に1つの変更を行う |
9. 決定チェックリスト
デプロイ前に確認してください。
10. ベストプラクティス
- 大規模なリリースよりも、小さく頻繁なデプロイを行う
- リスクの高い変更にはフィーチャーフラグを使う
- 繰り返し行う手順は自動化する
- すべてのデプロイを文書化する
- 問題が起きた後は、何が問題だったかを振り返る
- ロールバックが必要になる前にロールバックをテストしておく
覚えておいてください: すべてのデプロイにはリスクが伴います。スピードではなく、準備によってリスクを最小化してください。