DevOpsとはどういう意味なのでしょうか?
近年のIT業界では「DevOps」という言葉がよく聞かれるようになりましたが、DevOpsについて詳しく知らない方も多いのではないでしょうか。
実はDevOpsに決まりきった定義が存在せず、各ベンダーでの定義がすべて一致しているとは言えないのが現状です。
しかし、DevOpsとして重要な、組織の在り方やマインドなど共通して語られている部分も多くあります。
今回はDevOpsとは何なのかわかりやすく解説するとともに、DevOpsと混同しやすいアジャイルとの違いや関係についても紹介します。
DevOpsをわかりやすく解説
DevOpsとは、Development(開発)とOperations(運用)をミックスした言葉で、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくことを指します。
新たなシステムを開発する開発チームと既存のシステムを継続的に稼働させる運用チームは、場合によっては相反する価値観をもつ可能性があります。
DevOpsは、さまざまなツールとマインドを取り入れることで、開発チームと運用チームの問題点と課題を解決していくことを目指します。
近年のIT分野ではスピードが重視され、ITサービスの開発や既存システムの改善をより迅速に実行する事が求められます。DevOpsの目標は、開発チームと運用チームが商品やサービスの開発・改善にかかる時間を短縮して、ビジネスニーズに応えることです。
アジャイルとの違いや関係
DevOpsを語るうえでよく出てくる考え方にアジャイルがあります。アジャイルとは近年のIT開発において積極的に採用されている手法ひとつで、アジャイルを有効に実現するために必要なのがDevOpsになります。
アジャイル(Agile)は英語で「素早い、機敏な」という意味で使われます。システム開発を小さな単位で捉え、それぞれ実装、テスト、運用への連携を行う開発手法を「アジャイル開発」といいます。
アジャイル開発は、小さな単位で作業をすすめることで、システム全体の開発に費やす時間を短縮化することができます。
アジャイル開発が登場する以前のITサービスの開発では、開発をひとつの大きなまとまりとして捉えて、規格、要件定義、設計、実装、テスト、リリース、運用といった開発工程を順番に行い、前の工程が終了したら次の工程に移る「ウォーターフォール」といわれる手法を採用するケースが多くみられました。
しかし、短期間での機能追加や改善が必要な近年のWebサービス開発においては、時間がかかり、変更が困難なウォーターフォールでは、対応が困難になってきました。そこで、登場してきた開発手法が「アジャイル開発」です。
アジャイル開発を採用することで、ウォーターフォールでは対応が困難であった頻繁な機能追加や継続的に必要となるアップデートが可能となります。
アジャイル開発でサービスの成功を実現するためには、開発チームと運用チームの親密な協調と連携(DevOps)が重要になってきます。
アジャイル開発については以下の記事で詳しく解説しています。
メリット
DevOpsによって、開発チームと運用チームが親密に協調と連携をすることで、スピーディーにビジネスニーズに応えていくことができます。DevOpsによって開発チームと運用チームを隔てる障壁を無くすことで、無駄な労力を省き開発速度を上げ、変更に対して柔軟に対応することができます。
スピードの向上
DevOpsのメリットのひとつにスピードの向上があります。近年、ITの急速な進化やグローバル化によって社会全体がスピードを増しています。ビジネスにおいてもスピードは、企業が勝ち残っていくための最重要課題となっています。
IT分野のスピードアップは、現代では企業の進退を左右する重要なポイントです。多くの企業がサービスの開発や既存サービスのアップデートのスピードを加速させる課題に取り組んでいます。
アジャイル開発を採用し、DevOpsを推進することは、システム開発のスピードアップには欠かせない取組になっています。
生産性の向上
開発チームと運用チームの連携がとれていないと、開発チームがおこなった変更内容の連携漏れや、ビジネスに支障をきたす予期せぬシステムエラーがヒューマンミスから発生する可能餌性が高まります。また、開発チームと運用チームの相互理解が不足しているため開発チームの提案に対する運用チームの拒否など、無駄な労力や時間が費やさせるケースが発生します。
システムエラーや相互の調整などの時間が発生することで、本来業務に必要な時間以外に人材が関わる事になり、生産性の低下を招きます。DevOpsによって、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくことで、連携漏れやニューマンミスを防止し、本来業務に人材を充てることが可能となります。その結果生産性の向上につながります。
信頼性の向上
DevOpsによって、開発チームと運用チームの信頼性が向上します。開発チームと運用チームは、サービスの開発や改善のためのアップロードをスピーディに実行してビジネスニーズに応えるという共通の目的を持つことができます。DevOpsによって信頼性が高まることで、開発チームと運用チームはお互いの立場や視点を理解することができ、相互の受入体制が強化されます。
開発チームと運用チームが相手の依頼を待つという姿勢から、自立的に動くようになり、ビジネスニーズの目的達成に貢献します。
また、アジャイル開発で小さな単位で開発をすすめることで、早期にシステムの不具合を発見する確率が高まり、対応にかかる時間が短縮できることから、製品やサービスの信頼性を高めることにつながります。
DevOpsの起源
DevOpsの必要性はアジャイル開発に採用がすすむにつれて、課題が出てきたことが発端になります。アジャイル開発では開発と運用が密接に協調し連携することが必要なので、DevOpsが注目され始めた訳です。
アジャイル以前のIT分野では、開発チームと運用チームの連携は決して良いものとはいえませんでした。アジャイル開発が浸透するとともに開発と運用の課題が取り上げられるようになります。
アジャイル会議
具体的には2008年に行われたアジャイル会議2008において、開発チームと運用チームの現状の問題点と解決策が提案されています。IT分野では、開発チームと運用チームが密に情報を共有するために、コード化された構成情報を同じソフトウェア管理システムによって見える化することなどが必要なことが言及されました。
アジャイル会議は2009年にも開催され、2008年と2009年のアジャイル会議の問題提起と解決策の提案によって、開発と運用が密接に協調し連携するDevOpsの必要性が高まりました。
DevOpsの芽生え
DevOpsの考え方が芽生えたのは、2009年に開催された「Velocity」というカンファレンスでFlickr(ルディコープ社、現Yahoo!社)のエンジニアが行ったプレゼンテーション「10+ Deploys per Day:Dev and Ops Cooperation at Flickr」であるといわれています。
プレゼンテーションでは、当時の伝統的な組織では開発チームと運用チームは、対立関係にあることを指摘しました。開発チームは、ビジネスのためにITサービスに変化を加えることが仕事であり、運用チームは安定的に稼働させることが仕事なので変化を求めません。開発と運用はお互いに相反する立場であり、業務において、負のループが生まれる可能性が高いということです。
開発と運用の負のループが高まることによって、サービスに予期していなかった事故が起きたり、開発チームがおこなった変更内容の連携漏れや、開発チームの提案に対する運用チームの拒否などが起こります。
プレゼンテーションでは、開発と運用における現状の問題点を踏まえたうえで、これからの時代の変化に対応するためには、開発チームによる変化が必要であるとしています。そして、ビジネスを成功させるという点において、運用チームも目的は同じであり、開発チームと運用チームは、密接に協調し連携することが不可欠であることを述べています。
また、開発チームと運用チームが、密接に協調し連携するためには、変化に対応するためのツールとして、インフラの自動化、バージョン管理の共有、ワンステップのビルドとデプロイ、アプリケーション機能の有効・無効を設定ファイルで管理、メトリクスの共有、IPCやインスタントメッセンジャーのbotを必要としています。
さらに、変化に対応するための文化として、尊重、信頼、失敗に対する前向きな姿勢、非難をしないことをあげています。
DevOpsという言葉の誕生
DevOpsの考え方の必要性は注目されていましたが、DevOpsという言葉は、2009年ベルギーで開催された「DevOpsDays Ghent 2009」において、ITコンサルタントPatrick Debois氏によって使われたのが起源といわれています。
DevOpsのプロセス
DevOpsは、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくことであり、一時的に取組を実施して完了とするものではなく継続的に改善を継続し続ける取組です。
ビジネスにおいて、継続的な改善を実行していく手法にPlan(計画)、Do(実行)、Check(評価)、Act(改善)を回していくPDCAサイクルがありますが、DevOpsにおいても、全体のプロセスにPDCAサイクルを活用していく必要があります。
また、継続的インテグレーションなどの個々のプロセスにおいても、PDCAを採用してサービスを計画的に改善していきます。
DevOpsのプロセスは、プラン(PLAN)、ビルド(BUILD)、継続的インテグレーション、デプロイ (DEPLOY)、オペレーション(OPERATE)、継続的なフィードバックへの対応といった6つのプロセスで回していきます。
プラン(PLAN)
プラン(PLAN)では、おもにアジャイル開発の手法を活用した管理しやすい小さなタスクに分けて計画を立てます。
ビルド(BUILD)
ビルド(BUILD)では、プラン(PLAN)をもとに開発工程を進めていきます。
継続的インテグレーション(CONTINUOUS INTEGRATION)
継続的インテグレーションとは、プログラムのビルド・試験から結果のフィードバックを継続的に実行するプロセスで、PDCAサイクルを採用して実行されます。具体的には、コードを1日に数回ビルド・テストを実施して、不具合があった場合即座に対応していきます。
具体的にはエンジニアが自分で実行したコード変更をマージして、自動化されたビルド・テストを実行します。継続的インテグレーションによって不具合を早期に発見して対処をしていくことで、プログラムの品質を高めながら、開発にかかる時間を短縮することが可能となります。
継続的インテグレーションが採用され始める前のプロセスでは、エンジニアが頻繁にマージすることなく、長期間にわたり単独で作業を行い、作業が完了してはじめて、変更点をマージしていました。
そのため、開発作業に時間がかかり、不具合が発見されないままになってしまっているケースがありました。継続的インテグレーションによって、そういったリスクを取り除くことができるわけです。
デプロイ(DEPLOY)
デプロイ(DEPLOY)では、開発した機能やサービスが本番の運用環境で使えるように配置します。
オペレーション(OPERATE)
オペレーション(OPERATE)では、本番環境でプログラムを監視し、トラブルシーティングを行います。
継続的フィードバック(CONTINUOUS FEEDBACK)
DevOpsは、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくことであり、一時的に取組を実施して完了とするものではなく継続的に改善を継続し続ける取組です。
そのため、DevOpsのプロセスでは、継続的な改善が必要です。改善のためにはデプロイ後のモニタリングデータやユーザーからの評価や要望などのフィードバックを継続的にキャッチして、改善点を見つけ出すことが重要です。改善点が見つかった場合は、プラン(PLAN)をたて、DevOpsのプロセスを回して、改善を継続していきます。
DevOpsは「マインド」と「ツール」が鍵
DevOpsの成功には開発チームと運用チームが親密に協調と連携を行っていくためのマインドと実現するためのツールが必要です。この章ではDevOpsにとって重要なマインドとツールをそれぞれについて解説します。
重要なマインド
前述のDevOpsの起源の章に記載したように、DevOpsの考え方が芽生えた、2009年に開催された「Velocity」というカンファレンスにおいて、開発チームと運用チームが、密接に協調し連携するためには変化に対応するための文化として、尊重、信頼、失敗に対する前向きな姿勢、非難をしないことをあげられました。
原則的に、開発チームは、ビジネスのためにITサービスに変化を加えることが仕事であり、運用チームは安定的に稼働させることが仕事なので変化を求めません。しかし、アジャイル開発のもとでDevOpsを成功させ、作業のスピードアップと生産性を向上させるためには、マインドを育て組織風土を作り上げることが重要です。ビジネスを成功に導くためにはIT分野の成功が必要であり、マインドは基盤としてもっとも重要なポイントになります。DevOps成功には、以下の4つのマインドが鍵となります。
尊重する(Respect)
メンバー同士はお互いに尊重しあい、スキルや経験を評価する
信頼する(Trust)
メンバー同士はお互いに信頼しあい、協調して仕事を行う
失敗に対して健全な態度をとる(Healthy attitude about failure)
メンバーは、失敗は起こることであるという認識のもと、健全な態度をとる
非難しない(Avoiding Blame)
課題が見つかった場合、改善することが重要であり、非難はしない
便利なツール
DevOpsを業務に活かして実務を成功させるためには、ツールが重要です。ここではDevOpsのプロセスを実行する上で便利なツールをいくつか紹介します。
仮想化ツール
システム開発を小さな単位で捉え、それぞれで実装、テスト、運用への連携を行うアジャイル開発で行われるDevOpsでは、実行環境の仮想化を行うツールが必用です。仮想化ツールとして、Dockerなどがあります。
インフラ管理ツール
システム開発に必要なサーバなどのインフラ管理を行い、自動化するインフラ管理ツールも重要です。インフラ管理ツールとして、AnsibleやChefなどがあります。
CI/CDツール
CI(ContinuousIntegration)とは、継続的インテグレーションのことです。CD(ContinuousDelivery)とは、継続的デリバリーのことで、CI(継続的インテグレーション)を繰り返し、デプロイが実行されることをさします。CIツールによって自動的に継続的インテグレーションを実行することができ、CDツールによって、担当者が行った変更などが、自動的に本番環境でリリース可能な状態で準備されることになります。CI/CDツールとしてJenkinsやCircleCIなどがあります。
モニターツール
DevOpsでの開発が完了し開発物が運用のプロセスに入った後には、サーバやアプリケーションのパフォーマンスを監視するモニターツールが必要です。モニターツールにはZabbixやNagiosなどがあります。
テスト自動化ツール
アジャイル開発で行われるDevOpsでは、テストの頻度が高くテスト自動化ツールが必要です。テスト自動化ツールにはSeleniumなどがあります。
バージョン管理ツール
アジャイル開発で行われるDevOpsでは、変更やバージョンアップが頻繁に実行されますので、バージョン管理ツールが必要です。バージョン管理ツールはGitを利用し、リポジトリとしてGitHubなどがあります。
コミュニケーションツール
開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくDevOpsにはチャットなどのコミュニケーションツールが必要です。コミュニケーションツールにはSlackなどがあります。
タスク管理ツール
アジャイル開発で行われるDevOpsでは、タスクが多く、メンバーがタスク管理を行うためのタスク管理ツールが必要です。タスク管理ツールとしてBacklogやRedmineなどがあります。
DevOpsの注意点
DevOpsを行う上での注意点は以下の3点になります。
DevOpsに決まった形はない
DevOpsは、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくことですので、企業の状況や開発内容によってDevOpsの取組方法は変わってきます。形にとらわれず柔軟に対応していくことが必要です。
ツールの導入がDevOpsではない
DevOpsでは、実務上、数多くのツールを活用していきますが、基盤になるのはマインドです。
また、状況によっては最新のツールの導入が必ずしも正解ではない場合もあります。
経営層の理解・協力も必要
DevOpsは、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくことであり、目的はビジネスニーズに応え、ビジネスを成功させることです。また、ツールの導入には費用もかかります。そのため、DevOpsの実現には経営層の理解・協力が必要となります。
DevOpsエンジニアとは?
IT分野の成功は、企業経営の成功を左右するといわれています。DevOpsは、企業運営に欠かせない取組になっているといえるでしょう。そのため、DevOpsのプロセス全体に関わり、専門的に業務を行うプロフェッショナルな人材が必要となっています。DevOpsを専門的に行うエンジニアはDevOpsエンジニアと呼ばれ、IT分野において人材ニーズが高まっています。
まとめ
DevOpsはアジャイル開発が必要となっているIT分野において重要な取組になっています。DevOpsにおいて、開発チームと運用チームが、お互い積極的に親密に連携しながら業務を進めていくためには、マインドが基盤となり、さまざまなツールをつかって実務が実行されています。DevOpsが成功することで、開発にかかる時間が短縮され、生産性の向上や信頼性の向上につながります。DevOpsのプロフェッショナルであるDevOpsエンジニアの人材ニーズも高まっています。DevOpsの成功はビジネスの成功に結びつきますので、注意点に留意して積極的に取り組みましょう。