ソフトウェア開発の現場では、「DevOps(デヴオプス)」および「アジャイル(アジャイル開発モデル)」がすっかり定着しました。しかし、両者の違いをいまいち理解していない、という方もまだ多いでしょう。また、ビジネスにおけるITの存在感が極めて高い今、ソフトウェア開発に直接かかわりのないビジネスパーソンでも、基礎知識として2つの開発もモデルについて理解しておくとよいでしょう。本記事ではDevOpsとアジャイルの違いを解説します。
DevOpsとアジャイルの違い
DevOps
DevOpsとは開発チームを指す「Development」と、運用チームを指す「Operations」という2つの言葉を掛け合わせた造語です。ソフトウェア開発の現場では、製品に新しい機能やサービスを開発・追加するチームと、安定したサービスを提供するためのチームが存在します。これら開発と運用のチームを同じ部門で行っているという企業もあるでしょうが、担当者が自然と区分されているケースが多いでしょう。
とどのつまりDevOpsとは、製品が持つビジネス価値を高め、さらにユーザーが感じる利便性を高めるために開発チーム(Dev)と運用チーム(Ops)が協力体制を取り、開発・運用を推進するための開発モデルを指します。
ここで、「開発チームと運用チームって、そもそも協力しているものじゃないの?」という疑問が生じる方も多いでしょう。確かに、開発チームと運用チームは本来協力し合うべき関係なのですが、互いの目標地点が異なるがために対立関係になることが少なくありません。
開発チームはユーザーが持つニーズを満たしたり、製品が飽きられたりしないために常に新しい機能やサービスのリリースを考え、開発を進めます。一方、運用チームは製品の安定稼働を目指して日々パフォーマンス調整を行い、ユーザーの利便性を維持しようとしています。新しい機能やサービスのリリースが短期間であるほど、製品の安定稼働は難しくなるため、「開発チームは運用のことをよく理解していない」「運用チームはサービスリリースの重要性を理解していない」という意見の対立が生まれてしまうのです。
しかし、本来は「ソフトウェア製品を通じてユーザーの利便性向上の課題解決を促し、ビジネス価値を高める」という目標が一致しているはずです。これに着目して開発チームと運用チームが協力することの重要性を説いたのがDevOpsというわけです。
アジャイル
アジャイル(Agile)という言葉は日本語で「俊敏」を意味します。アジャイルはDevOpsのような協力体制の話ではなく、具体的な開発手法を意味する言葉です。
アジャイルが主流になる以前のソフトウェア開発では、「ウォーターフォール(ウォーターフォール開発モデル)」と呼ばれる開発モデルが主流でした。この開発モデルは、開発プロセスの最初から最後までが一連の鎖のように繋がり、1つの大きな開発プロジェクトを形成しているのが特徴です。
ソフトウェアの要件定義に始まり、外部設計⇒内部設計⇒テスト設計⇒プログラム作成⇒各種テスト実行⇒運用テスト⇒納品という開発プロセスを順々に辿ります。各開発プロセスには明確な成果物が設定されていて、それを満たすことで次の開発プロセスに進むため品質が自然と担保されるという開発モデルです。
それに対し、新しい開発モデルとして誕生したのがアジャイルです。アジャイルが重視するのは「ユーザーにとってのビジネス的価値」であり、開発プロセスの最初に定義したソフトウェアを正確に作ることに固執しません。というのも、ソフトウェア開発ではプロジェクト途中で要件・仕様が変更になることが多く、開発の柔軟性を確保しなければユーザーにとってビジネス価値の高いソフトウェアは完成しません。
実は、ウォーターフォールはプロジェクト途中での要件・仕様変更に弱く、一度変更が生じると思いもよらぬ工程まで逆戻りしなければいけないケースや、開発スケジュールを圧迫した想定よりも低品質なソフトウェアに仕上がってしまうケースが多々あります。
それに対してアジャイルは要件・仕様の優先度に応じて開発プロジェクトをいくつも立ち上げて、各プロジェクトの中で短い開発サイクル(イテレーション)を繰り返します。最終的に各プログラムを統合した1つのソフトウェアを完成させるため、たとえプロジェクト途中で要件・仕様の変更が生じても、影響が及ぶ範囲を最小限に留められることから開発柔軟性が確保されます。
違い
以上のことから、DevOpsとアジャイルには決定的な違いがあることが分かります。ただし、まったくの無関係ではありません。DevOpsに採用される開発モデルはアジャイルであり、DevOpsはアジャイルの一種とも言えます。
DevOpsはアジャイルと取り入れることで完成する開発チームと運用チームの協力体制なので、どちらか一方の開発モデルに固執する必要はありません。
DevOpsを実現するために必要なこととは?
DevOpsに注目が集まったのは2009年のことです。当時、米国の大手メディア企業であるオライリーが開催した「Velocity 2009」という年次カンファレンスにて、写真共有サービスを展開するFlickrのエンジニアが、同社の開発・運用体制に関するセッションの中でDevOpsを紹介しました。
Flickrのセッションでは、DevOpsによって1日10回以上のデプロイを行った事例も紹介しています。
セッションを担当したエンジニアは、DevOpsの実現にあたり開発チームと運用チームの間で以下のような「組織文化」を構築することが欠かせないと説明しています。
互いを尊重する
役割は違っても、一緒に働いている相手を心から思いやること。それが尊重の気持ちです。そしてチーム1人1人の能力や功績を評価して、皆が優秀な人間と認めること信頼関係を築く上で大切です。
互いを信頼する
「自分以外の皆はすべて優秀」と認めることで信頼が生まれ、自分の仕事も任せられるようになります。最もやってはいけないことは、「この仕事は自分にしかできない」と抱え込むことです。そうして1人1人の精神的負担が軽くなることで、ポジティブな思考が生まれた活気あるチームへと成長します。
失敗を責め合わない
新しいことに挑戦するということは、失敗の連続でもあります。しかしその失敗を責めてはいけません。それが他者のチャレンジ精神を潰すことになり、チャレンジが無ければ成功も無くなってしまうからです。
解決策を一緒に考える
何か問題が起こったときはその当事者を非難するのではなく、同じ問題が起こらないためにどうすればよいのかと解決策を一緒になって考えることが大切です。それが建設的な組織文化を生み出す要因になり、開発チームと運用チームが互いに理解し合うきっかけになります。
以上の組織文化の他、DevOpsには両チームを繋ぐ様々なツールの活用も欠かせません。また、互いのデスクを近づけることで仕事の可視化を図ることにより、互いの理解を促進することもできます。
いかがでしょうか?DevOpsとアジャイルに違いについて知った後は、ぜひDevOpsの実現に取り組んでみてください。