現代のシステム開発には様々な開発手法がありますが、そのなかでも特徴的な名前で記憶に残るのが「DevOps(読み方:ディブオプス)」ではないでしょうか?DevOpsとは、単なる開発手法ではなく、組織文化変革を含む取り組みを指します。
DevOpsの考え方は、目まぐるしく変化する「市場環境」と「ユーザーの価値」に対応すべく広まりました。では、どんな部分が今までの開発手法と違うのでしょうか?
今回は、DevOpsの概要やメリット、ライフサイクル、他にもアジャイル開発との違いなどの基礎知識の解説をしていきます。DevOpsとは何か知りたい方、システム開発を行うにあたっての情報として持っておきたい方にはぜひ読んでいただきたい内容になっています!ぜひ最後までご覧ください。
DevOpsとは、Development(開発)とOperation(運用)の2つを組み合わせた造語です。システム開発において、「開発部門」と「運用部門」が密に連携し、価値の高いシステムを確実かつ柔軟に、その上スピーディにユーザーへと届けるための考え方を指します。
また、DevOpsでは開発の各工程を可能な限り自動化します。そうすることで、人間が行うと時間がかかってしまう工程も時間短縮することができ、ヒューマンエラーも起こらず、作業がスピーディーかつ高品質で行えるため、市場での競争も優位に立つことができます。
DevOpsの起源は、ITコンサルタントのPatrick Debois氏が、2008年に行なったプレゼンテーション『Agile Infrastructure & Operations』と言われます。翌年2009年にはVelocity 2009というイベントにて、エンジニアのJohn Allspaw氏とPaul Hammond氏が『10+ Deploys Per Day: Dev and Ops Cooperation at Flickr』のプレゼンテーションを行い、そこからDevOpsという言葉が使われるようになっていきました。
デジタル化やグローバル化が進み、私たちの環境は目まぐるしく変化しています。その中でユーザーの求める価値は環境とともに変化し、必然的に「価値の変化」は短いスパンになっていきました。
それに対応するような開発を行うために必要なのが、「スピード感」です。このスピード感を持った開発を行うためには、開発のフェーズ一つひとつの時間短縮だけでなく、組織全体として見直し・変革が必要になりました。
DevOps誕生以前のシステム開発において課題としてあるのが、開発部門と運用部門の連携の欠如でした。価値のあるシステムを開発するという共通のビジョンがありながらも、開発部門は「少しでも多く新機能を追加したい」、運用部門は「安定したサービス運用を行いたい」と、それぞれビジョン実現のための手段が違い、対立することもしばしばありました。
そこで、開発部門と運用部門が連携することで、確実かつ柔軟かつスピーディにユーザーへと届けることができるため、DevOpsの必要性がどんどん広まっていきました。
DevOpsを導入するメリットとしては、「スピード感」「生産性向上」「信頼性」「セキュリティ向上」の4つが挙げられます。
・スピード感
開発部門と運用部門の緊密な連携と、可能な限りツールを使い自動化された開発によって、作業のスピードが速くなります。「作業が速くなる=DevOpsのライフサイクルを回す速度が速くなる=一定期間のDevOpsのライフサイクルの回数増加」と考えることができ、リリースまでの期間が短縮されます。
・生産性向上
上に挙げた作業スピードの向上によって、従来よりも人的リソースに余裕ができる可能性が高くなります。そのため、従来サービスの品質向上や新サービス開発などに投資でき、結果として生産性向上やサービスの価値向上という好循環が見込めます。
・信頼性
自動化された各工程によって、不具合も発見しやすくなり、その不具合も回収しての運用になるため、品質の保証された開発が可能になり、運用チームの信頼を得ることができます。また、ユーザーからの要望やフィードバックを迅速に取り入れやすくなります。変化し続ける市場ニーズへの対応力が強化されることで、ユーザーにとっても信頼性の高い開発が可能になります。
・セキュリティ向上
DevOpsにおいて、コード変更は自動的にビルドおよびテストされています。セキュリティ要件の変更やセキュリティポリシーの変更が必要になった場合でも、継続的インテグレーションの工程で自動で適用されるため、安全なシステムの提供が可能になっています。なお、継続的インテグレーションについては、後の章で解説します。
スピード感のある開発手法としてDevOpsと並べて紹介されることの多い開発手法として、「アジャイル開発」があります。
アジャイルというのは、英語で「機敏な、俊敏な」という意味があり、その意味の通り、開発期間の短縮を特徴とした開発手法です。アジャイル開発は、柔軟性と迅速な反応性を重視し、システムを機能ごとに小さく分割し、「計画 → 開発 → リリース」を短期間の反復を繰り返しながら、要件や優先順位を変更しながら開発を進め、顧客のフィードバックを取り入れながら進化させていきます。
アジャイル開発だと「開発」に焦点が当たりがちで、「運用」がうまくできないボトルネックがありました。そこで、開発と運用のバランスをとった上で、スピード感のある開発を行うという考え方が必要だということで、DevOpsの考え方が広まりました。
DevOpsとアジャイル開発の違いとしては、DevOpsは開発手法というよりも、柔軟かつスピーディーにシステム開発を行うための組織・文化変革の「考え方」であるという点です。
CI(継続的インテグレーション)とCD(継続的デリバリー)は、DevOpsの一環として、迅速な開発と安定した運用を実現するための基盤となります。
・CI(Continuous Integration/継続的インテグレーション)
継続的インテグレーションとは、開発者が作成・変更したコードを定期的に開発者全体共有のリポジトリに統合するたびに、自動的にビルドされ、テストされるというものです。その結果はすぐにフィードバックされるため、問題の早期発見・修正が可能になります。継続的インテグレーションは、開発効率化やシステムの品質向上に寄与します。
・CD(Continuous Delivery/継続的デリバリー)
継続的デリバリーとは、継続的インテグレーションの概念を拡張し、リリース可能であるかを確認するプロセスです。ビルドとテストの後、テスト環境またはステージング環境にデプロイし、システムやUIのテストなどを行います。それから最終ステップの運用環境への更新を許可する流れになっています。継続的デリバリーにより、リリースサイクルが短縮され、安定かつ素早いリリースが可能となり、ユーザーに対して新しい機能や修正が早く提供できます。
このように、ユーザーに届くまでにほとんど人手を介することなく開発が進行します。そのため、機密情報を取り扱わなければならない場合や、経済的なリスクが大きいコードについては、DevOpsを導入してもCI/CDをしないケースが一般的です。
DevOpsは、以下のような7つのステップによって構成され、一度やって終了ではなく、継続的に回していきます。
プラン
ここでは、アジャイル開発のように、システムを機能ごとに小さく分割して計画します。また、プロジェクト全体の優先順位の管理や不要機能などの洗い出しも行い、開発要件を考えます。この時、プロジェクトに関わる人がいつでも共有・確認できるような環境も整えていきます。
▼
コード
プランの工程で策定した開発要件に従って、プログラマーがプログラミング言語を用いてコードの作成を行います。規模の大きい開発だと、多数のプログラマーが同時に同じ画面の作業を行ってしまう可能性もあるため、ソースコードリポジトリ(コードを一元管理する場所)の導入が必要です。
▼
ビルド
ソースコードをコンパイル(コンピュータが理解できる状態に)し、複数に分かれているファイルを1つのファイルにまとめ、実際に動く状態にします。
▼
テスト
ビルドしたアプリケーションにバグなどの不具合がないかをテストします。そして見つかったバグなどを改修(デバック)します。
▼
デプロイ
アプリケーションを本番環境に配備し、ユーザーが利用できる状態になります。
▼
運用
継続的にサービスを提供するため、保守・運用の作業を行なっていきます。実際に運用が始まってから起こる問題もあるため、その問題に迅速に対応できるよう、開発部門と運用部門はどちらも同じ業務を見れるよう、お互いの業務を理解しておく必要があります。
▼
フィードバック
保守・運用と同時にユーザーからのフィードバックを収集していきます。ここで集まった意見に解決すべき優先順位をつけ、そこからまた次のプランが生まれ、このサイクルを繰り返していきます。
では、このDevOpsの考え方を実際に組織に適用させる際に必要なことは、どのようなことでしょうか?また、導入して実際の運用が始まったからゴールという訳でなく、DevOpsは組織文化を変革する取り組みとして終わりがないため、長い目で見ていく必要があります。
・認識をすり合わせ、考え方を浸透させる
開発部門と運用部門など関わる全ての部門間で緊密に連携していくことが大切です。DevOpsの軸となるのが「協調」や「コミュニケーション」です。開発にあたって関わる全ての部門と連携していくことで、ユーザーに対して「システムの価値向上」を目指す組織としての動きを強化することができます。
・KPIの設定
KPIとは、Key Performance Indicator(キー パフォーマンス インジケーター)の略で、日本語では「重要業績評価指標」と訳されます。これは、ゴールまでの各プロセスの達成状況を確認するための、定量的な指標を指します。組織の中で、何に重点を置くかによって、KPIは変わってきますが、DevOpsの研究者Nicole Forsgren氏によるとDevOpsの効果的な測定に以下の4要素が挙げられています。
- リードタイム
作業の始めから終わりまでの所要時間
- リリース頻度
本番環境へのデプロイの頻度
- 平均修復時間
サービスダウンから復旧までの時間
- 変更失敗率
本番環境リリース時のサービスダウン率
ここまで、DevOpsの概要やメリット、アジャイル開発との違い、プロセスの7要素など、DevOpsに関する基礎知識の解説をしてきました。
競争の激化する市場と目まぐるしく変化するユーザーの価値という難しい環境に対して、DevOpsを組織に導入することにより、価値の高いシステムを確実かつ柔軟に、その上スピーディにユーザーへと届けることができます。
また、スピード感を持った開発を行うには、このような考え方の浸透だけでなく、素早い開発の可能なフレームワークや開発手法の検討も必要です。
JIITAKではインドに自社の開発拠点を持ちながら、複数プラットフォームの同時開発可能なFlutter開発を強みとし、アイデアの創出から開発・運用までスピーディーな開発が可能となっています。システム開発でお困りごとのある方はぜひ、JIITAKまでご相談ください!