DevOps・アジャイル開発 入門学習

TOP › システム区分 › 入門学習ガイド › Unit 5 DevOps・アジャイル開発
システム区分 Unit 5

DevOps・アジャイル開発 入門学習

CI/CD・IaC・SRE・GitOps・フィーチャーフラグ・DevSecOpsを体系的に学ぶ

📚 5章構成✏️ 確認テスト 3問⏱ 目安25分

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管理が得られます。

IaCのベストプラクティス
  • 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をコードで自動化することを目指します。

SREの主要プラクティス
  • カオスエンジニアリング:本番で意図的に障害を注入し回復力を検証
  • インシデント管理:インシデント指揮官(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クラスタ等)のライフサイクルをコードで管理します。

GitOpsのワークフロー
  • ①開発者が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)
  • 権限トグル:有料機能・ロール別機能の制御
✏️ 確認テスト(全3問)
問 1
CI(継続的インテグレーション)とCD(継続的デリバリー)の違いとして最も適切な説明はどれか。
ア. CIはコードのリリースを行い、CDはビルドとテストを自動化する
CIとCDの役割が逆です。CIが自動ビルド・テスト、CDがリリース可能状態の維持を担います。
イ. CIは開発者が頻繁なマージ・自動ビルド・テストで品質を維持し、CDはいつでもリリース可能な状態を維持する
正解です。CIはマージ頻度を上げて早期に問題を検出する実践です。CDはCIを経たコードを常にリリース可能状態に保ちます。さらに自動本番デプロイまで行う場合を「Continuous Deployment(継続的デプロイメント)」と区別します。
ウ. CIは本番環境への自動デプロイを行い、CDはステージング環境でのテストを管理する
CIは本番デプロイではなく、ビルド・テストの自動化です。
エ. CIとCDは同じ概念を指す同義語であり、CI/CDとまとめて表記するのは誤りである
CIとCDは密接に関連しますが、担う役割が異なる独立した概念です。
選択肢をクリックすると正誤と解説が表示されます
問 2
SREにおける「エラーバジェット(Error Budget)」の説明として最も適切なものはどれか。
ア. 1回のインシデントで許容できるコスト上限(障害対応コストの予算)
エラーバジェットはコスト予算ではなく、SLO達成のための許容エラー量です。
イ. SLOとSLIの差分で定義される「許容できる信頼性の余裕」であり、リリースの可否判断基準となる
正解です。例えばSLO99.9%の場合、年間8.7時間のダウンタイムがエラーバジェットです。バジェットが残っていればリリースを進め、使い切った場合は信頼性改善に注力します。
ウ. テストコードのカバレッジ率と実際のバグ発生率の差異を数値化したもの
テストカバレッジとバグ率の差異はエラーバジェットとは異なる概念です。
エ. 1スプリント内で許容される未完了タスクの割合(スクラムの速度指標)
これはスクラムの速度(Velocity)に関する概念であり、SREのエラーバジェットとは無関係です。
選択肢をクリックすると正誤と解説が表示されます
問 3
IaC(Infrastructure as Code)における「宣言型(Declarative)」アプローチの説明として正しいものはどれか。
ア. インフラの変更手順をステップごとに記述し、ツールがその順序通りに実行する方式
これは命令型(Imperative)アプローチの説明です。Ansibleなどが該当します。
イ. インフラの「あるべき状態」を定義し、ツールが現状との差分を検知して自動的に適用する方式
正解です。Terraformはplan(差分確認)→apply(適用)で宣言した状態を実現します。べき等性(何度実行しても同じ結果)が保証されるため、ドリフト修正にも利用できます。
ウ. 複数のクラウドプロバイダに対して異なるAPIを統一的に呼び出すためのアダプタ層
マルチクラウドAPIの抽象化はIaCの一側面ですが、宣言型の定義ではありません。
エ. ソースコードを直接サーバーにコピーしてデプロイする簡易デプロイメント方式
FTPデプロイなどは現代のIaCの概念とは関係ありません。
選択肢をクリックすると正誤と解説が表示されます

学習完了!すべてのユニットを修了しました。

← 学習ガイドトップに戻る