DevOpsの概要
DevOpsとは?
近年ソフトウェアに関しては、リリースの迅速化やの品質向上が強く求められています。そして、そうしたリリースの迅速化、品質向上を実現するのがDevOps(デブオプス)です。
DevOps(デブオプス)とは、開発という意味のDevelopmentと、運用という意味のOperationsを合わせた造語で、「Development & Operations」の略称です。「開発担当と、運用担当が緊密な連携をとり、統合的にソフトウェアの開発と運用を行うことで、ソフトウェア開発プロジェクトをスピーディに回し、品質向上を図る開発手法」のことです。
アジャイル開発との違い
スピーディなソフトウェア開発の手法には、アジャイル開発もあります。アジャイル開発は、ソフトウェアの開発プロセスのみを対象としています。つまりソフトウェア開発の工程である「計画」、「設計」、「実装」、「テスト」といったフローを小さいサイクルで繰り返す開発手法です。主に開発担当サイド(開発プロセス)に焦点を絞り、より質の高いソフトウェアを、よりスピーディに開発することを目指す手法です。
これに対してDevOpsは、開発のみの手法ではなく、アジャイル開発が対象とする「計画」、「設計」、「実装」、「テスト」に加えて、「デプロイ」、「運用」、「モニター」といった運用にかかわる工程も一体的に扱います。これにより、ソフトウェア開発を運用も含めて迅速化し、品質向上を目指します。アジャイル開発よりも大きな工程を対象とした開発手法です。
もちろん、アジャイル開発とDevOpsは背反する概念でありません。したがって、DevOpsを導入する際に、「開発」においてはアジャイル開発の手法を活用するというプロジェクトの進め方も成立します。むしろ、DevOpsの中にアジャイル開発の手法も取り込むことで、より迅速なプロジェクト推進が可能となります。
DevOps登場の背景と、DevOpsが目指すもの
従来は、ソフトウェア開発における開発(Development)と、運用(Operations)は、個々別々の機能として取り扱われていました。そのため、ひとつのソフトウェアを開発して、それを運用するという、本来であれば一連のフローとして取り組むべきところが、担当者も業務も分断してしまい、数々の弊害が発生していました。
たとえば、開発担当としては、新機能の追加や変更を迅速に行いたいと考えます。しかし運用担当は安定性やセキュリティを重視する傾向があります。こうした目指す方向性の違いにより、プロジェクト自体がスムーズに進まず、リリースサイクルが遅れるといった弊害も生まれます。また、そうした意思疎通の齟齬がソフトウェアそのものの品質低下の原因になることもあります。
こうした弊害の存在を背景に、開発担当と運用担当のサイロ化を防ぎ、開発担当と運用担当との連携・協力を強化してソフトウェアの開発と運用のプロセスを統合するのがDevOpsなのです。
DevOpsでは、組織文化の変革、自動化、継続的インテグレーション/デリバリーなどの原則とベストプラクティスが重視されます。DevOpsを導入することによって、開発と運用の壁を取り払い、顧客に対して、より迅速で、より信頼性の高いソフトウェアを提供することを目指すことが可能になるのです。
DevOps実現のために解決すべき3つの課題
DevOpsを実現する上では、次に挙げるような課題が存在します。
組織文化の課題
ひとつは「組織文化」という課題です。DevOpsを実現するためには、開発担当チームと運用担当チームとの密接なコミュニケーションと、協力関係の強化のための施策などが必要です。たとえば定期的なミーティングの実施やコミュニケーションツールを利用した情報共有の促進など、組織間において壁を取り払うための組織的文化の変革が不可欠です。
開発プロセス自動化の課題
またDevOpsを実現するにあたって、開発プロセスの自動化が極めて重要な課題となります。自動化によって、これまで手動で行われていた繁雑なタスクや手順を効率化できます。さらには、自動化によりヒューマンエラーなどのリスクも低減させることができ、ソフトウェア開発ライフサイクル全体の効率を向上させることが可能となります。
DevOpsではリリースの頻度が高く、かつリリースされたソフトウェアについての評価も迅速に行われます。その評価に基づいて、さらに迅速な改善を実施するというサイクルを短時間で回すことが求められます。そのためDevOpsでは、継続的インテグレーション(CI)によるコード変更の頻繁な統合とアプリケーションの自動ビルド、テストなどが不可欠です。さらにソフトウェアのパッケージ化と本番環境への展開プロセスをも自動化する継続的デリバリー(CD)という仕組みも広く取り入れられています。
システムインフラ構築の課題
また、ソフトウェア開発で必要となるサーバーなどのシステムインフラの構築においては、機能提供に必要なソフトウェアを予めサーバー上にインストールするなど、各種の設定が必要になります。こうした各種設定は煩雑で手間がかかりますが、クラウドコンピューティング等のテクノロジーの進歩により、開発に求められるシステムインフラ環境もコードで定義することで迅速に構築できるようになりました(IaC /Infrastructure as Code)。
これにより大幅な工数の削減につながります。システムインフラの設定や構成をコードで記載し、実行することによって、要件に合った環境を簡単に構築することが可能になるのです。
DevOpsを実現するためには、このような課題に対応することが必要です。そして、具体的な対応としては、さまざまな自動化ツールや管理システム、さらにはクラウドコンピューティングサービスなどの導入が欠かせません。
DevOpsを加速させるソフトウェア開発高速化ツールの重要性
なぜ、高速化ツールが必要なのか
開発担当と運用担当が一体的に連携しながら、シームレスにプロジェクトを推進していくDevOpsにおいては、いったんリリースされたソフトウェアについて、運用担当サイドから改善の要求が頻繁になされます。開発担当サイドでは、その要求を受け止めて、改修を実施します。この時、運用担当は少しでも早く成果物を手に入れたいと考え、開発サイドも同様に少しでも早く成果物を提供したいと尽力します。しかし、開発担当者の自助努力によって高速化できるプロセスと、マンパワーでは高速化できないプロセスが存在します。たとえば、プログラミングなどは前者であり、ビルド・コンパイルなどは後者です。このビルド処理を高速に行えるかどうかは、コンピューター処理をどれだけ高速化できるかにかかっています。せっかく開発担当者がプログラミング作業を迅速に行ったとしても、その後のビルドを迅速に実行できなければ、プロジェクト全体の高速化にはつながりません。そこで、この部分を高速化するツールが必要になります。
ビルド時間を最大60%短縮する「Incredibuild(インクレディビルド)」
Incredibuildは、DevOpsにかかるトータル時間の短縮を実現する開発プロセス高速化プラットフォームです。Incredibuild独自の分散コンピューティング技術により、コードのビルドやテストなどに要する処理時間を大幅に削減できるのです。
Incredibuildは、既存ネットワーク内にあって、使用されていないCPUのコアをローカルコアのように有効活用します。そのため、現有のリソースだけで、ビルドなどの処理を高速化することが可能となります。従来の一般的な分散ネットワークシステムの場合、たとえばコンパイル処理を実施しようとすれば、各PCにコンパイラソフトをインストールして、中央のPCがそれらを管理する必要があります。しかしIncredibuildの場合、各PCにIncredibuildをインストールしさえすれば、コンパイル処理のためのコンパイラソフトなどを各PCにインストールする必要はなく、極めて簡便に、そしてスピーディに仮想分散コンピューティングを実現できます。
またIncredibuildには、ビルドの中間ファイルをキャッシュし、再利用する仕組みが備わっています。そのため、ビルドプロセスの一部で生成された中間ファイルに関しては、その内容などが変更されていない限り、次回実行されるビルドでも再利用されます。これにより、同じ成果物を何度もビルドする必要がなくなり、ビルドタスクの実行時間を大幅に短縮できます。
このように、独自の分散コンピューティング技術と、中間ファイルのキャッシング機能の2つを活用することにより、圧倒的な優位性をもって、処理のスピードアップが可能になっています。作業プロセスによっては、ビルド時間を最大60%短縮することが可能となります。
開発と運用が一体的にプロジェクトを推進していくDevOpsでは、運用担当からのフィードバックに基づいて、より迅速・スピーディな開発工程を実現し、顧客に対して、よりスピーディに、より高品質のソフトウェアを提供することが大目的となります。そして、それを実現する上で、Incredibuildのような開発高速化ツールの導入は、DevOpsを成功に導くための重要なキー・ファクターとなります。