DevOpsとは?

大規模なサービスの運営効率向上に有効といわれるDevOps

Devは「Development」つまり開発チーム、Opsは「Operation」つまり運用チームを指します。

DevOpsとは、システム運用の柱である開発チームと運用チームが良い協力関係を築き、サービスレベルを向上するための取り組みのことです。

その起源は、2009年に開催された国際会議「Velocity 2009」にて写真共有サービスのFlickr社のセッションタイトルからといわれています。

通常、開発チームは新機能や修正をどんどんデプロイしたいのに対し、運用チームはシステムの安定化を最優先するため対立しがちです。

しかし、Flickr社では開発チームと運用チームがうまく連携できる仕組みを構築して、1日に10回のデプロイを成し遂げた事例を紹介し話題となりました。

ここでは、実際のDevOpsでは具体的にどのようなことをするのか、そのメリットや使用されるツール、資格試験について説明します。


DevOpsのメリット

まずは、DevOpsを導入することでどのような恩恵があるのかを見てみましょう。


チーム連携の改善

開発チームと運用チームの連携をサポートする様々な仕組みが導入されます。

環境構築やリリースの手順が複雑で、引継ぎも煩雑だったのが、管理手法の統一コミュニケーションツールの導入により解消されるでしょう。

この部分の効率が上がればチーム間の連携は格段に向上し、対立や衝突の機会が減らせます。


信頼性の担保

DevOpsでは運用の手間を極力減らすため、自動化できる部分は徹底的に自動化します。

これまで人が手作業で行ってきたことが自動で実行されるため、ヒューマンエラーが削減され信頼性が担保されるのです。


俊敏性の向上

従来は、開発チームと運用チームの指針のズレから、リリース頻度を低くしなければならない傾向にありました。

DevOpsを導入すれば、両者の連携が向上し、より短いスパンでリリースを繰り返すことができます。

まさに冒頭のFlickr事例のように、システムを俊敏に進化させていくことが可能です。


アジャイル開発との違いは?

DevOpsメリットの最後に「俊敏性の向上」というキーワードが出てきました。

ここで、「アジャイル開発のこと?どう違うの?」という疑問がわいたかもしれません。

アジャイル開発とは、開発・リリース・修正を短い開発期間で繰り返す開発手法のことです。

DevOpsではあくまで開発チームと運用チームの連携向上を目的としており、その手段の1つがアジャイル開発である、という関係性になっています。

実際にはアジャイル開発のみならず、後述するような様々な手法を実施することでDevOpsが実現されるのです。


DevOpsサイクル

ここからは、具体的にDevOpsがどのように実現されるのかを見ていきましょう。

DevOpsの実施方法は、本記事冒頭の図のように、開発側・運用側の各フェーズをスムーズに繋ぐサイクルとして表現されることが多いです。

  • 開発:コーディング(CODE)によりソフトを開発する
  • 継続的インテグレーション:ビルド(BUILD)とテスト(TEST)を行い共有リポジトリへアップデート(RELEASE)し公開(DEPLOY)する
  • オペレーション:インシデント対応(OPERATE)やアプリ・サーバの監視(MONITOR)
  • 継続的フィードバック:顧客フィードバックに基づき次の開発計画(PLAN)を行う

次項では各フェーズで使用されるツールを紹介します。


開発

定められた要件定義や設計に基づきコーディングを行うフェーズです。

開発者向けの環境構築ツールや、複数人での開発をサポートするためのバージョン管理ツールが使用されます。


Docker

Dockerは、仮想環境の作成・配布・実行のためのツールです。

従来の開発では、本番環境と同様のミドルウェアやライブラリをインストールして個別の開発環境を準備する必要がありました。

しかし、個別に実施するとパスの設定ミスバージョン違い等、多くの問題が発生しなかなか環境が整わず開発に進めなかった経験のある方は多いはずです。

Dockerの肝は、この問題を解決するために本番環境同等のレプリカ環境を簡単に提供するコンテナ技術です。

また、IaC(Infrastructure as Code)の思想に基づき、ミドルウェアやライブラリの環境設定を人が行うのでなく、コード化して管理します。

これによりツール側が自動で対応できるようになり、人手の手間やミスを削減することが可能です。

Docker公式ページ


Git

Gitはソースコードのバージョン管理ツールです。複数人からなるチームでの開発には欠かせません。

ファイルやディレクトリの状態を記録する「リポジトリ」を作成し、変更履歴を管理します。

全体を統括するリモートリポジトリに加え、開発者ごとにローカルリポジトリを持つことができ、隅々にわたり整合性を保てるのです。

また、バージョン管理を行うことで、問題が発生した際にひとまず発生前のバージョンにロールバックしたり、どの変更が原因なのかを早く究明できます。

Git公式ページ


継続的インテグレーション

CI(Continuous Integration)とも呼ばれる手法です。

各開発者が自分の書いた新コードや修正をなるべく短期スパンで頻繁に全体リポジトリにマージし、ビルドテストを行うことを指します。

大掛かりな追加や変更をいきなりマージするのではなく、小さな段階でマージし挙動確認をすることで、問題を早期に発見し修正することが可能です。

このフェーズで使用されるツールはCIツールと呼ばれます。

また、ビルドとテストだけでなく、テストが通ったらデプロイまで行うことを継続的デリバリーといい、この機能を持つツールも多いです。


Jenkins

JenkinsはJava製のCIツールです。オープンソースのため広く使用されています。

共有サーバにインストールして使用ブラウザから設定や操作が行えるGUIツールが提供されていて、直感的に操作することが可能です。

また、Gitなどの主要なバージョン管理ツールをサポートしているため、様々な環境で使用できます。

Jenkins公式ページ


Circle CI

Circle CIは有償CIツールで、2018年に日本法人が開設されたためサポート面が手厚く安心といえるでしょう。

テストやデプロイの自動化はもちろん、SSH経由でアクセスできるため使いやすさに定評があります。

Circle CI公式ページ


オペレーション

デプロイが完了したら、今度はシステムを運用していく必要があります。

実施することは大きく2つ、アプリケーションやサーバーパフォーマンスの監視と、インシデント発生時の対応です。

パフォーマンス分析ツールコミュニケーションツールが大きな役割を果たします。


New Relic

米国New Relic社が提供するパフォーマンス分析サービスです。

SaaSとして提供しており、アプリケーション・サーバー・モバイルアプリなど様々な対象のパフォーマンスモニタリングを簡単に導入できます。

New Relic公式ページ


Slack

パフォーマンスに異常が発見されたり、その他問題が発生した際は自動的にグループチャットに通知が届くようにしていち早く対処する必要があります。

チャットツールには様々ありますが、トップレベルの人気を誇るのがSlackです。

自動通知を担うbot機能や、TODOの登録・管理機能など、エンジニアにとって使いやすい仕組みがたくさんあります。

Slack公式ページ


JIRA Service Desk



JIRAシリーズはAtlassian社が提供するエンタープライズ向けのIT管理ツールです。

このうち、JIRA Service Deskはチケット管理を行うツールで、インシデントやバグ等発生時に内容を登録し対応状況を追跡するために使用されます。

JIRA Service Desk公式ページ


継続的フィードバック

一通りの開発・運用のサイクルの中に、もう一つ忘れてはならないフェーズがあります。

それは、サービスや製品を実際に使用している顧客からの声を集め、対処すべき不満や要望を抽出し次の開発計画に組み込むことです。

このフェーズはどちらかというとマーケティングの側面が強いですが、ここでも様々なツールが活躍します。


Hootsuite

顧客との接点として、SNSは欠かせない存在となりました。

Hootsuiteは複数のSNSアカウントを一元管理し、通知の確認やポスト予約など、煩雑な作業をまとめて行える便利ツールです。

また、各SNSでの投稿に関して、閲覧数や反応数などのデータ分析も実施できます。

Hootsuite公式ページ


SurveyMonkey

顧客の声をダイレクトに聞けるならばそれ以上のことはありません。

SurveyMonkeyはオンライン上で簡単に作成・配布できるアンケートツールです。小規模なものなら無償での使用も可能です。

アンケート数が多い場合は、有償プランを活用するとデータ集計も実施できます。

SurveyMonkey公式ページ


DevOps資格の難易度

実際にDevOpsに関わるエンジニアとして十分な素質があるかどうかを証明するため、クラウドサービスを提供する各ベンダーが資格試験を実施しています。

どのベンダーでも、実施する資格試験には難易度に応じてレベルを設けていますが、DevOps資格は最上位クラスの位置付けです。

ここまで見てきたように、様々なツールを使いこなして大規模なサービスを開発・運用する手腕が問われるだけのことがありますね。

DevOpsエンジニアとしての十分な経験に加え、資格を取るために必要な学習時間は200〜300時間程度といわれています。

どのような資格があるのか見てみましょう。


AWS認定 DevOpsエンジニア

AWS認定試験のうち、最上位であるProfessionalクラスの資格です。

試験内容としては、ユースケースと要件が提示され、それに対するソリューションを選ぶ問題がメインとなっています。

AWS認定のため、当然といえば当然ですがAWSの使用を想定した出題が多いです。

実際にAWS上でサーバ環境構築テスト・ビルドの自動化を行った経験があれば有利となるでしょう。

AWS認定 DevOpsエンジニア 公式ページ


Microsoft資格 Azure DevOps Engineer Expert

Microsoft社の認定資格で、DevOpsエンジニアの素質が広く試される試験です。

Azure上での開発・運用が前提となっており、Azureを使った開発手法が出題範囲に含まれます。

また、DevOps戦略の設計開発プロセスの実装等、DevOpsの概念に関わる部分が多く出題されるのも特徴です。

教材や試験問題が公式ページで公開されているので、そちらを学習すると効率よく取得できるでしょう。

Azure DevOps Engineer Expert公式ページ


GCP認定 Professional Cloud DevOps Engineer

Google社の認定資格です。より実践的な内容が問われる試験内容となっています。

出題範囲はGoogle Cloud Platformを使用した一通りのDevOpsサイクルに関わる内容です。

例えば、継続的インテグレーションパイプラインの構築や実装、デプロイモニタリングインシデント対応などが含まれます。

また、GoogleではDevOpsの具体的な実践方法としてSRE(サイト信頼性エンジニアリング)の概念を提唱しています。

学習の合間の知識づけとして、そちらの関連書籍を読んでみるのも参考になるでしょう。

Professional Cloud DevOps Engineer 公式ページ


まとめ

DevOpsについて、その概念や使用されるツール、混同されやすいアジャイル開発との違いについて説明しました。

大規模サービス運用をより良くしていくための手法ではありますが、日々の個別開発にも役立ちそうなヒントが多くあります。

例えば、煩雑な工程の自動化や、継続的インテグレーションでの問題早期発見・対策等は取り入れるとよりスマートな開発ライフとなるはずです。

書籍も多く出版されているので、より知識を深めたい方は手に取ってみることをおすすめします。