シフトレフト
テスト、セキュリティ、品質チェックを開発プロセスの早い段階に移動させるアプローチ
DevOps品質
シフトレフトとは
シフトレフト (Shift Left) は、テスト、セキュリティ、品質チェックを開発プロセスの早い段階 (左側) に移動させるアプローチである。問題を早期に発見するほど修正コストが低い。
従来 vs シフトレフト
従来:
設計 → 実装 → テスト → セキュリティ → デプロイ
↑ ここで問題発見 (修正コスト高い)
シフトレフト:
設計 → 実装 → テスト → セキュリティ → デプロイ
↑ ここで問題発見 (修正コスト低い)
修正コストの増加
| 発見フェーズ | 相対コスト |
|---|---|
| 設計時 | 1x |
| 実装時 | 5x |
| テスト時 | 10x |
| 本番リリース後 | 100x |
シフトレフトの実践
| 領域 | 従来 | シフトレフト |
|---|---|---|
| テスト | QA チームが手動テスト | 開発者が自動テストを書く |
| セキュリティ | リリース前にペネトレーションテスト | コミット時に SAST/DAST |
| コード品質 | コードレビューで指摘 | ESLint + Prettier で自動修正 |
| インフラ | 手動構築後に検証 | IaC + テスト |
具体的なツールチェーン
コーディング時:
TypeScript (型チェック) + ESLint (静的解析) + Prettier (フォーマット)
↓
コミット時:
Husky + lint-staged (Git フック)
↓
プッシュ時:
GitHub Actions (CI: テスト + ビルド + セキュリティスキャン)
↓
マージ時:
コードレビュー + 自動テスト通過必須
↓
デプロイ時:
自動デプロイ + スモークテスト
セキュリティのシフトレフト (DevSecOps)
| チェック | ツール | タイミング |
|---|---|---|
| 依存パッケージの脆弱性 | Dependabot, Snyk | PR 作成時 |
| シークレットの検出 | git-secrets, TruffleHog | コミット時 |
| SAST (静的解析) | CodeQL, Semgrep | CI |
| コンテナイメージスキャン | ECR スキャン, Trivy | ビルド時 |
| IAM ポリシーの検証 | IAM Access Analyzer | デプロイ前 |
シフトレフトの限界
シフトレフトは万能ではない。本番環境でしか発見できない問題 (パフォーマンス、スケーラビリティ) もある。シフトレフトとシフトライト (本番モニタリング) を組み合わせる。
シフトレフトを扱う関連書籍も多い。