DevOps(デブオプス)は、開発チームと運用チームが協力・連携し、柔軟かつスピーディーにソフトウェア開発を行うことを目指して生まれた概念です。DevOpsを採用することで、プロダクトのビジネス的な価値を高めることを目標としています。
ここでは、DevOpsとは何かについて詳しく解説すると共に、共通点が多く違いがわかりづらいアジャイル開発との関係性や、DevOpsに必要なツールや役立つツール、DevOpsに関する資格などを紹介します。
DevOps(デブオプス)とは、開発(Development)チームと運用(Operations)チームが緊密に協力・連携して、柔軟かつスピーディーに開発を行うソフトウェア開発手法のことです。
従来の開発手法・体制の場合、開発チームと保守・運用チームは、立場の違いから対立してしまうことがしばしばありました。これは、ユーザーやマーケットの需要に応じて新しいシステムやプログラムを開発したい開発チームと、システムを安定的に稼働させたい運用チームでは立場が大きく異なるためです。
DevOpsでは、エンジニアが開発と運用の両方の役割を担うこともあることから、開発チームと運用チームの障壁を取り除くことも目的のひとつとしています。
DevOpsが狙いどおりに機能することで、コーディングの反復と導入が迅速化し、新しいアイデアをソフトウェアに実装するまでの時間が短くなります。また、バグも減少しインフラの安定性が向上します。
これにより、新たなシステムやプログラムの導入がスムーズに行え、サービスやアプリケーションの開発スピードが向上し、結果的にプロダクトのビジネス的な価値が高まります。
つまり、開発チームと運用チームが協力することの重要性を示しているのがDevOpsというわけです。
DevOpsは、以下の4つのコンセプトから構成されます。
1.継続的インテグレーション(CI)
2.継続的テスティング(CT)
3.継続的デリバリ(CD)
4.継続的モニタリング(CM)
DevOpsの登場以前、開発チームは与えられた要件に沿って開発することに責任を持ち、テストや運用は保守・運用チームに任せるフローでした。しかし、DevOpsが機能している開発チームでは、開発者がテストや運用など開発した後も責任を持ちます。
DevOpsの特徴のひとつとして挙げられる、開発チームが各種テストを通じ、自らの書いたコードに対して責任を持つ「シフトレフト・テスト(Shift-Left Test)」があります。
開発とテストのフェーズを一体化することで、開発のフェーズに多くのテストが組み込まれます。これにより、早い段階でバグを見つけて修正でき、効率が良くなることでリリース直前にまとめてテストを行う従来の手法よりも、結果的にリリースも早くなります。
DevOpsは、開発チームと運用チームが互いに協力してはじめて機能します。そのため、組織の文化やメンバーひとりひとりのマインドが大切です。DevOpsにおいて特に重要なポイントは以下の4つと考えられています。
1.互いに尊重しあうこと(Respect)
2.互いを信頼しあうこと(Trust)
3.失敗に対して健全な態度をとること(Healthy attitude about failure)
4.非難しないこと(Avoiding Blame)
これらは、DevOpsに限らずチームで働く上で大切なことですが、チームの垣根を超えてプロダクトを作り上げていくDevOpsでは、さらに重要なマインドとなります。お互いの能力を正しく評価しあい信頼することが、緊密な連携のためには必要です。
IPA(独立行政法人情報処理推進機構)が発行する「DX白書2021」によると、DevOpsについて「全社的に活用している」「事業部で活用している」と答えた日本企業の割合が、合計で10.9%となりました。これは米国企業の52.6%に対してかなり低い数字です。
同じく、「この手法・技術を知らない」の項目では、日本企業が43.8%、米国企業が12.5%となっています。このことから、米国企業に比べて日本企業のDevOpsへの理解や普及がまだこれからであることがわかります。
しかし、たとえばDevOpsで利用される一部自動化ツールなどの実践は進んでいるケースもあると考えられます。DevOpsは定義が曖昧であり、観念的な部分も大きいため、社内文化のレベルにまで取り組みを進めてはじめて、DevOpsが実践されていることに気づくケースもあると考えられます。
出典:DX白書2021|IPA(独立行政法人情報処理推進機構)
DevOpsと似ている、違いがわかりにくい開発手法に、「アジャイル開発」があります。アジャイル開発は、「外部設計→内部設計→テスト設計→プログラム作成→各種テスト実行→運用テスト→納品」といった工程を小さいサイクルで繰り返す開発手法です。各プロセスには明確な目標や成果物が設定されていて、それを満たすことで次の開発プロセスに進むための品質が自然と担保されるという考え方です。
アジャイル開発は、それ以前に主流だったウォーターフォール開発とは違い、「プロジェクトに変化はつきもの」という考え方です。工程を後戻りしない前提で開発を進めるウォーターフォール開発と比べて、小さく後戻りして開発を繰り返し行うアジャイル開発は、開発途中の仕様変更に強く、結果として開発期間を短縮できます。
しかし、アジャイル開発では開発担当者が新しいソフトウェアやコードを頻繁に作成しますが、それらを迅速にテストして実稼働させることには課題が残っていました。そこがボトルネックになりやすく、アジャイル開発の持つ本来の柔軟性が、開発スピードとして十分に反映されない状況が起きがちです。全体のパフォーマンスを重視するDevOpsが狙いどおりに機能すると、こうした問題も自ずと解決されます。
このように、DevOpsとアジャイル開発では言葉の示す意味、意図が違います。なお、DevOpsで採用される開発モデルはアジャイル開発です。DevOpsとアジャイル開発は協力関係にあるといえ、このふたつのどちらかを選択するものではありません。
DevOpsと似た概念に「MLOps(エムエルオプス)」があります。MLOpsはDevOpsが派生したもので、DevOpsの概念を機械学習(ML)の開発・運用のために拡張したものといえます。そのため、基本的な概念は同じですが中身は異なります。
例えば、MLOpsのみにあるものに、機械学習モデルの劣化を監視する「モデルモニタニリング」があります。機械学習モデルは、時間の経過と共に、予期しない理由で精度が下がっていくことがあります。モデルモニタリングは、こうした状況を自動で検知するものです。
MLOpsについては、こちらの記事で詳しく紹介しています。ぜひ、合わせてご覧ください。
DevOpsを狙いどおりに機能させるためには、進捗を管理するツールや、コミュニケーションツールなど、さまざまなツールを活用することが大切です。DevOpsで使用する主なツール、役立つツールには以下のようなものがあります。
CI/CDツールは、CI(継続的インテグレーション)及びCD(継続的デリバリ)に役立つツールです。導入することで、ソースコードのビルドやテストを自動化でき、開発プロセスのスピードアップとコスト削減に役立ちます。
【代表的なツール:Jenkins、Circle CI】
システム開発において重要な、ソースコードのバージョン管理を行うツールです。データの作成者/変更者や、変更日時が確認でき、過去の状態に復元することも可能です。
【代表的なツール:git、subversion】
バグレポートの提出、バグの検証・修正など、バグを解決する一連の流れを管理するためのシステムです。バグの発見から修正、リリースまでを短くしたいDevOpsにおいて、また、ソフトウェアの品質管理を行う上で欠かせない重要なツールです。
【代表的なツール:JIRA、trac】
構成管理ツールとは、主にインフラの構成を記録する目的で使うツールです。インフラにおけるサーバー構成の管理や、ファイル展開を自動化します。
【代表的なツール:Chef、Ansible】
ソフトウェア開発における、単体・結合テスト、アプリケーションテストなどを自動化するためのツールです。
【代表的なツール:Selenium、Appium】
開発チームと運用チームが協力しあってプロジェクトを進めるDevOpsにおいて、双方のチームの情報共有は欠かせません。そのために、電話のように作業を止めることがない、チャットツールが活用されています。
【代表的なツール:Slack、Microsoft Teams】
AWS(Amazon Web Service)、Microsoft Azure、GCP(Google Cloud Platform)ではDevOpsに関する資格を用意しています。この3つのプラットフォームではDevOpsのためのソリューションを用意しており、それらの知識を問う内容になっています。
DevOpsに関する資格でもっとも有名なのが、「AWS DevOps Engineer Professional」です。AWSの「Developer」と「SysOps Administrator」の上位資格となります。AWS環境の運用、管理において2年以上の経験が必要です。
AWSサービスの「開発」「運用」「CI/CD」に関連するサービス全般から出題され、合格には幅広い知識が必要となります。AWSを用いたDevOpsに関してプロフェッショナルレベルの知識があることを対外的に証明できるため、AWSエンジニアとして案件に参画する際や、転職の際に有利な材料となるでしょう。
・AWS CodePipeline
・AWS CodeBuild
・AWS CodeDeploy
・AWS CodeStar など
出典:AWS Certified DevOps Engineer – Professional
Microsoft Azure及びAzure DevOpsを利用したDevOpsの構築に関するスキルについての資格です。「Expert」の名前がつくことからもわかるように、Azureに関する一連の認定資格の中で最上位に位置づけられます。「Azure Administrator Associate」もしくは「Azure Developer Associate」の資格を保有していることが受験の条件です。
Azure DevOpsを中心とした製品に関する幅広い知識はもちろんですが、DevOps戦略の設計など、一般的なDevOpsについての概念・考え方も学べます。
・GitHub
・Visual Studio
・Azure Pipeline
・Azure Kubernetes Service など
出典:Microsoft Certified: DevOps Engineer Expert
Google Cloud認定資格のプロフェッショナル資格のひとつです。Googleが提唱したシステム運用の方法論「SRE(Site Reliability Engineering)」について問われる内容となっており、SREに関する深い知識が必要です。なお、GoogleではDevOpsを実現するための方法がSREであるとしており、このことからDevOpsに直結する資格であることがわかります。
他のふたつの資格と違い、Googleの製品群についての知識はあまり求められません。しかし、CI/CDに関する出題がGoogleが開発を行ったKubernetesを前提とした内容になっているなどの特色があります。
・Cloud Build
・Google Cloud Deploy
・Google Cloud のオペレーション スイート
・Binary Authorization など
出典:GCP Professional Cloud DevOps Engineer
ここでは、DevOpsと必要なツール、資格などについて解説しました。DevOpsは明確な定義がなく抽象的で、観念的な部分も大きいため、イメージが湧きにくかったり、理解しにくかったりするところがあります。
しかし、選りすぐれたプロダクトをスピーディーに提供するためのDevOpsは、もはや一時的な流行ではなく、今後しばらくの間主流の手法となると考えられます。現在は多くの企業が市場での即応性を高めることに注力しており、顧客の期待も要求も増していくでしょう。この記事が、DevOpsへの理解の第一歩となれば幸いです。