近年、システムやソフトウェアの開発において「DevOps」や「シフトレフト」というキーワードが注目されています。
そもそもDevOpsやシフトレフトとはどのようなものでしょうか? これらには厳密な定義がないため、世間で認識の違いがあるかもしれません。
ここでは2つのキーワードについて解説し、DevOpsとシフトレフトの関係性と、最強の開発プロセスを実現するDevOpsとシフトレフトの組み合わせについても明らかにします。
- もくじ[非表示]
1.「DevOps」とは|開発と運用が連携して取り組む手法
DevOps というキーワードを理解するには、「Dev」と「Ops」に単語を分解すると比較的わかりやすいかもしれません。まずDevは「Development」のことで、開発する・成長させるという意味があり、ソフトウェアの開発チームを指します。一方でOpsは「Operations」のことで、運用の意味があり、ソフトウェアの運用チームを指します。
以前はソフトウェアの開発において、開発チームと運用チームは分離しており、それぞれが別々に動いていました。そのため、各チームの目指す方向が相反してしまうことがありました。たとえば開発側はソフトウェアの利便性を優先しますが、運用側は安定的なオペレーションを望み、対立が生じがちでした。これらの問題を解決するためにDevOpsの考え方が生まれたのです。
DevOps=Dev+Opsでは、開発チームと運用チームがお互いに共通の目的を持って作業を行い、連絡を取りあって連携・協力していきます。これにより適確なソフトウェアやシステムを迅速に開発でき、その運用も安定的に行っていくことで、多くのメリットをもたらします。たとえば、作業の効率性を高め、リリースまでの時間を短縮し、システムの成功率を向上します。またシステムの可用性も確保できるようになるため、DX時代の開発手法としても注目されています。
DevOpsでソフトウェアやシステムを開発していく場合には以下の4つの手法があります。
継続的なインテグレーション(CI:Continuous Integration)
各開発者が担当するコードが目的どおり動くことを確認するために、すべての作業コピーをセントラル・リポジトリに毎日1回はマージし、「Jenkins」や「CircleCI」といった自動化ツールによってビルドやテストを実行します。
これによりバグの早期発見や品質の向上、リリース時間の短縮を実現します。
継続的なデリバリー(CD:Continuous Delivery)
開発あるいは修正したコードを利用環境に導入できる状態にして、リリースするまでの一連の作業を自動化してパッケージ化します。
ソフトウェアやシステムのビルド、テストなどを迅速に実施するために、ここでも前述のような自動化ツールが使われます。
継続的なデプロイメント(CD:Continuous Deployment)
リリース後、本番環境にデプロイ(配置・展開)するまでを自動化します。
略称が継続的デリバリーと同じCDで紛らわしいのですが、こちらはビルドやテストが済んだコードのリリース、デプロイまでを完全に自動化し、本番環境のプログラムを継続的かつ高頻度に自動更新します。
継続的なモニタリングとフィードバック
ソフトウェアのユーザー向けにサービスデスクを構成し、モニタリングとフィードバックを継続的に受け取るアプローチです。
これにより、ユーザーの要望や意見を次のプランに反映し、すぐに開発プロセスに改善点などを反映できるようになります。
2.DevOpsのメリットとデメリット
以上の手法を踏まえたうえで、あらためてDevOpsのメリットを以下に示します。
DevOpsのメリット
メリット① アジャイル開発との親和性
DevOpsは、開発チームとエンドユーザーが連携するアジャイル開発との親和性があります。
アジャイル開発では、ユーザーを含めたチームをつくり、複数プロジェクトに分けて、1つのプロジェクトを数週間単位で実行します。
そのフィードバックをもとに、次の開発とリリースを繰り返し、ソフトウェア開発やシステム構築を行い、改善を進めます。
メリット② 開発の効率性と生産性、品質が向上する
DevOpsは、前述のようにアジャイル開発の併用やCI/CDツールなどによる自動化から、リリース時間を短縮でき、フィードバックやレスポンスも早くなるため、問題点を早期に発見できるようになります。
その結果として、修正時間や無駄な開発が減り、開発の流れが効率化して生産性も向上し、品質も高まるという好循環が生まれます。
メリット③ 修正・変更時のリスク分散が可能
DevOpsでは、開発チームと運用チームが連携し、互いに協力しながら目的に向かって作業を進めるため、ソフトウェアやシステムに何か変更があってもスムーズに事が運びます。
開発規模がコンパクトで変更も小さいため、影響範囲も限られます。
アジャイル的に小さな変更を繰り返したり、バグや不具合を素早く修正したり、新機能を追加したりと、品質を継続的に保てるようになります。
DevOpsのデメリット
① セキュリティ対策がCI/CDの足かせになる
DevOpsとアジャイル開発の併用では、セキュリティ対策が足かせになることがあります。頻繁なリリースのたびに脆弱性テストを行わなければならず、そのぶん工数が増えて開発スピードが落ちてしまうという面もあります。この解決策については後述します。
あとはデメリットというよりも、導入前や運用時におけるハードルになるかもしれませんが、以下のような課題も考えられるでしょう。
デメリット② 旧来の組織体制や文化・風土を刷新する
まず開発プロセスが変わるため、組織内のコンセンサスが求められます。どんな組織でも一定数ですが、急な変化を嫌う保守的な人がいることも事実です。
そのため明確なビジョンと導入効果を掲げながら、その人たちをいかに説得していくかという点も大切です。
デメリット③ 運用と開発の相互コミュニケーション
DevOpsでは運用チームと開発チームが連携していく必要があるため、相互コミュニケーションが不可欠です。連携が上手く取れないと、開発の効率性や生産性のメリットを享受できなくなります。そのため基本となるCI/CDツールだけでなく、コミュニケーション、タスク管理、バージョン管理、チケット管理などのツールを導入するとよいでしょう。
3.シフトレフトとは|テスト工程を前倒しで行うアプローチ
ここからは、もう1つのテーマであるシフトレフト(Shift-left)について解説します。
これは、ソフトウェアやシステムなどの開発サイクルで、品質保証のためにテスト工程を前倒しで行うアプローチを指します。できるだけ早めに、小刻みにテストを行って、品質を確認していくというイメージです。
旧来からの「ウォーターフォールモデル」は、上から下に「滝」が流れるように時系列的に開発を進めていくものでした。「要件定義」「基本設計」「詳細設計」「開発/実装」「テスト」(単体・結合・総合) と前工程を完全に終えてから、次工程に順番に進みます。最初に完璧(と思われる)計画を立て、要件・仕様・設計を作り込み、コードの記述に着手するため、成果物が明確で進捗も把握しやすいという点が強調されていました(実際にはそうならないケースも多い)。
ところが、品質を担保するための「テスト」については、開発の最終工程でようやく実施することになり、テスト自体も動的テスト(実際にコードを実行して評価するテスト)に比重が置かれていました。そのため最終段階で何か問題やバグが発覚すると、そこから要件や設計まで戻って修正をかけなければなりません。
その結果、手戻りコストが高く、さらにリリース工期も伸びてしまいます。
しかし近年は、ご存知のとおり「モバイルファースト時代」になってきました。開発サイクルやリリースが加速し、ソフトウェアの修正も頻繁に行われます。このような早いスパンの開発にはウォーターフォールモデルは適していません。
そこで多くの企業がDevOpsやアジャイル開発といったアプローチを採用しているわけです。
その時流に合わせて再び注目を浴び始めたのがシフトレフトです。言葉のとおり、シフトレフトとは、品質保証活動のためのテスト工程を「左に寄せること」、つまり前倒しで実施する、あるいは工程全体に組み込む概念のことです。
4.シフトレフトのメリット・デメリット
シフトレフトのメリット
シフトレフトのメリットは、テスト工程を前倒しにする際に、静的テスト(主に設計書などのドキュメントレビュー)と合わせて、動的テストも早期に実施することです。
これにより、問題点をフィードバックし、要件や設計の誤認識による大きな手戻りや未然のバグを防ぎ、全体のテスト時間を短縮し、ソフトウェアの品質向上につながります。
また、いち早くソフトウェアの脆弱性を発見して修正することも可能です。
もしリリース直前にソフトウェアに脆弱性が発見されたら、手戻りコストだけではなく、リリースの延長によって機会損失を招くため、ビジネスにも大きな影響を及ぼすリスクがあります。
そこでシフトレフトを導入し、セキュリティも配慮しながら、企画・設計段階からセキュリティを考慮する「セキュリティ・バイ・デザイン」の考え方に基づいて開発を進めることで、ソフトウェアの信頼度がぐっと高まります。
セキュリティ面で安全・安心なソフトウェアを提供し、インシデントにも対応できる点も重要なメリットになるわけです。
シフトレフトのデメリット
シフトレフトのアプローチを導入する際には注意したい点もあります。
それは、ソフトウェアやシステム開発の各プロセスにおいて、アジャイルをベースにした活動をしっかりと組み込んでおく必要があることです。
これができていないと、せっかくのシフトレフトの効果やメリットを生かしきれませんので、心にとめておきましょう。
5.DevOpsにシフトレフトを組み込むと生まれる効果
開発と運用の担当者が互いに連携し、開発の効率性や生産性を高めるDevOpsに、シフトレフトを組み込むと、プロジェクトの初期段階からテストを行うことになるため、品質を担保できるようになります。
また、従来のセキュリティテストも同様にシフトレフトすることで、脆弱性を早期に発見して修正でき、開発スピードや継続的な改善につながります。
このようにDevOpsにおいて、あらかじめセキュリティ対策も開発ライフサイクルに組み込んで包括的に対処する「DevSecOps」が最近は注目を浴びています。
なお読者のみなさんは「シフトレフトがあるのだからシフトライトもあるよね?」と思われるかもしれません。
実際にシフトライトという手法もあります。ただし、これはシフトレフトと相反する概念ではありません。
シフトライトは、ソフトウェアのリリース後も継続的にユーザーから使い勝手などをフィードバックしてもらい、改善を繰り返したり新機能を追加したりすることで、UX/UIを向上させることが主な目的です。
そのためプロジェクトの特性や目的によって、バランスよくアプローチを使い分けるとよいでしょう。