⚙️ 自動化

デプロイチェックリスト

自動検証機能付きの包括的なデプロイ前チェックリストを作成します

★★☆ 中級 15 min 2025年1月13日

ユースケース

デプロイには問題を防ぐための体系的な検証が必要です。Cowork は、技術スタックに合わせたチェックリストを生成し、チェックを自動化するスクリプトを作成できます。

プロンプト例

Node.js アプリケーションを本番環境にデプロイします。以下を作成してください:

1. デプロイ前チェックリスト:
   - コード品質(テスト、リント)
   - セキュリティ(依存関係、シークレット)
   - データベース(マイグレーション、バックアップ)
   - インフラストラクチャ(リソース、設定)
   - 監視(アラート、ログ)

2. 自動検証スクリプト:
   - すべてのテストが合格
   - セキュリティ脆弱性がない
   - 環境変数が設定されている
   - データベース接続が正常

3. デプロイ後検証チェックリスト

~/Deployments/checklist/ に保存

Cowork の動作

  1. チェックリスト生成: 包括的な Markdown チェックリストを作成します
  2. スクリプト作成: 検証可能なチェックを自動化します
  3. リスク評価: 重要なチェックを特定します
  4. ロールバック計画: リカバリ手順を含めます
  5. ドキュメント: ランブック形式で生成します

出力サンプル

# 本番デプロイチェックリスト
アプリケーション: MyApp
日付: ___________
担当エンジニア: ___________

## デプロイ前

### コード品質
- [ ] すべてのテストが合格(実行: `npm test`)
- [ ] ESLint がエラーなしで合格
- [ ] コードレビューが承認済み
- [ ] PR が main にマージ済み
- [ ] CI でビルドが成功

### セキュリティ
- [ ] `npm audit` で高/重大な脆弱性がない
- [ ] コードベースにシークレットがない(実行: `git secrets --scan`)
- [ ] 依存関係が過去 30 日以内に更新済み
- [ ] HTTPS が強制されている
- [ ] レート制限が設定されている

### データベース
- [ ] データベースバックアップが完了
- [ ] バックアップが検証済み(テスト復元)
- [ ] マイグレーションがステージングでテスト済み
- [ ] マイグレーションロールバックスクリプトが準備済み
- [ ] データベース接続プールがサイズ設定済み

### インフラストラクチャ
- [ ] 環境変数が設定済み
- [ ] SSL 証明書が有効(30 日以上)
- [ ] ディスク空き容量が十分(20% 以上空き)
- [ ] メモリ割り当てが確認済み
- [ ] ロードバランサーのヘルスチェックが設定済み

### 監視
- [ ] エラートラッキングがアクティブ(Sentry 等)
- [ ] パフォーマンス監視が有効
- [ ] アラートしきい値が設定済み
- [ ] オンコールエンジニアに通知済み
- [ ] ステータスページが準備済み

---

## デプロイ手順
1. メンテナンスモードを有効化
2. データベースバックアップを作成
3. データベースマイグレーションを実行
4. 新しいアプリケーションバージョンをデプロイ
5. ヘルスチェックを検証
6. メンテナンスモードを無効化
7. 本番環境で検証

---

## ロールバック計画
問題が検出された場合:
1. メンテナンスモードを有効化
2. 前のデプロイに戻す
3. データベースをロールバック(必要な場合)
4. 機能を検証
5. 根本原因を調査
#!/bin/bash
# pre-deploy-verify.sh

echo "デプロイ前検証を実行中..."

FAILED=0

# テストスイート
echo "テストを実行中..."
npm test
if [ $? -ne 0 ]; then
    echo "テストが失敗しました"
    FAILED=1
fi

# セキュリティ監査
echo "セキュリティをチェック中..."
AUDIT=$(npm audit --json 2>/dev/null)
HIGH=$(echo $AUDIT | jq '.metadata.vulnerabilities.high')
CRITICAL=$(echo $AUDIT | jq '.metadata.vulnerabilities.critical')

if [ "$HIGH" -gt 0 ] || [ "$CRITICAL" -gt 0 ]; then
    echo "セキュリティ脆弱性が見つかりました: $HIGH 件の高、$CRITICAL 件の重大"
    FAILED=1
else
    echo "高/重大な脆弱性はありません"
fi

# 環境変数
echo "環境をチェック中..."
REQUIRED_VARS="DATABASE_URL REDIS_URL API_KEY SECRET_KEY"
for var in $REQUIRED_VARS; do
    if [ -z "${!var}" ]; then
        echo "未設定: $var"
        FAILED=1
    fi
done

# データベース接続
echo "データベース接続をテスト中..."
node -e "require('./src/db').connect().then(() => process.exit(0)).catch(() => process.exit(1))"
if [ $? -ne 0 ]; then
    echo "データベース接続が失敗しました"
    FAILED=1
else
    echo "データベース接続成功"
fi

# 最終結果
echo ""
if [ $FAILED -eq 0 ]; then
    echo "すべてのデプロイ前チェックに合格しました!"
    echo "デプロイを進めてください。"
else
    echo "デプロイ前チェックが失敗しました!"
    echo "デプロイ前に問題を修正してください。"
    exit 1
fi

ヒント

  • チェックリストを特定のスタックに合わせてカスタマイズする
  • 重要な項目を CI/CD のブロッカーにする
  • ロールバック手順を最新に保つ
  • まずステージング環境でデプロイを練習する