DevOpsとは
ソフトウェア開発の分野でよく聞く『DevOps(デブオプス)』とは、どのような意味の言葉なのでしょうか? 定義やアジャイル開発との違いについて解説するので、理解の参考にしましょう。
厳密な定義はない
DevOpsは注目を集めている取り組みなので、さまざまなところで取り上げられています。イベントや勉強会も頻繁に行われているテーマですが、『厳密な定義がない』ということは知っておきましょう。
そのため「単にシステムのリリースを短期間に繰り返すことを指している」といったような誤解したまま理解している人も多くいます。
システムのリリースを短期間に繰り返すというのは、あくまでもDevOpsを実行するための方法です。
製品の価値やユーザーの利便性を高め、それをより早く確実に届けるのが、DevOpsの目的といえます。そのためには『開発チームと運用チームの協調関係が必要』という概念と理解するとよいでしょう。
DevとOps
DevOpsは、DevとOpsの二つの単語から構成されています。Devは『Development』の略で開発チームのことを、Opsは『Operations』の略で運用チームのことを、それぞれ表しています。
ソフトウェアといったシステムを作る会社には、常に新しくユーザーのニーズに合ったサービスを開発したり追加したりする開発チームと、安定したサービスを供給する運用チームがあります。
両者の目的は、「製品の価値やユーザーの利便性を高めること」です。しかしそのための方法は正反対のため、組織によっては対立することもあります。
その構造を協調関係にすることで、全体で目的達成に向かえる状態を整えることも、DevOpsでは大切です。
出典:DevOps とは? - DevOps と AWS | AWS
アジャイル開発との違い
『アジャイル開発』のことをDevOpsだと考えている人もいますが、両者は、完全に一致するものではありません。DevOpsを実施するための方法として、アジャイル開発が用いられることが多いのです。
アジャイル開発では、顧客と連携して開発を行います。共同開発チームを作り、システムを作るのです。
このとき、従来のようにシステム全体を一気に作ることはしません。システムを細かなセクションに分け、それぞれを2週間ほどで開発してリリースします。
リリースしたシステムはそれでおしまいではありません。フィードバックをもらい、適宜修正や開発をして再度リリースするのです。このサイクルを短期間のうちに繰り返し、高い完成度を目指します。
出典:DevOpsとアジャイルの違い| 株式会社 インテリジェント・モデル
DevOpsの目的
組織がDevOpsを導入するとき、その目的はどのようなものなのでしょうか? 開発チームと運用チームそれぞれの目的と、組織としての関係性について解説します。
Devの目的
DevOpsを導入した開発チームは、ユーザーの求めているものを反映させたシステムを構築したり、機能を追加したりしやすくなります。
開発チームとユーザーの間で直接やり取りが発生することはまれです。そのため、本来目指している、ユーザーに役立つシステム作りが思うようにできないことがあります。
ユーザーのニーズを直接聞いているのは運用チームです。そんな運用チームとの連携ができるDevOpsなら、現場の声をより多く反映した開発ができます。
また、実際にシステムを使う現場の声をくみとり、スピーディーに修正・改善に役立てることも可能です。
Opsの目的
運用チームが考えることは、システムの安定的な稼働です。不具合が起きることなく、今あるシステムが正常通りに動くことを第一とします。
そのため、新しいシステムの構築や、システムの修正をしたがらないことも多いのです。これは、開発チームとの意思の疎通が思う通りにできないこととも関係します。
一方、開発チームの目的は「より便利なサービスの付属やシステムを更新すること」です。これは、運用チームの目的と真っ向から反します。
しかしDevOpsなら、開発チームとのやり取りを通して、さまざまな要望を聞いたり伝えたりできるのです。そのため、社内の開発チームにもユーザーにも、素早く対応できます。
両者の関係性
開発チームと運用チームはどうしても対立しやすい構造をしています。「よいシステムでユーザーに役立つ」という目指すところは同じでも、そのための方法に違いがあるからです。
DevOpsでは、そんな開発チームと運用チームが協調することを目指します。
ツールの導入や、システムの開発手法に注目が集まりやすいDevOpsですが、お互いに気軽にコミュニケーションできる関係性の構築も非常に重要です。
チャットサービスやその他のツールを活用し、マメにやり取りします。こうすることで、本当に必要とされ役立つシステムを、常にリリースし続けられる組織へと成長できます。
DevOpsのメリット
DevOpsを取り入れると、組織はどのように変化し、プロジェクトはどのように進んでいくのでしょうか? 導入のメリットとして代表的なことを紹介します。
信頼性の向上
開発チームと運用チームの対立について先に触れましたが、DevOpsを導入すると、その構造が協調関係へと変化していく可能性があります。それは、ツールの導入による精度アップと関係しているのです。
さまざまなツールを活用し、作業の自動化ができると、ヒューマンエラーが最小限に抑えられたり、システムの品質が一定以上であることが保証されたりします。
つまり、開発チームは、ユーザーの求めるシステムをよりスピーディーに確実に配信することができます。
質が高いシステムを確実に配信できるのであれば、運用チームは新システムへの変更を受け入れやすくなります。その結果、両者の信頼性が高まっていくでしょう。
俊敏性の向上
「俊敏性」や「すばやさ」に由来するアジャイルに代表される柔軟でスピーディーな開発手法を取り入れるのは、DevOpsを導入する際によく行われることです。その結果、システム開発はより早くユーザーのニーズに応えられるものになります。
開発チームと運用チームの連携がスムーズに機能することもポイントです。両者で密なやり取りが発生することにより、ユーザーのニーズが開発チームに伝わりやすくなります。
開発チームはそれをもとに、すぐに修正や改善・開発に取り組めるのです。そのため、変化する市場への対応が後手になることもありません。俊敏な対応で、ユーザーの満足度を高められるでしょう。
生産性の向上
DevOpsの機能が働き始めると、開発チームと運用チームの共同作業が増え、ワークフローも混ざり合います。それに伴い、チームごとに進行することで起こっていた、非効率性が排除されるのです。
チームどうしが緊密にやり取りするようになると、開発チームは、システムが実行される環境を意識するようになります。すると、コードの書き方にも違いが出てくるでしょう。
その結果、システムがスムーズに稼働するようになり、開発から運用への引き渡しがスムーズにできることにもつながります。
また、作業を自動化できるツールの導入も生産性向上に役立つでしょう。半自動化することで逆に手間取っていた部分を、徹底的に効率化できます。
DevOps実現のための主な手法
組織運営でDevOpsを実現するには、うまく自動化を取り入れることが欠かせません。自動化することで、ソフトウェアやアプリケーションなどをより早く質の高い状態でユーザーに提供できるからです。
ここでは、自動化のために活用すべき手法について解説します。
継続的インテグレーション
小さなサイクルで自動的にビルドとテストを繰り返しながら、大きなシステムを完成させていく手法を、『継続的インテグレーション(CI)』といいます。
最初からシステム全体を作るのではなく、小さな部分からコードを作成し、こまめに保存場所へと統合します。
このとき、テストで不具合が発見されたら、影響する範囲が限定されているうちにすぐに修正するのです。
この工程を繰り返すことで、徐々に大きなシステムを作りあげていきます。テストをする範囲も広げていき、最終的に全体のシステムが滞りなく稼働することを目指すのです。
エラーをすぐに解消できるので、システム開発の手が止まらず、質の高いシステムのスピーディーな開発につながります。
継続的デリバリー
『継続的デリバリー(CD)』は、CIにリリースプロセスの自動化を追加した手法です。手動でチェックしなければいけないのは、運用環境へ更新するタイミングに限定されます。
コードを変更したときのビルドやテストはもちろん、テスト環境でシステムが稼働するようにしたり、システムテストやUIテストをしたりするところまで自動化されているので、手間がかかりません。
他にも、ロードテスト・統合テスト・API信頼テストなどで、更新を自動的かつ徹底的にチェックでき、事前に問題を発見できます。
システムが実際に使えるようになってから、フィードバックを受け取るまでの時間が短縮できるので、市場に適した修正を迅速にできるのです。
継続的デプロイメント
システムの作成からテスト、リリースまで全て自動的に実施するのが『継続的デプロイメント』です。
開発チームが修正コードを作成してから、実際に変更されるまで、コードに問題さえなければほんの数分でできます。手動で実行することで時間がかかっていたリリースが、スピーディーになるのです。
そのため、ソフトウェアやアプリケーションの提供が遅れる、ということがありません。
全てが自動化される継続的デプロイメントでは、テストが特に重要です。誤りなく設計されたテストが実行されるからこそ、自動化が実現します。
よりスピーディーでタイムラグが少ない手法のため、ユーザーからのフィードバックを反映することも簡単にできるのです。
Infrastructure as Codeとの関係
『Infrastructure as Code』は、インフラの構築や運用を自動化するために、構成をコードにしておくことです。コードの利点は、再利用性の高さにあります。
ヒューマンエラーを最小限に抑えられ、詳細を追いやすくなるのもメリットといえるでしょう。この手法を利用することで、ITインフラの構築といった面でも、DevOpsの考えに基づく開発が可能です。
また、ソフトウェアやアプリケーションの開発を自動化する手法を用いる場合、同じように自動化できる手法をインフラ構築でも用いることは、大きな利点といえます。
出典:DevOps とは? - DevOps と AWS | AWS
DevOps実現のための主なツール
組織論であるDevOpsは、実現のためにツールを活用します。必要なツールにはどのようなものがあるか紹介するので、導入の参考にしましょう。
バージョン管理システム
システム作成の際、どれが最新バージョンなのか、一つ前のバージョンはどれなのか、管理するのは大変です。
チームで作業している場合はもっと複雑で、一つのファイルを2人で同時に操作してしまい、変更が上書きされてしまった、ということが起こります。そこで必要なのが、バージョン管理システムです。
代表的なシステムは『Git』です。「せっかく行った変更が上書きされてしまった」「最新バージョンがどれか分からない」といった事態を解消できます。
Gitには、クラウド上で使う『GitHub』と、自社サーバーにインストールして使う『GitLab』があります。『Git Flow』や『Git Hub Flow』といったサービスが代表的です。
The first single application for the entire DevOps lifecycle - GitLab | GitLab
CIツール
組織の規模がある程度以上大きくなり、チームを立ち上げることになると、継続的インテグレーションを管理するツールも必要です。チーム内での情報共有や、スケジュール管理に役立ちます。
他にも、テストの自動化によって手動の手間を省いたり、不具合の早期発見に役立てたりすることが可能です。テストの結果やエラーの発生状況もスムーズに把握できます。
また、コーディングのルールにのっとって書かれているか、バグにつながるコードがないか、といった静的解析も実施可能です。
CDツール
継続的デリバリーでは、リリース前の承認までの工程を、ツールで自動化することが欠かせません。そのために利用するのが、専用の『CDツール』です。
CDツールで実施するのは、全ての工程を自動化することではありません。それぞれの工程に必要なツールを個別に導入し、そのツールをどのタイミングで呼び出すか指示するものです。
エラーが出たらすぐにフィードバックする機能もあります。
代表的なCDツールとしてあげられるのは『Jenkins』です。プラグインも豊富なので、必要な機能をプラスしながら使えます。
参考:CI/CDのエキスパートが解説:CI/CDとは何か? なぜ今、必要とされるのか? (1/3):CodeZine(コードジン)
DevOps実現のポイント
先ほど紹介したツールは、DevOps実現のために必要です。しかし、ツールさえあれば仕組みが整うわけではありません。
ポイントは、新しい組織文化です。開発チームと運用チームが協調関係を築ける組織文化が必要といえます。
互いの尊重や信頼
DevOpsが機能する組織に欠かせないのが、「お互いを尊重して信頼し合う関係」です。
役割が違えば、第一に優先すべきことも当然違います。その違いとお互いの能力を正当に評価し認めて、思いやりを持って接しましょう。そうすることで、お互いを尊重し合うことにつながります。
尊重し合えれば、信頼が生まれるでしょう。すると、安心して仕事を任せられます。
ひとりで問題を抱え込んだり、負担を負ったりすることがなくなりますので、それぞれの仕事のしやすさにもつながります。
問題や失敗に対するスタンス
問題や失敗など障害にぶつかったときの対処方法も大切です。
何か問題が起こったときには、どうすれば同じ問題が起こらないか? 問題解決のためにできることは何か? と、一緒に考えましょう。
当事者を非難せず、一緒に取り組む姿勢によって、建設的な組織文化ができます。
また、失敗を責めないことも大切です。失敗するということは、それだけ新しいことにチャレンジしているのだと認識し、応援しましょう。
成功のためにはチャレンジが必要です。しかし、失敗を責めてしまうと、成功の芽を摘み取ることにつながります。
サービスを活用しよう
DevOpsを組織に取り入れるためのサービスを活用するのもよいでしょう。拡張可能なパッケージを使えば、手間なく仕組みを構築できます。自社に適したサービスを選びましょう。
Amazon AWS
『Amazon AWS』は、Amazon社内の課題解決のために生まれノウハウでした。それを企業向けサービスとして提供しているのです。タスクの自動化やチームの環境をサポートし、より高速なリリースを目指せます。
利用も手軽です。AWSのアカウントさえ持っていれば、セットアップやソフトのインストールは必要ありません。しかも、初期費用や解約金が必要ないので、無駄な費用がかからないのです。
無駄なく必要な機能を簡単に使えるサービスなので、ソフトウェアやアプリケーションの開発に集中できます。
また、ユーザーのアクセス許可やポリシーを細かく設定できるのもメリットといえるでしょう。
Microsoft Azure DevOps
Microsoft社内で、実際に製品のリリースに使われてきたサービスを提供するのが『Microsoft Azure DevOps』です。さまざまなアプリケーションに対応可能ですし、他のサービスとの連携もできます。
自由に組み合わせることで、使い勝手のよいサービスとして活用可能です。サービス内の代表的な機能を下記に紹介します。
- Azure Pipelines:CIツールやCDツールとして機能し、Gitを使ったコードの統合
- Azure Boards:ダッシュボードやレポートを使用した作業追跡
- Azure Artifacts:コードから特定のパッケージを抽出してまとめる
- Azure Repos:プライベートGitの保管場所を無制限に使用可能
- Azure Test Plans:必要なテストを自動で実施できるテストツール
Azure DevOps Services | Microsoft Azure
まとめ
ユーザーのニーズにぴったりのシステムを提供して、満足度を高めることを目的に取り入れられる組織論をDevOpsといいます。
さまざまな自動化ツールを取り入れ、開発チームと運用チームの緊密な連携で、よりスピーディーなリリースを目指すのです。
開発スピードがアップするだけでなく、ユーザーからのフィードバックも早くなるので、市場に合わせたシステムへ素早く修正できます。
DevOpsで、目的のために滞りなく機能する組織を目指しましょう。