システム開発の考え方の一つとして、「DevOps(デブオプス)」と呼ばれる考え方が注目されています。
しかし、DevOpsという単語に聞きなじみがあっても、具体的にどのような考え方なのか、理解があいまいな方もいらっしゃるのではないでしょうか?
DevOpsの考え方を理解することで、従来のシステム開発の課題を解決し、迅速で顧客のニーズに最大限応えたシステム開発を実現できます。
本記事では、DevOpsの基本概念やサービス、アジャイル開発との違いについて解説します。
![Nao Yanagisawa](https://xs691486.xsrv.jp/wp-content/themes/JITERA/images/director-nao-1.png)
2014年 大学在学中にソフトウェア開発企業を設立
2016年 新卒でリクルートに入社 SUUMOの開発担当
2017年 開発会社Jiteraを設立
開発AIエージェント「JITERA」を開発
2024年 「Forbes 30 Under 30 Asia 2024」に選出
アプリ・システム開発は生成AIを活用することで、従来の開発ではあり得なかった、低コスト・高品質開発・スピード開発が同時に実現できます。
▼従来の開発とAIを使った開発の違い
![](https://xs691486.xsrv.jp/wp-content/uploads/2024/06/ad10-table.png)
![](https://xs691486.xsrv.jp/wp-content/uploads/2024/06/メイン画像-1-1.png)
システムソリューションを得意とし、新規事業からDX推進まで幅広いジャンルの開発実績があります。
DevOpsとは?基本概念と定義を解説
DevOpsとは、「開発と運用がチーム間で協力することにより、従来の開発モデルよりも迅速かつ柔軟な開発を進め、システムとしての価値を継続的に向上していく考え方や概念」を指します。
従来の開発現場では、アプリケーションの開発を行う開発チームと、サービス稼働を安定させる保守の役割を担う運用チームの目指すところの違いや意見のギャップから、チーム間の対立も珍しくありませんでした。
そこで、開発と運用の対立を解消し、円滑かつ迅速なソフトウェア開発を進めていくDevOpsの考え方が注目されています。
DevOpsエンジニアとは
DevOpsエンジニアは、DevOpsの考え方をもとに開発と運用の円滑な連携を実現し、ソフトウェア開発プロセスの高速化・最適化を支援します。
仕事内容としてはインフラエンジニアと類似している点もありますが、DevOpsエンジニアはインフラエンジニアの業務に加え、以下の役割を担っています。
・自動化環境の構築、運用
DevOpsでは、開発プロセスの一部を自動化により効率化・高速化していくことが重要です。
そのため、DevOpsエンジニアには開発プロセスを自動化する仕組みの構築・運用のスキルが求められます。
具体的には、CI(継続的インテグレーション)によるビルド、テストの自動化や、CD(継続的デリバリー)による本番環境へのリリースの自動化といった手法を実現する環境を構築・管理します。
・バージョン、ライブラリの管理
迅速な開発を行うDevOpsでは、システムの変更が頻繁に発生するため、システムのバージョン管理やライブラリの管理などもDevOpsの重要な役割です。
誰がいつ変更を行ったかという情報を管理することで、不具合が発生した場合でも適切な対処が可能です。
・DevOpsの考え方の浸透
DevOpsでは、開発と運用が相互に協力できる文化を構築することで、スムーズかつ効率的なシステム開発を実現します。
DevOpsエンジニアは、DevOpsの考え方をもとに、開発・運用のチーム間の相互理解、スムーズな情報連携が行える体制作りなどを行うことも重要な役割です。
DevOpsで開発/運用をつなぐ
DevOpsの主な役割としては、ソフトウェア開発において開発チームと運用チームの意見の対立を無くし、連携の強化を図ることにあります。
しかし、従来のシステム開発において、開発チームは新しい機能を素早くシステムに搭載したい一方、運用チームは、安定運用のために十分な検証期間を確保したいという目的の違いのため、意見の衝突も珍しくありませんでした。
例えば、開発チームが新機能のリリースを計画しても、セキュリティ面の十分な担保や運用作業の追加によるコストの発生などを理由に運用チームがGoを出さない、といった場面がよく見られます。
このような組織内での対立は、組織全体を疲弊させるだけではなく、ソフトウェアの価値向上を妨げる要因となってしまいます。。
IT化が急速に発展している中、常に変化への対応を求められるビジネスにおいては、新しいシステムの価値向上は顧客の満足度向上にそのまま直結するといっても過言ではありません。
そのため、従来の開発現場で頻発していた開発チームと運用チームの意見のギャップを埋め、連携の強化を図るための取り組みとして、DevOpsの考え方が重要な役割を担っているのです。
Azure/AWS上でのDevOps活用方法
近年では、Microsoft Azureや、AWSといったクラウド環境の利用が増加傾向にあり、DevOpsについてもクラウド環境のサービスを利用するケースが増えています。
このセクションでは、AzureとAWS上でのDevOpsの関連サービスについて解説します。
Azure DevOpsサービス
Azure DevOpsサービスは、Microsoft Azure上でDevOpsを実現するためのツールや環境が提供されています。
Azure DevOpsで利用できるサービスは以下の通りです。
- Azure Pipeline
- Azure Boards
- Azure Repos
- Azure Test Plans
- Azure Artifacts
各サービスの使い方については以下で解説します。
Azure Pipeline
Azure上のアプリケーションのビルド、テスト、リリースの自動化をサポートするツールです。
JavaScriptやPythonなどの数多くの言語に対応しており、Azureだけではなく、AWSやGCPといった任意のクラウドにアプリケーションをデプロイできます。
Azure Boards
Azure Boardsはチーム内の作業を効率的に管理するプロジェクト管理ツールです。
カンバンボードやダッシュボードを利用してチーム内のタスクや進捗状況を可視化できます。
Azure Repos
Azure Reposは、ソースコードの共有やバージョン管理を行うツールです。
ソースコードをいつ誰が変更したかを管理できるため、コードの修正状況をチームメンバー間で共有できます。
Azure Test Plans
Azure Test Plansは、Webやアプリケーションのテストを支援するツールです。
自動的なテスト実施だけではなく、手動テストやテストケースを決めない探索的テストにも対応しています。
テスト中に発見したバグも自動的に収集するため、修正も容易に行えます。
Azure Artifact
Azure Artifactは、コードやライブラリをまとめたパッケージを管理するサービスです。
NugetやMavenなどのあらゆる種類のパッケージを管理し、チーム内に簡単に共有できます。
また、Azure Pipelinesとの連携も可能で、テスト済みのパッケージを自動的にAzure Artifact内に保存するといったことも可能です。
AWS DevOps関連サービス
Amazon社が提供しているクラウド環境であるAWSは、他のクラウドサービスと比べて世界シェアの比率が高いため、AWSを利用してシステム開発を行うプロジェクトも多いことが特徴です。
また、AWSは200を超えるクラウドサービスを提供しており、DevOpsを支援するツールも含まれています。代表的なAWSのDevOpsツールとして、以下のようなものがあります。
- AWS CloudFormation
- AWS CodeCommit
- AWS CodeBuild
- AWS CodePipeline
各サービスについて以下で解説します。
AWS CloudFormation
CloudFormationは、AWSのリソースを自動で構築するサービスです。
JSONやYAML形式のテンプレートを作成しておくことで、必要な分だけのAWSリソースをいくつでも自動で構築できるため、リソース構築時のミス防止や、環境構築にかかる工数を大幅に削減できます。
AWS CodeCommit
CodeCommitは、ソースコードやドキュメントをプライベートなGitリポジトリで管理できるバージョン管理サービスです。
既存のGitリポジトリと連携可能なため、自分でサーバを管理する必要がなく、AWS上で全て管理できます。
また、他DevOpsツールと連携することで、アプリケーションのリリースを自動化することも可能です。
AWS CodeBuild
CodeBuildはソースコードをビルドし、テストを自動化するサービスです。
フルマネージド型サービスとして提供されているため、ビルド作業にかかる管理・運用の負担が無くなり、開発者は開発だけに集中できます。
また、ビルド作業量により自動的にスケーリングしてくれるため、ビルド処理がすぐに実行され、待機時間を最小限にします。
AWS CodePipeline
CodePipelineは、コードのビルドからデプロイまでのステップを可視化・自動化を提供するフルマネージドサービスです。
他AWSのDevOpsサービスと連携することで、コード変更が発生した際に変更後のアプリケーションを自動的に構築、テストを実施します。
CodePipelineを利用することで、リリースまでの流れを自動的に行えるため、新機能の開発をスピーディーに行えます。
DevOpsのツールとCI/CDの特徴
DevOpsを実現するためには、ソフトウェア開発の工程をツールによって自動化・効率化することが求められます。
そのため、開発工程を効率化するDevOpsツールや、CI/CDと呼ばれる開発手法を活用することで、DevOpsの実現に近づけるでしょう。
このセクションでは、DevOpsの実現をサポートする主要なDevOpsツールの紹介と、CI/CDを活用することのメリットについて解説します。
主要なDevOpsツール
DevOpsを実現するためにはDevOpsツールをうまく活用していくことが必要です。
以下では、有名なDevOpsツールについて5つ紹介します。
・Ansible
Ansibleは、IT機器の設定作業を効率化・自動化するための構成管理ツールです。
利用にあたって高度なプログラミングスキルを必要としないため、学習コストが少なく導入しやすい点が特徴です。
Ansibleにより、OSやミドルウェアのインストールといったインフラの構築を自動化できるため、IT機器の設定作業を効率よく進められます。
・Docker
Dockerは、軽量かつ高速に動作するコンテナ型のアプリケーション実行環境です。
従来のゲストOSを必要とする仮想化環境とは異なり、ホストOS上で動作し、ゲストOSが不要なため、アプリケーションの実行が軽量かつ高速で行えることが特徴です。
・JIRA Software
JIRA Softwareは、プロジェクト内のタスク管理や課題管理を効率化するツールです。
ロードマップやカンバンボードなど、プロジェクト全体の状況を可視化でき、進捗状況や課題を視覚的に分かりやすくすることで、誰が何をすべきかの管理が容易に行えます。
・Git
Gitは、ソースコードの変更履歴を追跡・記録できるオープンソースのバージョン管理ツールです。
Gitでコード管理を集約することで、すべての変更が記録されるため、万が一不具合が起きた際にも旧バージョンへの切り戻しが容易に行えます。
・Splunk
Splunkは、システム全体からリアルタイムに収集される大量のログを分析し、インシデントの監視・調査・対応をサポートするツールです。
特にDevOpsにおいては、Splunkによって開発プロセス全体を分析することで、CD/CIツールの導入効果や本番環境へのデプロイ時のパフォーマンスの検証を行い、改善点の詳細を可視化できます。
CI/CDとは
CI/CDとは、ソフトウェア開発から本番リリースまでの一部の作業を自動で行うことで、より迅速にアプリケーションの変更を反映する仕組みのことです。
CIは「継続的インテグレーション」と呼ばれ、これまで手動で行ってきた「ビルド→テスト」のフローを自動化します。
CDは「継続的デリバリー」と呼ばれ、テストが完了したソフトウェアのリリースを自動化することで、常に最新のソフトウェアを顧客に提供します。
CI/CDを利用するメリットとしては以下です。
・バグの検出、修正の容易さ
これまでのソフトウェア開発では、テストにより検出したバグは目視確認をしていたため、CI/CDツールを導入することで、自動化テストによりバグの検出も自動で行うため、開発者はバグの修正にのみ注力でき、生産性の向上が期待できます。
・ソフトウェアのリリースを迅速かつ頻繁に行える
ソフトウェア開発において、最も時間がかかる工程が「ビルド→テスト→リリース」の行程です。
バグが発見されるごとにコードの修正を行い、テストを実施、リリース作業を行っていたため、開発者にとって負担になっていましたが、CI/CDによってこの工程を自動化できるため、ソフトウェア開発全体のスピード感が上がります。
・コードの品質向上
CI/CDツールにより、ビルドやテストの作業を行う必要がなくなるため、開発者はプログラム作成に集中でき、コード品質の向上が期待できます。
また、テスト工程ではあらかじめ設定した項目が自動で行われるため、テスト担当者による操作の違いやテスト忘れが発生せず、コードの品質を保てるメリットがあります。
DevOpsとアジャイル開発の違い
DevOpsと似た概念として、「アジャイル開発」というものがあります。
DevOpsもアジャイル開発も迅速なソフトウェア開発を行うという点で目的は同じですが、以下のような明確な違いがあります。
概要 | |
DevOps | 開発と運用の連携を強化するための考え方・仕組み |
アジャイル開発 | ソフトウェアの開発手法の一つ |
しかし、アジャイル開発を進めるにあたってDevOpsの考え方が必要になるため、この2つは密接な関係にあると言えます。
アジャイル開発の特徴
アジャイル開発はソフトウェア開発手法の一つで、ソフトウェアを機能毎に分割し、それぞれの機能単位で「要件定義→設計→開発→テスト→実装」のプロセスを繰り返ながら開発を進めていきます。
従来のウォーターフォール型の開発とは違い、ソフトウェアを機能単位で開発することにより、開発からリリースまでの期間が短くなるため、ビジネスを素早くスタートできるメリットがあります。
また、顧客からの急な仕様変更に対応しやすい点もアジャイル開発の大きな特徴です。
小さい機能単位で開発が進められるため、顧客との認識合わせがしやすく、急な仕様変更が発生した場合でも機能単位の手戻りだけで済み、ソフトウェア開発全体に与える影響を最小化できます。
このようにアジャイル開発は、顧客のニーズを最大化しながらソフトウェア開発を迅速に行えるため、多くのプロジェクトの現場で採用されている開発手法となります。
DevOpsが目指すもの
DevOpsとアジャイル開発は、迅速かつ効率的なシステム開発を実現させる目的という点では同じです。
しかし、アジャイル開発がソフトウェア開発に重点を置いた具体的な開発手法である一方で、DevOpsでは、開発と運用の連携強化を通じて開発プロセス全体を効率化する仕組みの構築を目標としています。
DevOpsは具体的な開発手法やツールだけを示すものではなく、システム開発における組織文化のあり方を含んだ広義な考え方に近い言葉です。
具体的には、ビルドやテスト、リリースといった工程の進捗状況や課題を開発と運用の各メンバーに常に共有できる環境を構築し、両者の認識の齟齬を無くすような取り組みをDevOpsでは行います。
しかし、アジャイル開発を進めていく上では、DevOpsの考え方やアプローチを取り入れることが必要となるため、両者の目的は違いますが、密接な関係にあると言えるでしょう。
DevOpsのメリットと課題
DevOpsをうまく導入すると、開発と運用が協力して開発を行える体制を構築できます。
そのため、ソフトウェア開発のスピードが向上し、顧客のニーズに柔軟かつ迅速に対応できるようになります。
しかし、DevOpsの考え方が組織文化に合わなかったり、理解度が低かったりすることで、導入にハードルを感じている企業があることも事実です。
このセクションでは、DevOpsを導入することのメリットと課題について解説します。
生産性と速度の向上
DevOpsを導入することで、システム開発の生産性の向上や、開発スピードの向上を実現できるメリットがあります。
従来の開発プロジェクトでは、開発チームと運用チームの目的の違いから、対立が珍しくなく、ソフトウェア開発がスムーズに進まないことがありました。
DevOpsでは、開発チームと運用チームの目指すところの違いによる対立を解消するため、自動化ツールや連携ツールを利用することによって両者の連携を改善・強化します。
チーム間の連携強化・開発工程を自動化することによって、開発からリリースまでの行程をシンプルにし、迅速なシステム開発が可能です。
また、リリースまでのスピードが向上することにより、顧客のニーズやフィードバックをシステムに反映しやすくなるというメリットもあるため、生産性の向上にも大きく貢献します。
異なる文化の融合の難しさ
DevOps導入のハードルとなっている理由の中で一番多いのが、「DevOpsの文化が自社組織の文化に合わない」といった点です。
DevOpsはこれまでの開発の考え方と全く異なるため、組織内でDevOpsを浸透させていくのは容易ではありません。
特に、DevOpsへの理解が部署や個人ごとに異なっていたり、企業文化がDevOpsの考え方とかけ離れていた場合、根本から組織内の文化を変えていく必要があります。
今までとは異なる文化を組織内に浸透させるためには、長い時間をかけてDevOpsに対する個人の理解を得る必要があるため、DevOpsの文化の導入が難しいと課題感じる組織も少なくありません。
DevOpsのポイント
ツール間連携の良さ
DevOpsの実現のためにはツールの利用が不可欠ですが、ツール間の連携をとれるようにすると、さらに効率的に開発を進められます。
例えば、GitHubにコードをチェックインしたらビルドとテストを自動実行するツールを起動するといったような、特定のアクションを契機に後続処理を自動化したいといった場面で力を発揮します。
ツール間連携は、ツール自体に他ツールと連携できる機能が備わっている場合もありますが、別途連携ツールを利用することでも可能です。
代表的な連携ツールとしては以下があります。
- IFTTT(イフト)
- Microsoft Flow
- Zapier
これらの連携ツールは、プログラムを作成しなくても各ツールの連携処理が可能なため、プログラムの経験がない担当者でも操作可能な点がメリットです。
ツール間の連携を上手く活用してくと、開発プロセスをより効率的にできるため、DevOpsを進めていく上で意識しておくと良いでしょう。
チームの協調性
DevOpsでは、ツールによる開発工程の自動化ももちろん重要ですが、チームの協調性を高めることも同じように重要です。
協調性を高めることで、チーム間で積極的に協力できる雰囲気を醸成できるため、効率の良い開発を実現できます。
チーム同士の対立を無くし、協調性を高めるためには、DevOpsの組織文化や考え方として以下の4つを理解する必要があります。
- お互いを尊重する
- お互いを信頼する
- 失敗を責めない
- 相手を非難せずに解決策を一緒に考える
DevOpsをうまく導入するためには、同じシステムを開発する仲間として、チームメンバー同士を尊重・信頼していくことが前提です。
チームメンバー同士の役割や能力を認め合うことでチームの協調性が高まり、より密接な連携を取れるでしょう。
また、DevOpsを進める上では開発上の失敗や問題に対して、特定の個人を責めてはいけません。
開発上の失敗は、チャレンジした結果として前向きに捉え、今後失敗を起こさないような取り組みをチームメンバー全員で考えることが、チームの協調性を高める上で重要です。
DevOpsのまとめ
DevOpsは、開発チームと運用チームのギャップを埋めることで、より迅速により価値のあるシステム開発を実現させる考え方です。DevOpsうまく導入することで、システム開発の生産性や開発速度が上がり、顧客満足度が高いシステムを開発できるでしょう。
しかし、DevOpsの導入には、開発を効率化するツールや開発手法といった技術面の理解だけではなく、DevOpsを推進しやすい環境づくりも重要です。特にDevOpsの考え方・文化を社内風土として定着させるためには長い時間をかけた変革が必要になります。
本記事で紹介した内容を参考にして、DevOpsによるより良いシステム開発を目指していきましょう。
DevOpsに関する質問や導入のご相談がある場合は、ぜひ経験豊富な株式会社Jiteraにご相談ください。貴社の状況にあった的確なアドバイスとサポートを提供させていただきます。