人気の高いソフトウェア開発手法であるDevOpsですが、セキュリティ(DevSecOps)やビジネス(BizDevOps)といった隣接領域まで含む概念のため、初めて触れる人には少しわかりにくいかもしれません。
DevOpsとは、これまで別々に動いていたソフトウェア開発チームとITオペレーションチームを1つのチームとして統合し、セキュアなコードを作りながら開発のスピードを上げていく手法です。協力し合いコミュニケーションを大切にする文化、テストの自動化、リリースやデプロイ、そして頻繁なイテレーション。これらがDevOpsの基本になります。よく似た言葉にDevSecOpsがありますが、こちらはセキュリティに特に力を入れたDevOpsの実践を指します。
DevOpsという手法の核にあるのは、ソフトウェア開発の質を高める次の4つの原則です。
開発とオペレーションをシームレスにつなごうというアイデアが生まれたのは、いまから15年ほど前のこと。2009年には、この手法を代表する提唱者の1人であるパトリック・デボア氏が「DevOps」という言葉を作りました。DevOpsはアジャイルソフトウェア開発の考え方を数多く受け継いでいますが、なかでも開発とオペレーションのサイロを壊すことに重きを置いている点が特徴です。
以来DevOpsは、中小企業からレガシーシステムを抱える大企業まで、規模を問わず支持を広げてきました。ほかの手法と同じように、DevOpsも組織の事情や環境に合わせて形を変えられるので、ビジネスにとって本当に大事な部分に寄せていくことができます。
そのため実際にはさまざまなDevOpsのやり方が存在しますが、根っこにある考え方は共通していて、次の4つの原則に集約されます。
DevOpsチームが目指すべき道しるべ、それが自動化です。DevOps以前のソフトウェア開発は、あらゆる工程で人の手(そして物理的な引き継ぎ)を必要とする、かなり地道な作業でした。人が関わる工程が多いということは、新しいコードの更新やリリースが年に1回できれば御の字で、18〜24カ月周期のリリースサイクルも当たり前だったということです。
今では「エリートDevOpsチーム」と呼ばれるようなチームが1日に何度もコードをリリースしていますが、それを支えているのはほかでもない自動化です。
DevOpsにおける自動化の意味を理解するには、ソフトウェアテストを例に考えるとわかりやすいでしょう。地味で見過ごされがちな工程ですが、リリース遅延の原因として真っ先に槍玉に挙げられるのもテストです。ソフトウェアテストが欠かせない工程であることは間違いなく、テストを飛ばせば不具合や、時には安全性に問題のあるコードをリリースしてしまうリスクを抱えることになります。
しかし、テストはDevOpsの工程のなかでも特に手間のかかる作業です。テストケースを書き、山ほどのテストを走らせ、結果を分析し、開発者と修正のやりとりをする作業でもあります。テストが「リリースが遅れる一番の原因」に挙げられるのには、こうした背景があります。
そこで力を発揮するのが自動化です。もっとも基本的なテストであれば、コードを書いたその瞬間に実行できるようにする、という発想です。テストを自動化すればプロセス全体が大きくスピードアップし、テスト担当者はより深刻な品質問題の発見に集中できるようになります。
テストはDevOpsにおける自動化の効果がわかりやすい例ですが、もちろんそれだけではありません。継続的インテグレーションは新しいコードを既存のコードへ統合する作業を自動化し、継続的デプロイはリリースそのものを自動化します。そしてInfrastructure as Codeを使えば、開発環境のプロビジョニングも簡単に自動化できます。
自動化が進んでいるだけでは、まだ一流とは言えません。本当に優れたDevOpsチームには、コラボレーションとコミュニケーションもきちんと根づいています。開発とオペレーション(さらにセキュリティやテスト、ステークホルダーなど)を1つにまとめるという発想は、そもそもチームが協力し合えるかどうかにかかっています。そして、それを支えるのは明確で継続的なコミュニケーションにほかなりません。
言葉にすると単純な原則に聞こえますが、実際はここに落とし穴があります。開発者はコードを書いて世に出したい、オペレーション担当はツールやコンプライアンス、クラウドのことで頭がいっぱい、セキュリティチームはとにかく安全性を確保したい。それぞれ優先することが違い、話す「言語」も違えば、問題へのアプローチもまったく異なります。開発とセキュリティの間に依然として溝がある背景には、こうしたコミュニケーションとコラボレーションのギャップが根強く残っていることがあります。
チームを1つにまとめるには相応の努力が必要で、時には既存の枠を取り払うような発想も求められます。「コミュニケーションがあってこそDevOpsが機能する」のか「DevOpsを実践するからコミュニケーションが生まれる」のか。2021年版グローバルDevSecOps調査の結果を見ると、実際にはその両方が言えるようで、DevOpsの実践がコミュニケーションの改善や開発者満足度の向上につながることもわかっています。
リーンやアジャイルといった従来の開発手法を色濃く受け継ぎ、DevOpsも無駄の削減と継続的な改善を重視します。テストのような繰り返し作業を自動化して時間のロスをなくすにしても、リリースまでのステップ数を減らすにしても、優れたDevOpsチームはパフォーマンス指標を測定し続け、改善すべきポイントを見極めています。
リリースにかかる時間を継続的に短くすることや、平均復旧時間(MTTR)や検出されるバグの数を減らすことなど、さまざまな指標に取り組んでいくのがチームには求められます。
最後の原則は、実際のユーザーをプロセスのあらゆる段階に巻き込むことの大切さです。自動化が進み、コミュニケーションとコラボレーションが改善され、継続的な改善が根づいてはじめて、DevOpsチームはユーザーが本当に求めているものは何か、それをどう届けるかにじっくり向き合えるようになります。とはいえユーザーの本音を読み解くのは簡単ではなく、それを実現するプロセスづくりに苦労するチームも少なくありません。
さらに厄介なのは、せっかく集めたユーザーの声も、時間をかけすぎては意味がないということです。だからこそ短いフィードバックループが重要になります。時間をかけてフィードバックループをさらに短くしていく努力も欠かせません。
DevOpsをうまく実践すると、実際にどんな変化が起きるのでしょうか。2021年の調査では、開発者の60%が「DevOpsのおかげでコードのリリース速度が2倍以上になった」と回答しています。ほかにも、コード品質の向上、市場投入までの時間短縮、より的確な計画立案といったメリットが挙げられます。
さらに、DevOpsの実践がうまくいくと開発者の満足度も上がるという声も多く寄せられました。実際、満足度の高い開発者ほど生産性が高いという科学的なデータもあります。
特に組織にとって初めてのDevOps導入となると、最初のうちはどうしても苦労がつきものです。よくある壁をいくつか挙げてみます。
組織でDevOps導入の準備を進めるなら、次のようなステップを踏むとよいでしょう。
DevOpsの導入と定着は、世界的なパンデミックによって大きく後押しされました。調査結果を見ると、チームは「どうすれば一緒に働けるか」という文化面の課題を乗り越え、「どんな技術を選ぶべきか」を考える段階へと進んでいます。KubernetesやDevOpsプラットフォーム、そして人工知能(AI)・機械学習(ML)といった先進技術の活用は、これからのDevOpsの姿を映し出しています。
自動化はさらに進み、コードレビューのような領域を皮切りにAI・MLがより賢い意思決定を後押しし、DevOpsプラットフォームの普及も含めてツール選びもより実践的になっていく、そんな未来が見えてきます。
このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
フィードバックを共有する