システムやアプリケーションなどの開発は世界で盛んに行われています。私たちの身の回りにあるパソコンやスマートフォン、さらには社会インフラの根幹を支えるさまざまなシステムにとって開発は欠かせない工程です。新たなサービスの誕生やアップデート、セキュリティの見直しを実現するために、多くのエンジニアが力を注いでいます。
そうしたシステム開発のひとつの手法として、DevOpsが注目を集めているのをご存じでしょうか。DevOpsは優れた開発手法として企業から支持されており、実際に多くの現場で採用されています。
この記事では「DevOpsとは何か?」という基本的な事柄やアジャイルとの違い、導入メリットなどを解説します。DevOpsを導入する具体的なポイントについてもお伝えするので、ぜひ参考にしてください。
DevOpsとは
DevOpsは開発部門と運用部門が連携して協力する開発手法を指す言葉です。開発を意味する「Development」と、運用を意味する「Operation」を組み合わせた略語で、「デブオプス」と読みます。
システム開発において、運用部門と開発部門がそれぞれの立場の違いから対立し、うまくいかないケースはこれまで珍しくありませんでした。運用部門はテストに十分な時間を確保してから次工程に進めたいと考えています。一方、開発部門はコードを素早く完成させて、システムを効率良くデプロイしたいと考えるため、時には衝突が生じてしまうのです。DevOpsはそうした立場の異なる部門の対立の解消を目指して生まれた仕組みです。
それでは、このDevOpsの重要性やアジャイルとの違いについて整理していきましょう。
DevOpsの重要性
運用部門と開発部門は、前者は安定運用を重視してシステム変更を嫌い、後者は新しい機能を開発して迅速に展開したいといった立場の違いからしばしば対立してきました。しかし、この対立はシステムの価値を向上させる妨げになります。ソフトウェアがビジネスの不可欠な構成要素ともなっている今日では、タイムリーなリリースが必要です。システム価値の向上はそのままビジネスにおける顧客価値の向上につながっているといっても過言ではありません。
そのため、システム価値の向上の妨げとなる運用部門と開発部門の対立を克服し、両者の連携の強化が必要なのです。DevOpsの重要性は、この運用部門と開発部門の対立の克服と連携の強化にあります。
DevOpsとアジャイルの違い
DevOpsがリリースの迅速さを重視している点は、アジャイルのアプローチを思い起こさせます。しかし、これら2つの間にははっきり違いがあります。
アジャイルとは小規模で素早い開発とリリースの繰り返しにより、システムの価値を継続的に向上させる開発手法です。あくまでソフトウェアを開発する手法でしかありません。それに対し、DevOpsはソフトウェアの展開まで視野に入れ、アジャイルの原則を拡大適用する方法です。アジャイルではソフトウェア開発の改善がもっぱら問題でしたが、DevOpsはアジャイルの原則をリリースにまで拡大して、ソフトウェア開発ライフサイクル全体にアジャイルの原則と哲学を適用しています。
アジャイルにより、ソフトウェア開発のスピードと生産性は大きく向上しました。そうした動きに対して、ソフトウェア開発のライフサイクルに対応していくための総合的なアプローチとしてDevOpsは登場しました。
アジャイルについては「アジャイル開発とは?特徴やウォーターフォールとの違いなど徹底解説」の記事を、アジャイル開発とウォーターフォール開発の違いについては「アジャイル開発とウォーターフォール開発の違いとは?失敗しない開発手法を決定するために、それぞれの特徴やメリットについて理解しよう」をご覧ください。
DevOpsのライフサイクル
DevOpsは、「プラン」「コード」「ビルド」「テスト」「デプロイ」「運用」「モニター」という7つのステップで構成されるライフサイクルを持っています。
- プラン: プロジェクト全体のタスク管理や開発の要件を定義する。
- コード: 開発要件に沿って、プログラマーがコードの作成を行う。
- ビルド: ソースコードから実際に動作させるアプリケーションを作成する。
- テスト: ビルドしたアプリケーションにバグなどの不具合がないかをテストする。
- デプロイ: アプリケーションを本番環境に配備する。
- 運用: 継続的にサービスを提供するための保守管理作業を行う。
- モニター: 運用から得られた情報や、ユーザーからの評価、要望などを確認する。
これらのステップを順に、かつ継続的に回していくことが、DevOpsの実践となります。
DevOpsを導入するメリット
DevOpsを導入すると開発現場はさまざまな恩恵を受けられます。DevOpsを導入するメリットは色々と挙げられますが、ここでは代表的な5つのポイントについて解説します。
開発スピードの向上
DevOpsの採用によって運用部門と開発部門の連携が改善すると、開発がスピーディーに進められるようになります。これにより、変化する市場の中で顧客の要求に迅速に対応できるようになります。
生産性の向上
開発部門と運用部門の連携が不十分で対立している状況では、リリースの手続きが煩雑になったり、プロセスがスムーズに進行しなかったりします。
DevOpsでは利便性の高いツールを使って、開発担当者と運用担当者の連携を強化し、リリースまでのプロセスをシンプルかつスピーディーに変えるのです。リリースまでのプロセスの迅速化で、顧客のニーズやユーザーのフィードバックなどを反映させやすくなり、システム開発の生産性が向上します。
信頼性の向上
テスト・ビルド・リリースなどの手動で行われていた各工程を、DevOpsはツールの活用によって自動化します。従来の手作業によるテスト工程ももちろん自動化の対象であり、不具合を発見しやすくなります。不具合の発見に限らず、品質チェック機能がコードの修正や新規作成のたびに働くため、不具合を発生させない仕組みの構築にも貢献するでしょう。このような自動化によってヒューマンエラーが防止され、リリースの品質が保証されるため、運用部門でもリリースを受け入れやすくなります。
拡張性の向上
DevOpsではバージョン管理や継続的インテグレーションなど、コードおよびソフトウェア開発技術を使用して、インフラストラクチャをプロビジョンおよび管理します。言い換えれば、アプリケーションコードと同じ方法でインフラストラクチャを扱うのです。
コードで定義されるため、インフラストラクチャとサーバーは標準化されたパターンですばやくデプロイされ、最新のパッチまたはバージョンで更新され、反復可能な方法で複製されます。こうしたコードとしてインフラストラクチャを管理する手法はInfrastructure as Code(IaC)と呼ばれます。
これにより、インフラストラクチャと開発プロセスを統合して運用・管理できるようになります。複雑だったシステムの構築や管理も、自動化により開発プロセスと整合性をとりながら効率的な管理が可能です。
セキュリティの向上
DevOpsではソフトウェアのコードの変更は継続的にビルドされテストされます。この継続的インテグレーションの各段階で、セキュリティポリシーや各種のセキュリティ標準に基づいて、セキュリティ上の問題がないかも自動的にチェックされます。セキュリティは特定のチームの課題ではなく全員の課題として常時チェックの対象となるので、セキュアなソフトウェアの迅速な提供が可能です。
DevOpsの重要な要素であるCI/CDとは
DevOpsの重要な要素であるCI/CDについて解説します。
CI/CDは「Continuous Integration/Continuous Delivery」の略語で、継続的インテグレーション/継続的デリバリーのことです。
DevOpsにおける継続的インテグレーションでは、新しいコードが中央の共有リポジトリにチェックインされるたびに自動的にビルドされ、テストされます。それにより変更のテストと検証が迅速に行われて検出された問題が開発者にフィードバックされ、ソフトウェアの品質を向上させてリリースにかかる時間を短縮します。
継続的デリバリーはコードのビルドやテストに次いで、環境へのデプロイ直前の段階まで自動化するステップです。このプロセスでは状況に応じたテストを行い、承認されたコードは導入に向けて自動的に最終確認が実行されます。動作確認されたコードは継続的デリバリーとは別のプロセスである継続的導入によって、承認されたコードを実稼働環境にリリースします。
CI/CDをまとめると、ビルド・テスト・デプロイという開発上の一連の作業を自動化し、継続的に行う仕組みと言えます。開発担当者がソースコードを修正してから環境へリリースされるまでの一連の作業が自動化されるだけでなく、人手で数か月かけて行っていた作業が短時間で完了させられます。ソースコードの修正や新規作成からリリースまでが短時間で実現できるので、エンドユーザーは迅速に新たな機能を利用できるのです。
ただし、CI/CDはエンドユーザーに到達するまで人手が介在せずに進むため、リスクの低い製品や機能に向いています。機密データの取り扱い、高いセキュリティリスク、規制関連の業務、重大な経済的リスクといった高リスクのコードではDevOpsを実践しても継続的導入までは行わないケースが一般的です。
DevOpsのおもな手法
DevOpsはもともと、アジャイルの原則をソフトウェア開発だけでなくソフトウェア開発ライフサイクル全体に拡大しようと誕生しました。その意味でDevOpsはアジャイルから直接派生したと言え、アジャイルと総称される個別の手法はDevOpsにも受け継がれています。実際、スクラムやリーン開発、エクストリーム・プログラミングといった手法はDevOpsにも応用されています。
アジャイルの特徴には小規模で頻繁なリリースがあります。小規模なリリースで個々のリリースの影響範囲は局限され、変更による影響は容易に見極められます。そのことにより、変更が問題を発生させても対策やユーザーへの提供の遅れも限定されるのです。こうしたアジャイルの特徴はDevOpsにも引き継がれており、従来のソフトウェア開発プラクティスよりも高い頻度で更新をデプロイします。
DevOpsのツール
DevOpsのツールとは、コード開発、テスト、インフラの管理を行い、DevOpsの原則の実践を支援するものです。DevOpsとは本来、ソフトウェア製品の作成と提供に関する文化を表すものですが、その文化の発展を現実に活かすには、自動化ツールなどの製品が欠かせません。DevOpsを容易に導入できると謳ったツールは数多くあり、ソース管理、構成およびリリース管理、監視などのツールが存在します。
最適なDevOpsツールとは?
最適なDevOpsツールとは、DevOps文化を形成するプロセスと人のためのツールです。DevOpsは製品を買ってきて配備すれば「DevOpsが導入できた」と言えるものではありません。
とはいえ、DevOpsの業務を支援する有名な製品はいくつもあります。著名なツールに絞って、オープンソースと独自ツールの両方を以下に示します。
- ソースコード管理:Git (GitLab、GitHub)、Bitbucket
- 構成管理:Puppet、Chef、Ansible、CFEngine
- リリース管理:Jenkins、Travis、CircleCl、TeamCity、Gradle、Bamboo
- オーケストレーション:Mesos、Zookeeper、Kubernetes
- 監視、仮想化、コンテナ化:Nagios、Icignia、Monit、OpenStack、Vagrant、AWS、Docker、Kubernetes
- ログおよびアプリケーションライフサイクル分析:Splunkは代表的なログ管理ツールであり、DevOpsに最適です。
DevOpsを導入するには?
DevOpsを導入するには、まず自社の現状の開発文化について考えます。迅速な開発、導入、フィードバック、そして継続的な反復を妨げるサイロやボトルネックを明らかにすることで、何を改善すべきかを把握します。
代表的なDevOpsソフトウェアメーカーであるPuppet社とSplunkによるレポートでは、DevOps実践の発展過程を5段階に分け、CAMSモデル(文化、自動化、評価、共有)に従って進捗を評価しています。また、このレポートでは、DevOpsの普及と成功に不可欠な5つの基本的なプラクティスを明らかにしています。
- 監視とアラートは、サービスを運用するチームが設定できる。
- アプリケーションやサービスを構築するための導入パターンを再利用する。
- アプリケーションやサービスを構築するためのテストパターンを再利用する。
- あるチームが提供するツールの改善に他のチームが貢献する。
DevOps導入のポイント
はじめに、開発部門・運用部門・セキュリティアナリストの間の連携を深めるところから始めましょう。ソフトウェアの作成およびデリバリー全体のスピードと品質について責任を共有して連携を深める教育が推奨されます。
DevOpsプラクティスの根幹をなすのはコミュニケーションと協調です。開発部門と運用部門の連携だけでなく、マーケティングや営業部門とも協調を広げることで、システムの価値向上に対する組織全体としてのコミットと連携を強化できます。
ただし、DevOpsは半年や1年といった短い期間では実現できないと覚悟しなければなりません。DevOpsはゴールというよりも、終わりのない改善のプロセスであり、文化的もしくは哲学的アプローチによる新しい文化の形成であるという意味でも時間がかかるのです。
続いて、KPIを設定し進捗の評価を可能にしたうえでDevOpsの実践を始めましょう。KPIとして考えられる代表的な指標としては以下の要素が挙げられます。
- 導入の頻度:小さな導入を頻繁に行うことが目標
- 導入失敗の頻度:低減を目指す
- 四半期あたりのリリース機能数
- 平均検出時間(MTTD):異常発生から気づくまでの時間
- 平均復旧時間(MTTR):異常発生から解決されるまでの時間
- 平均リードタイム(MLT):あるコードの要求から実装されるまでの時間
- 稼働時間:計画保守によるダウンタイムと予定外のダウンタイムの両方の測定で可用性を追跡
- 不具合の見逃し率:実稼働環境に持ち込まれた不具合数と、QAチームが捕捉した不具合数を比較
- アプリケーションパフォーマンスなど
KPIは開発の目標達成のための重要な評価指標です。設定したKPIの達成状況を定期的に観測することで、目標達成に向けたチームのパフォーマンスの把握が可能です。もし、目標値からギャップが生じた場合には、開発チームが当初想定の方向に向かっていないと考えられます。活動の修正を施して開発サイクルを改善しましょう。
まとめ
今回はDevOpsをテーマに、概要やメリットなどを紹介しましたが、いかがでしたでしょうか。
DevOpsはすばやいプロダクト開発に適した手法です。しかし、プロジェクトを成功させるには、計画的な開発やリリースだけではなく、適切なリソース管理や原価管理、品質管理が欠かせません。また、仮にDevOpsを採用したとしても、組織風土などが変わらないのであれば実際の運用は難しいでしょう。
そういった意味でも、DevOpsの実現に至るまでには仕組的な部分から文化的な部分に至るまで、ある程度長い期間を要してしっかりと変革していく必要があるのです。今回ご紹介した内容を参考に、ぜひより良いシステム開発を目指していきましょう。
当社では、アジャイル型プロジェクトに適した管理手法についてまとめたセミナー資料をご用意しております。お悩みの方は、こちらも併せてご覧ください。
- カテゴリ:
- キーワード: