この記事では、DevOpsを背景から読み解き、基本・目的・導入方法などをわかりやすく解説していきます。初心者の方からエンジニアの方までこれさえ読めばDevOpsがもっと身近に感じるでしょう。
DevOps(デブオプス)とは?
DevOps(デブオプス)とは、Development(開発)とOperation(運用)を組み合わせてできた言葉です。開発担当者と運用担当者が協力してスムーズに開発、運用をすすめ、システムの価値を継続的に向上させるための概念です。
開発者はコードを素早く完成させ、システムをスピーディーにデプロイしたい一方、運用者はテストに十分時間をとってからデプロイしたいため、常に対立する問題が起きていました。DevOpsを採用することで両者の対立を解消し、システムのリリースサイクルが飛躍的に改善されます。
背景から学ぶ DevOpsの機能・基本知識
従来は「ウォーターフォール型開発」という開発モデルが主流でした。しかしウォーターフォール型開発では、要求→設計→開発→テスト→リリースまでに1〜2年もの膨大な時間が費やされていました。
開発に1〜2年またはそれ以上を費やして完璧なコードを仕上げたとしても、開発段階はあくまでも戦略であり、「これはいける!(と思う)」という仮説に過ぎません。リリース後に実際に顧客に使ってもらえなければ開発に費やしてきた年月、経費全てが水の泡となってしまいます。
そこでアジャイル型開発と呼ばれる開発モデルが発案されました。アジャイルとは英語の「すばやい」「俊敏な」という意味で、要求→設計→開発→テスト→リリースの開発工程を、1つの機能単位とし、小さいリリースサイクルを繰り返す開発手法です。
これより従来1〜2年かかっていたリリースサイクルが、1〜2週間と劇的に短縮されることになりました。 しかしこのアジャイル型開発の問題点は、綿密なテストにはやはり半年ほど必要とされ、QA(品質管理)する人を開発の段階から入れる継続的デリバリーを採用しても、運用部門で運用するためのインフラ構築が必要となり、ここで更に1ヶ月以上の時間がかかるといった問題がありました。
ここで全てを解決するために発案されたのがDevOpsという考え方です。 Flickr社が2009年に「10 deploys per day」(1日10回デプロイするために必要な考え方)を発表しました。ツールと社内文化を変えることにより、開発部門と運用部門が協力し、混乱なくサービスを1日10回も更新することを可能にしたという考え方です。
DevOpsのメリット・利点に関して
DevOpsのメリット・利点を5つにまとめました。
開発スピードの向上
DevOpsは開発担当者と運用担当者の連携が取れる仕組みがあったり、あらゆる作業の自動化が可能になったりすることで開発スピードが劇的に向上します。また、マイクロサービスと継続的デリバリーによって、更新をすばやくリリースできるため、変化し続けるユーザーのニーズにも素早く対応できます。
システム安定性の向上
短期間で開発を繰り返し行うことで、バグや不具合を発見しやすくなります。また、従来人間が行ってきたビルドやデプロイなどの作業を自動化することよりヒューマンエラーを防ぐことができます。これらの実現により作業の信頼性を高め、システムの安定稼働を維持することができます。
生産性の向上
DevOpsを取り入れることで、ツールを活用して開発担当者と運用担当者の連携を強化することができます。そうすればリリースまでのプロセスが促進され、ユーザーのフィードバックを反映させやすくなり、生産性の向上につながります。
セキュリティの向上
継続的インテグレーション(CI/CD)、継続的デリバリー、継続的デプロイのパイプラインにセキュリティを統合することによって、 高いセキュリティをサービスに組み込むことが可能となります。
ビジネス競争力の向上
DevOpsの体制を組まなければ、マネジメント部門からの新サービスの要求に対応できない、ユーザーの要求にタイムリーに対応できないなど競争社会において遅れをとってしまいます。またそのような状態のままでは、DevOpsを採用し素早く質の高いサービスを提供している企業に市場を奪われてしまうことが容易に想像できます。そういった状況を避け、日々変化する市場で競争していくためにはDevOpsの採用が必要不可欠といえるでしょう。
エンジニアにとってのDevOpsの必要性と重要性
DevOpsを採用すれば、頻繁で安全なリリースサイクルを実現できます。 エンジニアは次々とコードを作成し、ソフトウェアのリリースサイクルを加速させる重圧と任務があります。一方運用側は、システムを安定させるテストに時間をとりたいため、リリースサイクルはどうしても遅れてしまいます。そのためエンジニアは自分の任務を遂行できない状況にいます。DevOpsはこのジレンマを解消できる唯一の方法です。DevOpsを取り入れることでシステム全体の統合性と安定性を維持しながら、質の高いソフトウェアを素早いリリースサイクルで提供することが可能になります。
クラウド(Cloud)の役割
迅速かつ効率的にDevOpsを実現するためには、DevOpsの環境をクラウドで構築することは必要不可欠な要素です。クラウドを使用することで、世界中にチームが分散していたとしても、開発部門と運用部門の連携をスムーズに取ることが可能になります。
DevOpsモデルの導入方法
DevOpsモデルに移行するには、文化と考え方を一新させる必要があります。そしてCI/CDツールを利用しこれまで独立していた開発部門と運用部門の間の障壁を取り除き、2 つのチームが一緒に作業できる環境を作ることで開発部門の生産性と、運用部門の信頼性が共に向上します。
DevOpsの文化
2009年Flickr社が発表したDevOpsの考え方では、開発担当者と運用担当者が協力し合える関係を作り上げるため、4つの文化を重要視しています。
-
Respect(尊重する): 一緒に働く相手のことを尊敬し合い、能力や功績を評価し合う
-
Trust(信頼する): 互いに信頼し合い、役割に応じて仕事を任せる
-
Healthy attitude about failure(失敗に対して健全な態度を取る): 失敗は起こるものであり、失敗した相手に対して健全な態度をとる
-
Avoiding Blame(非難しない): 失敗を責めるのではなく、失敗が起こらないように建設的な議論をすすめる
DevOpsとアジャイル型開発の違い
混合されることが多いDevOpsとアジャイル型開発ですが、DevOpsは開発担当者と運用担当者の連携を強化するための考え方や仕組みでり、アジャイル型開発とはシステム開発の開発モデルの一種なので2つは異なる土俵に存在します。しかしDevOpsとアジャイル型開発は密接な関係にあり、DevOpsの仕組みにアジャイル型開発を採用することで、開発担当者と運用担当者の連携を実現しつつ開発のプロセスをスピードアップさせることができます。
DevOpsにおける開発手法
-
(1) 継続的インテグレーション(CI:Continuous Integration): 継続的インテグレーション(CI/CD)とは、自動化されたビルドとテストを実行することです。ビルドとのテストを1日に頻繁かつ自動的に実施可能にし、DevOpsには欠かせない手法です。コードの不具合を素早く発見し修正できるため、短期間で質の高いシステムを開発することができます。この繰り返しを継続的インテグレーションと呼びます。
-
(2) 継続的デリバリー (CD:Continuous Delivery): 継続的デリバリーは、ビルドのデプロイを自動化するリリースパイプラインを作り、コードに変更があるたびに自動的に本番環境へのリリースを準備することです。継続的デリバリーを取り入れることで社内で変更がうまく伝達され、ユーザー価値に焦点を当てやすくなります。
-
(3) 継続的デプロイ (Continuous deployment; CD): デプロイが自動化され、高い頻度で最新の機能を提供し続けることです。市場の変化にスピーディに対応している企業は、継続的デプロイを行っており、最新のソフトウェアをユーザーが常に利用することができるようになっています。
-
(4) 継続的フィードバック: 継続的なフィードバックとは、サービスに対するユーザーからの意見や要望を継続的に受け付け、開発に反映させることです。チャットやメールでの問い合わせ、SNSでのコメントも継続的フィードバックでは開発に取り入れることができます。
-
(5) 継続的モニタリング: システムに不具合が起きた場合、それをリアルタイムで発見し修正する必要があります。そのために必要な手法が継続的モニタリングです。継続的に監視することで、問題の原因を根本から素早く突き止め、システム停止を事前に防ぎ、ユーザー側に起こりうる問題も最小化することができます。本番環境のモニタリングに使用するのと同じツールを開発環境にも導入することで、本番に入る前にパフォーマンスの問題を検出することができます。
DevOpsのベストプラクティス
DevOps のベストプラクティス(一番良い実践方法)は、CI/CDを取り入れ、自動化するリリースパイプラインを作ることです。 開発者は、コードベースで作業しながら、バグの修正やコード品質の向上が可能となります。継続的インテグレーション、継続的デリバリー(CI/CD)、およびデプロイの実施により、シフトレフトが可能になります。
DevOpsツール
DevOps を取り入れるということは、ツールを取り入れ開発と運用のプロセスを自動化し、素早く継続的に繰り返すということです。DevOpsの手法をどれだけ長く実践していても、常に改善の余地があります。 CircleCIでは DevOps 向けに設計された最新のCI/CDツールを提供しています。
まとめ
DevOpsは開発担当者と運用担当者の連携を円滑にすることで開発スピードを早め、システム価値の継続的な向上を目的とする仕組みです。DevOpsはCI/CDツールを駆使することで可能となります。ビジネス競争社会で後れを取らず走り続ける企業には、DevOpsの考え方とCI/CDツールが鍵となるでしょう。