DevOps(デブオプス)とはソフトウェア開発の手法のひとつで、開発部門と運用部門が連携してシステム開発を行うというやり方です。
DevOpsは大きなシステムを一度にリリースするのではなく、小さなシステムのリリースとテストを繰り返す手法なので、開発から最終リリースまでの時間を短くでき、自社の運用に合ったシステムを柔軟に開発できます。
今回はDevOpsについて、基礎知識やメリット、DevOpsの開発手法などをご紹介します。
目次
DevOpsとは?
DevOps は、2009年にO’Reillyが開催した「Velocity 2009」というイベントで紹介された後、ベルギーで「DevOpsDays」というイベントが開催されるなど、世界中に広がりました。
●DevOpsの意味
DevOpsとは、開発(Development)と運用(Operations)を合成した言葉で、開発担当と運用担当が連携しながらITシステムの開発を行うことを指します。DevOpsという名前から開発と運用の二者で成り立つものだと思われがちですが、実際には開発部門(Dev)、運用部門(Ops)、品質管理部門(QA)の三者の連携と協力で成り立っています。
DevOpsにビジネス部門の協力も加えた「BizDevOps」という手法もあります。
●DevOpsの定義
開発手法といっても、特定の技術や開発ツールは決まっていません。DevOpsは開発担当が運用担当と連携しながら開発を進めるという概念や組織論を指すため、方法に厳密な定義はないのです。
大まかな流れとしては、開発担当と運用担当が連携して、本当に必要としていることを直接伝えたり、テスト結果をフィードバックしたりします。開発担当は、独自に大規模な開発を行い最終段階でリリースするのではなく、小規模な開発でデプロイ(本番環境でのテスト)を行って、運用担当や品質管理のフィードバックを受けながら、デプロイを繰り返します。これを繰り返すことで、開発から運用までの時間を短縮しながら、必要な性能や信頼性を維持したシステムを開発できます。
●DevOpsの目的
DevOpsの目的は、迅速なITシステムの開発と運用を継続的に実現することです。リリースまでの時間(Time to Market)を短くし、需要に合わないシステムやサービスを省いて失敗を減らします。
DevOpsでは開発を効率化するため、手動で行っていた処理をツールで自動化したり、開発チーム内で行っていたテストを運用に任せたりしています。その結果、開発チームは開発作業に専念できますし、小規模なシステムでデプロイを繰り返すことで、開発から実際に運用するまでのライフサイクルも短くなります。
開発担当(Dev)と運用担当(Ops)の関係性
DevOpsでは開発と運用の連携の密度がポイントです。開発と運用それぞれがDevOpsに参加する目的と、両者の関係性についてお伝えします。
●開発担当(Dev)の目的
開発担当がDevOpsに参加する目的は、利便性を向上させるためにユーザーの需要を反映してシステムに新しい機能を追加することです。
通常、開発担当は出来上がったシステムに関与することはないので、現場が要求している内容や実際の本番環境がどのようなものかを知る機会はあまりありません。しかし、DevOpsは運用担当と連携しているため、現場の要求を直接聞いたり、それを基に本番環境で素早くテストを行ったりできます。
●運用担当(Ops)の目的
運用担当がDevOpsに参加する目的は、システムを安定的に稼働させ、信頼性を保つことです。そのため、一度導入したシステムに変更を加えることを嫌う傾向があります。
また、運用担当は多くの場合、少人数で複数のシステムを担当しているので、開発担当から寄せられた依頼への対応は遅れがちになります。しかし、DevOpsなら開発中に直接開発担当の要望を聞くことができるので、迅速な対応が可能です。
●開発と運用の関係性
開発担当も運用担当も「良いシステムを提供することで価値を生み出す」という大きな目的は同じです。しかし、開発担当の要望は基本的に「ユーザーのために新しい機能を追加すること」であり、運用担当の要望は「新機能の追加よりもシステムの安定稼働を優先すること」なので、実際には対立関係になってしまいがちです。そこで、両者の対立関係を解消するため、DevOpsという概念が生まれました。
DevOpsを行う際は、開発・運用を問わず、会社全体で「関係者がそれぞれの専門性を活かし、互いに連携し、協力し合う」というカルチャーを形成することが大切です。具体的には、ツールやチャットを使って互いにコミュニケーションを取り、双方の要望を理解したり、システムの各種情報を共有する仕組みを作ったりする必要があります。
DevOpsのメリット
DevOpsを実現すれば、開発プロセス全体に大きなメリットがあります。自社で採用する前に具体的にどのようなメリットがあるのか確認しておきましょう。
●リリースの高速化
DevOpsにより、開発担当・運用担当双方の余分な作業がなくなり、開発のプロセス全体が高速化するので、素早くシステムをリリースできます。リリースまでの時間が短くなることで、市場の需要やトレンドに合ったシステムやサービスを開発できるでしょう。
●生産性の向上
DevOpsにより、ユーザーからのフィードバックを得やすい環境が作られるので、バグや仕様のミスを早期に発見できます。修正にかかる時間やムダな開発工数が削減できて、開発が効率化するため、生産性も向上します。
●情報共有の円滑化
開発担当、運用担当、品質管理担当が協調してサービスを管理することで、三者が連携して一緒に開発を進めることができます。互いに必要な情報を過不足なく共有できるため、本番環境を想定した開発が可能です。また、開発から運用までの引き渡し期間を短縮し、円滑なシステム運用を実現します。
●リスクの分散
DevOpsは開発規模が小さいので、変更箇所も少なく、リスクが分割されます。リスクは小さく分割されているほど対処しやすく、バグや不具合も見つけやすくなります。それによって、高い品質を維持できるので、信頼性の担保につながります。
また、変更箇所が少ないので、不具合そのものの発生を減らし、スピーディに新機能を追加することもできます。
DevOpsを行うための開発手法
DevOpsは開発手法より概念に近いので、実現するためにはより具体的な手法が必要です。DevOpsでよく使われる開発手法を解説します。
●アジャイル開発
DevOpsと混同されがちですが、アジャイル(Agile)開発は開発担当と顧客が連携する開発手法で、DevOpsは開発担当と運用担当が連携する組織論です。DevOpsでは、いくつものプロセスを自動化していますが、実際には、DevOpsの手法としてアジャイル開発が多く使われています。
アジャイル開発では開発作業に顧客を巻き込んだ「共同開発チーム」をつくり、システムの全体をいくつかに区切ります。1つの区切りを2週間程度で開発してリリースを行い、そのフィードバックによって新たな開発とリリースを繰り返して、全体の完成度を高める手法です。
アジャイル開発は、いくつもの手法に分けられます。代表的なものには、チーム一体となって開発を進める「スクラム」、開発サイクルが短くプログラマーが主体となる「エクストリームプログラミング」、システムを一定間隔で繰り返し提供しながら開発する「機能駆動型開発(FDD)」、無駄を排除してシステムを素早く提供し、全体を最適化する「リーンソフトウェア開発」などがあります。
●継続的インテグレーション
継続的インテグレーション(Continuous Integration、CI)は、バグを早期に発見して対処することで、ソフトウェアの品質を高める手法です。本番環境でソフトウェアの更新を早期に検証するため、リリースにかかる時間を短縮できます。
継続的インテグレーションの進め方は、開発担当がそれぞれコードを定期的にCIサーバーと呼ばれる専用の場所にアップロードします。定期的に結合・ビルドしてテストを行いながら開発を進めていきます。
●継続的デリバリー
継続的デリバリー(Continuous Delivery)は、継続的インテグレーションを拡張したものです。コードを修正する度に自動的にビルドが行われ、テストや本番へのリリース準備が実行されます。実際の本番環境でのデプロイやリリースのタイミングは、ユーザー主導で決定するのが特徴です。
プロセスの多くの部分を自動化しており、DevOpsに似ているため、DevOpsの手法としても継続的デリバリーが使われています。
DevOpsは担当者同士が連携することで効果を発揮する
DevOpsはツールやアプリケーションとは異なり、導入するだけで開発が順調に進んだり、問題が解決したりするわけではありません。
DevOpsを正しく導入するためには、開発担当と運用担当が連携しやすい環境をつくり、社内カルチャーを変革するなど、全社単位で取り組む必要があります。
そうすることで開発担当と運用担当がスムーズにコミュニケーションを取って情報を共有できるようになり、DevOpsの効果を上げられるでしょう。
■システム開発の外注先探しは「発注ナビ」で
システム開発会社はすでにお決まりですか?
発注ナビは、システム開発に特化した発注先選定支援サービスです。
全国1500社以上の開発会社から、貴社に代わって最適な発注先をお探しします。
ご相談からご紹介まで完全無料(成約手数料なども一切不要です)。
最短1日のスピード紹介で、お急ぎの案件でもお待たせすることがありません。
詳しくはこちらをご覧ください。