DevOpsとは
DevOpsとは、Development(開発)とOperations(運用)を組み合わせた混成語で、ソフトウェア開発手法の1つです。開発担当者と運用担当者が緊密に連携し、時間短縮と品質確保を目的としています。
【図】:DevOpsの組織的役割
DevOpsの名称に含まれませんが、品質確保の観点でQuality Assurance(品質保証)とも連携します。上記3つの役割を連携される交点がDevOpsの役割です。派生語でビジネス部門を加えてBizDevOpsや、開発セキュリティ運用のDevSecOps等の用語も登場しています。
DevOpsをわかりやすく
従来だと開発は開発部門が、運用は運用部門が、というように組織の縦割りが一般的でした。このため組織間の利害関係により重要な点が軽視されたり、時間を要したりという弊害が出てきました。この課題を解決するために、組織間の連携を密に行い必要な情報交換を進めることで、開発部門・運用部門双方にメリットをもたらします。
【図】:開発部門と運用部門の組織構造
特に近年多様なアプリケーションが登場し、短期間でリリースする必要性が高まっています。品質を高めつつリリースを短サイクル化するには生産性向上も求められます。
【図】:DevOpsの組織効率化と品質モデル
この要求を満たすためにDevOpsが浸透していきました。さらに広範な業務を短サイクルで進めるにあたり、IT全般を対応するDevOpsエンジニアの需要も高まっています。
DevOpsの利点
DevOpsは、多様化するニーズから生じる課題を解決するために多くの利点があります。代表的なポイントは以下の通りです。
・信頼性の向上 実績のあるコードを利用し、新機開発コードは最小に留めます。これによりQA工程のレベルを落とさずに迅速にソフトウェアをリリースします。
・生産性の向上 DevOpsでは開発から運用、運用から開発という相互に情報連携を行います。そのため、求められる情報を共有し手戻りを防止します。これにより生産性の向上が図られます。
・スピードの向上 プラン・ビルド(コード)・デプロイ・フィードバックの一連の流れについて、ニーズの変化に追従しスピーディにサイクルを展開することが可能です。
AWSによるDevOpsの活用
AWSでは、迅速なアプリケーション開発と運用効率化を目指して、DevOpsにより企業の競争力を高める手助けになるよう啓蒙活動を行っています。 【参考】:DevOps と AWS
AWSのDevOps関連ソリューションとして、次のサービスが提供されています。
・CI/CD(継続的インテグレーション/継続的デリバリー) ソフトウェアリリースのワークフロー:AWS CodePipeline コードのビルドとテスト:AWS CodeBuild デプロイのオートメーション:AWS CodeDeploy 統合 CI/CD プロジェクト:AWS CodeStar
・マイクロサービスアーキテクチャの構築とデプロイ Docker プラットフォームの運用:Amazon Elastic Container Service サーバーレスコンピューティング:AWS Lambda
・Infrastructure as Code(コードとテンプレート) テンプレート化されたインフラストラクチャプロビジョニング:AWS CloudFormation Chef による設定管理:AWS OpsWorks
・モニタリングとログ記録 クラウドとネットワークのモニタリング:Amazon CloudWatch 分散トレース:AWS X-Ray アクティビティと API 使用状況の追跡:AWS CloudTrail
・Platform as a Service ウェブアプリの実行と管理:AWS Elastic Beanstalk
・バージョンコントロール プライベート Git ホスティング:AWS CodeCommit
AWSでは自社サービスと組み合わせて利用拡大を目指しています。
AzureによるDevOpsの活用
Azureの場合も、クラウドアプリケーションのビルド・リリース・テスト・モニターを自動化するための継続的デリバリー パイプライン構築を支援します。 【参考】:AzureのDevOps製品 【参考】:Azure DevOps
Azure DevOpsとして統合ソリューションも提供しており、以下の様にニーズに合ったサービスが提供されています。
・統合ソリューション:Azure DevOps プラン・レポート:Azure Boards CI/CDパインプライン(ビルド・テスト・デプロイ):Azure Pipelines プライベートGitリポジトリ ホスティング:Azure Repos テストの計画・実行・追跡:Azure Test Plans パッケージ管理:Azure Artifacts
・アプリケーション統合:Azure DevOps Projects プリケーションをAzureサービスに簡単に統合
・統合ツール:Visual Studio App Center モバイルとデスクトップ アプリのビルド・テスト・配布に対応する単一統合ツール
・仮想マシン:Azure Lab Services 仮想マシンのオンデマンド アクセス
・統合監視:Azure Monitor アプリケーション・インフラストラクチャ・ネットワークの情報収集・分析・アクション実行
・開発環境構築:Azure DevTest Labs テンプレートで仮想マシンを構築
・負荷テスト:Azure Load Testing(プレビュー版) 負荷テスト環境のビルド、負荷テストの生成・分析
クラウドサービスの利用は、DevOpsの迅速にサイクルを回していく手法にフィットするものとして注目されています。
DevOpsの具体例
DevOpsは従来型の堅牢なシステム設計とは対照的に、変化の激しい先の見えない業務にも適応可能です。そのため新規事業のトライアルサービスや展開に最適です。コンテンツの改廃が多い業務や、ユーザー数の急増が見られる用途でも活用されています。アジャイル開発の手法を取り入れて成長企業の利用が増えています。
日本国内では、DevOpsDays Tokyoという年次会合が開催されており、その場でDevOpsに関する事例が共有されています。次回は2022年4月21日を予定しています。海外スピーカーの登壇が多いですが、日本企業も事例や取り組みを発表しています。具体的にはこれまでにメルカリ・楽天・クックパッド等の成長企業が情報発信しています。 【参考】:DevOpsDays Tokyo
DevOpsのワークフロー
DevOpsでは次に挙げる8つの工程に分類し、開発部門と運用部門で役割を定めます。この役割はシームレスに連携し、運用のモニターから次のプランサイクルに循環します。
・プラン(Plan) 要件を整理し開発計画にまとめます。
・コード(Create) コードの開発・レビュー・マージを行います。
・テスト(Verify) コードの妥当性を検証します。
・パッケージ(Package) リポジトリ格納の手続きとリリース前確認を行います。
・リリース(Release) 変更管理とリリースを行います。
・コンフィギュレーション(Configure) インフラ管理・設定を行います。
・モニター(Monitor) 稼働モニター・性能監視を行います。
運用時に入手した改善点は開発部門にフィードバックとして伝え、次のサイクルのプランに反映します。
DevOpsとアジャイルの違いは?
従来は事前に要件を把握し、設計に反映するウォーターフォール型の設計が一般的でした。
具体的には要求分析から「要件定義」し、「基本設計」「詳細設計」に落とし込みます。開発コードは「システム実装」を経て「単体テスト」「システムテスト」と進められます。その後「受入テスト」に合格し納品となります。このように常に次に実施する工程が決まっており、順番に進められる形式がウォーターフォールモデルと言います。
【図】:ウォーターフォールモデルの工程フロー
この方式は大規模案件を進めるには有利ですが、工期途中の変更が難しくユーザの変更要求が反映されにくい課題がありました。さらに手戻り発生時には予定する工数が増加し、現実的ではありませんでした。この課題に対処するためにアジャイル開発が考えられました。
アジャイル開発では、1週間から4週間のサイクル(イテレーション)でシステム開発を進めます。仕様書が確定していない状態で作業を進めていき、徐々に改善していきます。そのためシステム開発の規模を小さい単位に分割し、エラーを修正しながらブラッシュアップしていきます。
【図】:アジャイル開発モデルのイテレーションフロー
DevOpsでは開発から運用までカバーする組織体制を意味しているため、広い範囲を対象としています。アジャイル開発は具体的な開発手法そのものを指します。DevOps開発工程においても、アジャイル開発を上手く活用してワークフローに組み込み運用することができます。
DevOpsとCI/CDの違いは?
CI/CDとは、Continuous Integration(継続的インテグレーション)/Continuous Delivery(継続的デリバリー)の略を指します。
CIでは開発工程を単発の開発作業とせずに、継続的なシステム・アプリケーション変更を想定しています。そのため自動化のツールを活用し常に変更点を修正・ビルドし、テスト実施を経てリポジトリに反映させます。
CDはデリバリーにフォーカスし、継続的なリリースを目指します。アプリケーションの変更を確認し、適切な依存関係に配慮して自動的にリリースしていきます。
CI/CDでは継続的な対応を想定するために、手動作業では対応できず自動化が欠かせない要素となります。そのために自動化のツールが必要です。自動化ツール導入で、CI/CDのパイプラインフローがカバーされます。その自動化運用で、DevOpsの組織体制とワークフローが効率的に機能します。
DevOpsは成長企業の組織モデルとして重要
従来のITシステムは、決められた要件にしたがって設計をすれば問題なくリリースできました。変化が激しい現代では、新しい需要に早期に応える体制づくりが重要となります。特に成長企業やベンチャー企業では常に実行しながら修正していく企業風土と、ニーズに対応するITソリューションが必須となります。
DevOpsはクラウドサービスにおいても注力されており、自動化ツールを活用し変化に追従するDevOpsエンジニアとしても活躍の場が期待できます。必要な情報収集を行うことをおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから