DevOps・アジャイル開発 入門学習
CI/CD・IaC・SRE・GitOps・フィーチャーフラグ・DevSecOpsを体系的に学ぶ
CI/CDパイプライン
CI(継続的インテグレーション)は開発者が頻繁にコードをメインブランチにマージし、自動ビルド・自動テストで品質を維持する実践です。CD(継続的デリバリー)はCIを経たコードを任意のタイミングでリリース可能な状態に保ちます。継続的デプロイメント(Continuous Deployment)はさらに本番への自動デプロイを行います。
CI/CDパイプラインの構成要素:①ソース管理(Git)→②ビルド(コンパイル・依存解決)→③テスト(単体・結合・E2E)→④セキュリティスキャン(SAST/SCA)→⑤ステージング環境デプロイ→⑥本番デプロイ(ローリング/ブルーグリーン/カナリア)。代表ツールはGitHub Actions・GitLab CI・Jenkins・CircleCIです。
- ローリングアップデート:旧バージョンを段階的に新バージョンに置き換え・ダウンタイムなし
- ブルーグリーンデプロイ:新旧環境を並行運用してDNS切替・即時ロールバック可
- カナリアリリース:一部ユーザーに先行公開してリスクを段階的に拡大
- フィーチャーフラグ:コードはデプロイ済みで機能のON/OFFをフラグで制御
IaC(Infrastructure as Code)
IaCはインフラ構成をコードとして定義・管理し、手動作業を排除する実践です。宣言型(Declarative)は「あるべき状態」を定義し、ツールが差分を自動適用します(例:Terraform、AWS CloudFormation、Kubernetes YAML)。命令型(Imperative)は実行手順を記述します(例:Ansible Playbook、シェルスクリプト)。
TerraformはHCLで複数クラウドのインフラを定義する主要IaCツールです。`terraform plan`で変更差分を確認し、`terraform apply`で適用します。AnsibleはエージェントレスでSSH経由にPlaybookを実行し、サーバー設定・ソフトウェアインストールに使われます。IaCの効果として、環境の再現性確保・ドリフト防止・変更履歴のGit管理が得られます。
- Gitによるバージョン管理:インフラ変更のPRレビュー・監査証跡
- Immutable Infrastructure:変更の代わりに新しいイメージに置き換え
- ステート管理:Terraformのtfstateをリモートストレージ(S3等)で一元管理
- モジュール化:再利用可能なインフラ部品(VPC・EKSクラスタ等)のモジュール化
SRE(Site Reliability Engineering)
Googleが考案したSREは、ソフトウェアエンジニアリングの原則でIT運用の課題を解決するアプローチです。SLI(Service Level Indicator)はサービス品質の実測値(可用性・レイテンシ・エラーレートなど)、SLO(Service Level Objective)はSLIの目標値(例:可用性99.9%)、SLA(Service Level Agreement)はユーザーとの契約上の保証値です。
エラーバジェット(Error Budget)はSLOまでの許容誤差で、「残りのエラーバジェット内でリスクを取ってリリースできる」という考え方です。エラーバジェットを超えた場合はリリースを停止し、信頼性改善に注力します。Toil(トイル)は手動・反復的・自動化可能な作業を指し、SREはToilをコードで自動化することを目指します。
- カオスエンジニアリング:本番で意図的に障害を注入し回復力を検証
- インシデント管理:インシデント指揮官(Incident Commander)の設置
- ポストモーテム(事後検証):ブレームレスで根本原因分析・再発防止
- キャパシティプランニング:負荷予測に基づく事前のスケール準備
コンテナオーケストレーションとGitOps
GitOpsはGitリポジトリを「信頼できる唯一の情報源(Single Source of Truth)」として、インフラ・アプリの状態をGitで管理する運用モデルです。ArgoCDやFluxなどのGitOpsエージェントがGitリポジトリの変更を検知し、Kubernetesクラスタに自動同期します。手動のkubectlコマンドを排除し、全変更をGit PRとして管理することで監査証跡の確保とロールバックの容易化を実現します。
HelmはKubernetesのパッケージマネージャーで、Chart(テンプレート群)でアプリデプロイを定型化します。KustomizeはYAMLのオーバーレイで環境差分(開発/ステージング/本番)を管理します。OperatorはKubernetesの拡張機能で、ステートフルアプリ(DBクラスタ等)のライフサイクルをコードで管理します。
- ①開発者がGitにPR作成→②CIでテスト・セキュリティスキャン
- ③PRマージ→④GitOpsエージェントが差分を検知
- ⑤エージェントがクラスタに変更を自動適用
- ⑥ドリフト(手動変更)を検知して自動修正(Self-healing)
フィーチャーフラグとカナリアリリース
フィーチャーフラグ(Feature Flag/Feature Toggle)はコードをデプロイ済みにしながら、設定値でON/OFFを制御してリリースする手法です。特定ユーザーグループへの段階的公開(カナリアリリース)・テストユーザーへの先行公開・障害時の即時無効化(Kill Switch)が可能です。代表ツールはLaunchDarkly・Unleash・AWS AppConfigです。
A/Bテストはユーザーを複数グループに分け、異なるUIや機能の効果を統計的に測定します。フィーチャーフラグを活用することで、デプロイとリリースを分離し、Continuous Deploymentを安全に実践できます。またBlue-Greenデプロイはフラグなしで環境単位で切り替えますが、フィーチャーフラグは同一コードベースで機能単位の細かい制御が可能です。
- リリーストグル:新機能を段階的に有効化
- 実験トグル:A/Bテスト・統計的検証
- 運用トグル:パフォーマンス問題の緊急無効化(Kill Switch)
- 権限トグル:有料機能・ロール別機能の制御