DevOps (デブオプス)とは?仕組みやメリット、アジャイル開発の違いなどをわかりやすく解説

【入場無料】TD SYNNEX主催のIT展示会「Inspire 2024」10/24(木)東京国際フォーラムにて開催!

ソフトウェア開発のスピードアップへの期待が高まり続ける中、足かせとなっていた開発と運用部門との分断を解消し、迅速なリリースを実現する「DevOps(デブオプス)」が注目されています。その背景や仕組み、メリット等について、解説します。

DevOps(デブオプス)とは

DevOps(デブオプス)とは、ソフトウェアの開発担当と導入・運用担当が密接に協力する体制を構築し、ソフトウェアの導入や更新を迅速に進めることであり、「Development(開発)」と「Operations(運用)」の略語を組み合わせた造語です。

DevOps のルーツは、2009年6月、オライリー ベロシティ 09 カンファレンスで行われた、ジョン・オールスポーとポール・ハモンドによる、”10 Deploys a Day: Dev and Ops Cooperation at Flickr.“(「1 日 ten 回のデプロイ: Flickr での開発と運用の協力」と題した講演にさかのぼります。その講演にリモートで参加していたパトリック・デボイスが、2009年10月にDevOpsDaysというカンファレンスを開催したことから、本格的に広まり始めました。

開発・運用でDevOpsが重要な理由

“10 Deploys a Day: Dev and Ops Cooperation at Flickr.”で、取り上げられた通り、DevOps以前のシステムでは、開発(Dev)と運用(Ops)は分断されており、また、開発においても、変化するビジネスの要求に対応するためのシステムのデリバリースピードをアップさせることが困難な状況がありました。

開発の仕事は新しい機能を開発することであり、運用の仕事は、システムを安定的に稼働させることです。安定に最も効果的な方法は、変化を与えないことです。そのため、稼働しているシステムに新しい機能を追加することは、安定稼働に対するリスクとなります。実際、開発された新しい機能を実装することにより、トラブルが発生するなど、システムの安定性を揺るがす状況が多く発生し、運用に支障をきたしていました。そのため、開発と運用部門は、対立する関係にありました。

開発においても、従来、開発はウォーターフォール型で行われていました。現在においても、最も多く採用されている開発の進め方です。この方法は、各段階を一つずつ順番に終わらせ、次の工程に進んでいくため、納期や品質を確保する上で、最も効果的です。一方、新たな要望が生じても、仕様変更を受け入れることができないため、新たな要望への対応が、課題となります。受け入れる場合には、工程全体を延伸させるなどの対応が必要です。

これらの問題解決がシステム開発においての重要課題でした。この課題解決方法として生まれたものが、DevOpsです。

DX白書2023によると、ビジネスニーズに対応するために、ITシステムにはどのような機能が重要だと考えているのかを尋ねた結果、日本で「重要である」と回答した割合が高い項目は「変化に応じ迅速かつ安全にITシステムを更新できる」が39.4%(2021年度調査30.3%)と「必要で適切な情報を必要なタイミングで取り出せる」が39.6%(2021年度調査34.5%)でした。変化への対応を求める様子が、表れています。

DevOpsのツールと文化

DevOps以前は、開発と運用の間に、仕事の流れを妨げる壁が存在し、人の判断や漏れにより、デリバリーのための一連の作業が円滑に行われていませんでした。DevOpsにより、開発と運用がつながり、デリバリースピードを高めることが可能になりました。DevOpsは、人の判断ミスや漏れを防止する仕組みと文化の醸成により、開発と運用をつなげ、デリバリースピードを向上させます。

開発と運用をつなぐツール

DevOpsは、開発と運用を別々の仕事として行うのではなく、共通のツールを活用し、一連の仕事としてつなげます。

  1. インフラの自動化
  2. 共有バージョン管理
  3. ワンステップビルド&デプロイ(One step build and deploy)
  4. フィーチャーフラグ
  5. メトリクスの共有
  6. チャットとボット

1. インフラの自動化

機能の追加やデータ量の増加により、サーバの増強が必要になります。従来、インフラの増強は、手動で行われていましたが、これを、Infrastructure as Code(コードとしてのインフラ)により、自動化します。コードベースで記述しておくことにより、実行するだけで自動的にインフラを構築できます。

代表的なツール:Ansible、Terraform、AWS CloudFormation

2. 共有バージョン管理

ソフトウェアを開発し、運用する一連の作業を改善するためには、ソースコードやテストスクリプト、デプロイスクリプト、インフラの構成情報、アプリケーションの構成情報、これらが依存するライブラリやパッケージのバージョンを管理することが必要不可欠です。これをシステム化することにより、開発と運用のバージョン管理を共有することができます。

代表的なツール:Git、GitHub、GitLab

3. ワンステップビルド&デプロイ(One step build and deploy)

開発から運用へのステップには、以下のようなプロセスが必要です。
ⅰ)開発したソースコードをコミットします
ⅱ)コミットされたソースコードをビルドします
ⅲ)ビルドされたコードをテストします
ⅳ)テストが完了したコードを保管します
ⅴ)デプロイし運用を開始します
以前は、これらをすべて手動で行っていました。これらすべてを、コミットをトリガとし、ワンステップでデプロイします。

代表的なツール:Jenkins、CircleCI

4. フィーチャーフラグ

ある機能を有効にしたり、あるいは無効化したりする場合、従来は、それらをコードで表し、必要なコード変更を施し、デプロイする必要がありました。これにより、コーディングやデプロイ作業が必要となるだけではなく、コンフリクトするなどの二次的な弊害も多く発生していました。これをコード変更することなく、フラグを用いて機能を有効/無効化します。

代表的なツール:Unleash、Flagsmith

5. メトリクスの共有

メトリクスは、システムのパフォーマンスに関わるデータです。定期的にシステムの状態、パフォーマンスに関する情報です。具体的には、CPUやメモリ、ディスクの使用率や、データへのアクセス数や、ユーザからのシステムへのアクセス数などのことです。これらは、グルーピングしたり、横断的にまとめたりする必要がありますが、これをダッシュボード化し、開発と運用が同じ情報を共有します。

代表的なツール:AWS cloudwatch、Datadog

6. チャットとボット

ボットとは、タスクや処理を自動化するプログラムです。チャットツールに自動的にビルドやデプロイのログ、アラート内容を投稿する仕組みを作ることで、開発と運用の情報をお互いに共有します。

代表的なツール:ChatOps、OpsGenie、VictorOps

こうしたツールにより、これまで手動で行っていた膨大な作業を削減でき、ミスを防止することができます。また、発生していたコンフリクトなどを削減することができるため、品質の向上に貢献します。

開発と運用をつなぐ文化

こうしたツールを開発部門と運用部門とが共通に活用するためには、組織を横断し、シームレスに業務を遂行できる必要があります。DevOpsは次の組織文化を提唱します。

  1. リスペクト
  2. 信頼
  3. 失敗への健全な態度
  4. 非難しない

1. リスペクト

一緒に働く相手のことを心から思いやる、相手を一人の人間として扱い、能力や功績を評価します。

2. 信頼

自分以外の人は優秀で、正しいことをすると信じます。(相手を)信じて仕事を任せます

3. 失敗への健全な態度

新しいことに挑戦すれば自ずと失敗は起こってしまうものであり、相手のミスだと責めたりしません。

4. 非難しない

相手に非があると断じて言葉で責めるのではなく、次に同じ問題が起こらないように建設的な批判を行います。
こうした文化が、組織の垣根を超え、また、ひとり一人のパフォーマンスを引き出します。

DevOpsライフサイクルとは

DevOpsは、計画・開発・デリバリー・運用という計画から運用までのシステムのライフサイクルを、一体化しつなげます。これがDevOpsライフサイクルです。

  1. 計画
  2. 開発
  3. デリバリー
  4. 運用

1. 計画

オペレイトを通じて、システムをモニタリングし、次の開発テーマをプランニングします。

2. 開発

プランニングされた開発テーマを、コード化し、ビルド、テストを経てリリースします。

3. デリバリー

リリースされたコードを本番環境へデプロイします。

4. 運用

デプロイされた本番環境をオペレイトします。オペレイトを通じて、モニタリングし、次の計画へとつなげます。

このように、DevOpsは、コード→ビルド→テスト→リリース→デプロイ→オペレイト→モニタリング→プランニング→コード→ビルド・・・という一連のサイクルをつなげ回すものです。
このサイクルのうち、「コード→ビルド→インテグレイト→テスト」を継続的インテグレーション(CI)と言い、「リリース→デプロイ」を、継続的デプロイメント(CD)と言います。

運用(オペレイト)から計画(プランニング)をつなぐことで、開発と運用が一体化した計画的かつ安定稼働可能なライフサイクルが実現させることができます。CDを継続的デリバリーと言う場合もあります。継続的デリバリーは、本番環境にデプロイするのではなく、リリース可能な状態でリポジトリに準備します。継続的デリバリーでは、テスト環境での確認を経て、本番環境への更新が手動で行われます。継続的デプロイでは、自動的に本番環境にデプロイします。

アジャイル開発との違い

アジャイル(agile)とは「敏捷」「素早い」といった意味の言葉で、コーディングからリリースを素早く短いサイクルで行うソフトウェア開発手法のことです。

ソフトウェア開発では「計画」→「設計」→「開発」→「テスト」といった開発工程を経てリリースされます。一般的には、ウォーターフォール型の開発手法が取られていますが、仕様変更に柔軟に対応する方法が必要とされ、アジャイルが誕生しました。開発工程を2,3週間ほどの短期間で継続的に繰り返すことにより、変化を受け入れながら、少しずつ新しい機能を追加していく開発手法です。

アジャイルの考え方は「アジャイルソフトウェア開発宣言」にて2001年に発表されました。この開発宣言には、基本的な考え方や12の原則が定義されています。それは顧客満足を最優先とし、またコミュニケーションをとって開発を進めることを原則としています。

開発スピードを上げることを目的とした方法論であることや、基本的な考え方やコミュニケーションを重視、提唱していることなど、DevOpsとアジャイル開発には、共通点があります。DevOpsを広めたパトリック・デボイス氏は、最初のDevOpsDaysカンファレンスを開催する前年に、アジャイルシステム管理グループを結成しており、それをDevOpsに拡張し広めました。DevOpsは、開発に留まらず、運用を含めてサイクル化した概念です。開発手法としては、アジャイル型の開発手法が適しており、その効果を発揮します。

DevOpsのメリット

DevOpsのメリットとしては、次のメリットをあげることができます。

ビジネスとしてのメリット

  • システムによってビジネスの成功に貢献できます
  • ビジネスの成功のための貢献を確実・迅速にユーザに届けることができます
  • ユーザの求める貢献の変化に迅速・柔軟に対応できます

システムとしてのメリット

  • 開発スピードの向上
  • 生産性の向上
  • 信頼性の向上
  • 拡張性の向上

DevOpsの目的は、変化の絶えないビジネスをシステムの側面から成功に導くことです。そのためには、開発面においては、生産性を向上し、開発のスピードを加速することであり、運用面においては、信頼性と拡張性を維持することです。DevOpsを導入することは、それらの利益を享受することを意味します。

DevOpsの運用ポイント

DevOpsとアジャイルのスキル開発を目的としたオープンなグローバルコミュニティであるDevOps Agile Skills Association (DASA)は、「DevOps原則」として、以下の原則を掲げています。

私たちにとって、DevOpsは事象ではありません。製品、標準、仕様、フレームワーク、または役職でもありません。 DevOpsは、ハイパフォーマンスなIT組織を構築するための経験、アイデア、文化です。

  1. 顧客中心の活動: 行動する勇気と革新
  2. 目標を意識した創造: 製品とサービスの考え方。エンジニアリング・マインドセット。コラボレーション
  3. エンド・ツー・エンドの責任: あなたの責任を果たし、重大な成果を生むコンセプト。パフォーマンスのサポート
  4. 機能横断的な自律型チーム: T字型のプロファイル。補完スキル
  5. 継続的改善: 痛いなら、もっとやってみる。フェイルファスト(早く失敗する。)
  6. 自動化できるものはすべて自動化: 品質を高め、フローを最大化する

DevOpsを成功させる最大のポイントは、これらの原則を組織運用に取り入れることにより、次に示す注意点を組織として克服することにあります。

DevOpsの注意点

DevOpsは、先述の通り、開発と運用をシームレスにつなぎ、それを回し続けるために、必要なものとして、ツールと文化を提唱しています。それは、裏を返せば、こうした文化が醸成していないと、このような仕事の進め方自体を受け入れることが困難であり、受け入れたとしてもツールを使いこなすスキルが必要であり、従来とは異なるこうした仕事の進め方をマネジメントすることが不可欠である、とも言えます。従って組織として、取り組む上で、次の点に注意が必要となります。

  • DevOpsの文化が組織に浸透しているか

DevOpsは、従来型の縦割りで仕事や情報が分断された環境から、風通しのよいオープンな環境へと変わることを求めます。

  • DevOpsのツールを使いこなせるスキルを有しているか

DevOpsのツールは、従来の一部の機能ごとの自動化といった枠を超えて、開発から運用までの全体としての生産性や求める品質を高めるためのものです。このような新しい考え方やツールの活用方法を十分理解する必要があります。

  • 変化を受け入れるマネジメントが理解されているか

仕事の仕方そのものを変えなければ、DevOpsを実現することはできません。DevOpsが目指す成果にフォーカスしたマネジメントが求められます。

システム開発に限らず、組織として初めての取り組みには、リスクや学習コストが伴います。初めて、DevOpsに取り組む場合も同じです。慣れていないDevOpsのツールの導入や活用、アジャイル開発やそのマネジメントなどを行う際には、何らかの反省すべき点、今後改善すべき点も生じます。失敗を責めたりせず、避難するのではなく、改善に向けて議論することが重要になります。DevOpsを実現するためには、ツールだけではなく、DevOpsの文化を浸透させることが非常に大切です。

DevOpsの実現におすすめのツール

「GitLab」 は、DevOpsを実現するプラットフォームとして、計画段階から本番まで すべてのライフサイクルで あらゆるメンバーとのコラボレーションを可能にします。
 
GitLabについてはこちらをご覧ください。

まとめ

DevOpsの目的は、ソフトウェア開発のスピードアップです。成功するポイントは、ツールを使いこなすエンジニアであり、それを受け入れる組織と考え方の理解です。信頼し合えるメンバーによる活動と、それを支援できる組織文化がDevOpsを成功に導く最大の秘訣です。

[筆者プロフィール]
峯 英一郎
ITコンサルタント。
大手SIer(約18年勤務)を経て、ソフトウェア会社の経営に従事。お客さまの価値最大化につながる新しい受託開発のあるべき姿を追求し続けている。

製品・サービスについてのお問合せ

情報収集中の方へ

導入事例やソリューションをまとめた資料をご提供しております。

資料ダウンロード
導入をご検討中の方へ

折り返し詳細のご案内を差し上げます。お問い合わせお待ちしております。

お問い合わせ