Azure Managed Service Column <Azure運用コラム>

DevOpsとは?導入するメリットとAzureを活用した環境構築方法を解説

Category: 入門編

2021.06.14

はじめに

昨今、DevOpsという言葉をよく耳にするようになったと思いますが、漠然としたイメージしか掴んでいない人も多いかもしれません。DevOpsとはどのようなものでしょうか。

DevOpsとは、開発プロセスとツールを活用して開発と運用が相互に協力して開発することで、システムやサービスを迅速かつ確実にユーザーに届ける取り組みを指します

本記事では、DevOpsを全く知らない人向けに、DevOpsの定義やメリット、アジャイル開発との関連や、Microsoft Azureを活用したDevOps環境構築方法について解説します。

1. DevOpsとは

DevOpsとはどのようなものなのでしょうか。まず、一般的なDevOpsの定義とプロセスについて解説します。

DevOpsの定義

DevOpsとは、開発(Development)と運用(Operations)を組み合わせた言葉で、人(開発チーム・運用チーム)とプロセスとテクノロジーを結び付けて、ビジネスが継続的な価値を提供するための取り組みを示す概念です。

DevOpsの目的

DevOpsの目的は、迅速なITの開発と継続的なサービス提供の実現により、ユーザーのビジネス価値を高めることです。 従来、システムの開発を担う開発チームと、システムをサービスと捉え継続的なサービス提供を担う運用チームは、明確な役割分担によりサイロ化されたことで、システムに対する考え方や仕事の目的にギャップが生じていました。そのため対立構造が生まれ、運用フェーズへの引継ぎがスムーズに進まないといった弊害もありました。

DevOpsの導入により、開発チームと運用チームの協力体制を作ることでこのギャップを埋め、迅速かつ運用性・信頼性の高いシステム開発の実現と、それによるユーザーのビジネス価値を高めることを目指しています。

DevOpsの具体的なプロセス

DevOpsの考え方では、厳密な開発プロセスの定義はありませんが、一般的には大きく下記の4つのプロセスに集約されます。

  • 計画(PLAN)
  • 開発(DEVELOP)
  • 配信(DELIVER)
  • 運用(OPERATE)

計画(PLAN)

計画(PLAN)とは、開発するシステム・サービスの要件・機能の定義を行い、プロジェクトの進捗管理やタスク管理の方法などを検討し、そのためのツール類の選定を行うプロセスです。

開発(DEVELOP)

開発(DEVELOP)とは、計画に従ってコードの作成など開発作業を行うプロセスです。
作成したコードのレビュー、マージ、ビルド、開発環境でのテストを頻繁(1日に数回程度)かつ自動的に実施することで、コードの不具合を迅速に発見・修正し、短期間で品質の高いアプリケーションを開発します。この繰り返しを継続的インテグレーション(Continuous Integration・CI)と呼びます。

配信(DELIVER)

配信(DELIVER)とは、開発が一通り終わった後に、開発したアプリケーションを実際に動作させる本番環境へデプロイを行うプロセスです。
継続的インテグレーションを拡張して、本番環境へのビルドとデプロイといったリリースプロセス全体を自動化し、コードの変更・修正などを迅速かつ安全に本番環境へ反映させることを継続的デリバリー(Continuous Delivery・CD)と呼びます。

運用(OPERATE)

運用(OPERATE)とは、本番環境へ配信したアプリケーションと、アプリケーションが動作するサーバーやネットワークなどのインフラが継続的に動作しサービスを提供できるように、運用者が監視と保守作業、及びトラブルシューティングを行うプロセスです。
また、提供するサービスに対するユーザーからの要望・意見などを開発チームへフィードバックし、継続的な改善を行います。

2. DevOpsを取り入れるメリット

開発にDevOpsを取り入れるメリットはどのようなものがあるのでしょうか。
具体的なメリットとして下記が考えられます。

  • 俊敏性の向上
  • 信頼性と安定性の維持
  • 生産性の向上

俊敏性の向上

DevOpsの開発プロセスでは、作成・修正したコードのテストと本番環境へのデプロイを自動的に繰り返します。これにより、ウォーターフォール開発の欠点である変更要求への弱さを克服することができ、より柔軟かつ迅速な開発が可能となります。
DevOpsの導入により、企業はビジネス判断によるサービスの変更やリリースを素早く行うことでサービスの市場投入までの時間を短縮し、目まぐるしく移り変わる市場への適応力や競争力の向上を図ることができます。

信頼性と安定性の維持

DevOpsでは小規模な開発を繰り返すことでバグや不具合を発見しやすいという特徴があります。また、従来人間が手作業で行ってきたビルドやデプロイ作業などを自動化することよりヒューマンエラーを防止し、作業の信頼性を高めると共にシステムの安定稼働を維持することができます。

生産性の向上

DevOpsでは、開発チームと運用チームの垣根を排除し、相互に連携して効率的な情報のやり取りを行うことでコミュニケーションロスを防止し、無駄な作業の削減を可能とします。
また、進捗やタスク管理、品質管理などにツールを活用することで煩雑な管理作業から解放されることも、無駄な作業の削減とヒューマンエラーの排除に役立ちます。

3. DevOpsとアジャイルの関係

よくDevOpsと混同されやすい言葉に「アジャイル開発」があります。
ここでは、DevOpsの理解を深めるために、DevOpsとアジャイル開発の違いについて解説します。

アジャイル開発とは

アジャイルは「俊敏」を意味し、ユーザーにとってのビジネス価値を重視する開発手法です。従来のウォーターフォール開発は、開発の初期にシステムの要件と仕様を確定させてから開発を行うため、途中での要件変更や仕様変更に弱く、ユーザーにとっては柔軟性が低く、市場の変化に応じた柔軟なビジネスを展開しにくい開発手法でした。

それに対して、アジャイルは、小規模で短い開発サイクルをいくつも回して、ユーザーの状況に応じてスムーズに仕様変更を行いながらシステムやアプリケーションを完成させる、柔軟性が高い開発手法です。アジャイルにより、ユーザーは開発中の市場変化に応じた柔軟な仕様変更・仕様追加が可能となり、ビジネス方針の変更に俊敏に対応できるようになります。

アジャイルと比較したDevOpsとは

DevOpsとは、開発チームと運用チームの協力体制を作り、ツールとプロセスを活用して迅速かつ効率的な開発と運用を実現することを指しています。 「迅速かつ効率的な開発によりユーザーのビジネス価値を高める」という意味では、アジャイルと目的が一致しており、一見大きな違いはないように見えます。

しかし、アジャイルが具体的な開発手法を指すことに対して、DevOpsはあくまで開発・運用の協力関係を構築することに重点を置いています。この相互協力体制により、迅速かつ安定的な開発と運用を実現すること目指していると言えます。このことから、DevOpsとはアジャイル開発を実現する手段のひとつであるとも言えます。

4. DevOps実現のための環境構築方法

DevOpsを実現するために、具体的にどのような環境を構築する必要があるのでしょうか。開発と運用が相互に連携し、効率的かつ安定的な作業を行うために様々なツールを組み合わせてDevOpsのための環境を構築します。

DevOpsのための環境に必要な機能

DevOpsを実現するために必要となる機能・ツールには、一般的に下記のようなものがあります。

  • 仮想化ツール
  • 構成管理ツール
  • CI/CDツール
  • 監視ツール
  • コミュニケーションツール
  • テスト自動化ツール
  • バージョン管理ツール

仮想化ツール

仮想化ツールとは、OSの上に仮想的なOSを構築し、独立したOSとして動作させるためのツールです。仮想OS上でアプリケーションの開発環境や、構成管理やCI/CDツールの動作環境などを構築します。代表的な仮想化ツールにVMwareやDockerなどがあります。

構成管理ツール

構成管理ツールとは、アプリケーションが動作するサーバーやミドルウェア、データベースなどのITインフラ環境を管理するためのツールです。構成管理ツールによりITインフラをコード化して管理することで、アプリケーションの開発・テストを行う環境を迅速に準備することが可能となります。代表的な構成管理ツールにAnsibleなどがあります。

CI/CDツール

CI/CDツールとは、継続的インテグレーション(CI)と継続的デリバリー(CD)を提供するツールです。アプリケーションのビルド、開発環境へのデプロイとテストを自動化し、品質を保ちながら迅速な開発をサポートします。CIツールを拡張して本番環境へのデプロイまでを自動化するのがCDツールです。CI/CDツールにJenkinsやCircleCIなどがあります。

監視ツール

監視ツールとは、本番環境のアプリケーションや、サーバーやネットワークなどのITインフラの状態とパフォーマンスの監視やログ収集を行うツールです。運用チームは、日々監視を行い、インシデントが発生した場合は直ちにエラーを確認して必要なログを解析し、開発チームへ修正を依頼する必要があります。代表的な監視ツールにNew RelicやSplunkなどがあります。

コミュニケーションツール

コミュニケーションツールとは、チャット機能やWeb会議などのコミュニケーションを提供するツールです。開発と運用が一体となって開発・運用を進めるDevOpsには円滑なコミュニケーションが必要です。代表的なコミュニケーションツールにChatWorkやTeams、Slackなどがあります。

テスト自動化ツール

テスト自動化ツールとは、開発したアプリケーションのテストを自動化するツールです。テストの全てを自動化することはできませんが、単体テストから結合テストで自動化可能な範囲をツールに任せることで開発の省力化が可能です。代表的なテスト自動化ツールにSeleniumなどがあります。

バージョン管理ツール

バージョン管理とは、ソースコードや成果物のバージョン管理を行うツールです。構成管理ツールやCI/CDツールを利用するためには、ソースコードと成果物がバージョン管理されていることが前提です。代表的なバージョン管理ツールにgit、subversionなどがあります。

DevOpsのための環境をクラウドで作るメリット

DevOpsのための環境を構成するツールは効率よく開発・運用を行うために必要なものですが、全てオンプレミスで用意するにはスキルと多くの工数が必要です。
この問題を解決するために、DevOpsのための環境をクラウドで構築する方法があります。DevOpsのための環境をクラウドで作るメリットは下記の通りです。

  • クラウドによる俊敏性の向上
  • Kubernetes や PaaS との統合による連携の容易さ
  • サーバーレスによるインフラの隠蔽化

クラウドの特徴のひとつである俊敏性(調達スピードの速さ)を活かして、DevOpsのための環境に必要なサーバー、ネットワークを瞬時に構築でき、構成管理ツール、CI/CDツール、バージョン管理ツールなどのツール類がサーバーレスで提供されているため、インフラを意識せずにツール類の導入が可能となるメリットがあります。
また、Kubernetesなどの仮想化ツールと統合することでスムーズなアプリケーション動作環境の準備・払い出しが可能になります。

クラウドによるDevOpsのための環境構築方法

DevOpsのための環境をクラウドで構築する方法の例として、マイクロソフト社が提供しているクラウドである、Microsoft Azureを利用した環境構築方法があります。
Azure DevOpsソリューションを導入することで、迅速かつ効率的にDevOpsを実現するための環境やツール類を利用することが可能です

5. AzureのDevOpsソリューションとは

Azure DevOpsソリューションとはどのようなものでしょうか。ここでは、Azure DevOpsの概要と、Azure DevOpsを構成するサービスについて紹介します。

Azure DevOpsとは

Azure DevOpsとは、DevOpsを実現するために必要なツールが揃っているオールインワンのDevOpsプラットフォームです。Azure DevOpsは、プロジェクト管理、継続的インテグレーション&デリバリーなど、DevOpsのためのサービス群を提供しており、アプリケーション開発の計画・開発・配信・運用のプロセスをAzure上で実現することが可能です。

Azure DevOpsを構成するサービス

Azure DevOpsを構成するサービスは下記の通りです。

  • Azure Pipeline(CI/CD/テスト自動化ツール)
  • Azure Boards(進捗管理ツール)
  • Azure Repos(バージョン管理ツール)
  • Azure Test Plans(手動テスト管理ツール)
  • Azure Artifacts(パッケージ管理ツール)
これらのサービスの全て、もしくは一部を利用することで、Azure上でDevOpsのための環境を構築することができます。

Azure Pipeline

Azure Pipelineとは、Azure上でアプリケーションのビルド、デプロイ、テストを自動化する継続的インテグレーション&デリバリー(CI/CD)の機能を提供するツールです。数多くの言語に対応し、KubernetesやDockerなどのコンテナとも連携可能です。

Azure Boards

Azure Boardsとは、かんばんボード、バックログ、チームのダッシュボード、カスタム レポートなどを利用してメンバーのタスクの見える化、進捗管理を行うツールです。

Azure Repos

Azure Reposとは、ソースコードと成果物の共有とバージョン管理を行うツールです。Gitベースのリポジトリを提供しており、任意のGitとの接続・連携も可能です。

Azure Test Plans

Azure Test Plansとは、アプリケーションの手動でのテストを管理・支援するためのツールです。Azure Pipelineが自動テストを支援することに対して、Azure Test Plansでは手動テストを実施する上でのテスト計画・テストケース・テスト結果などを管理する機能を提供します。

Azure Artifacts

Azure Artifactsは、アプリケーションを配布・公開するために、ソースコードやライブラリをまとめたパッケージを管理するツールです。Azureのクラウド上で簡単にパッケージを管理でき、範囲を絞って配布・公開することも可能です。

Azure DevOpsとApp Serviceで作る統合的なCI/CD環境

Azure DevOpsは単体のプラットフォームとして利用してもDevOpsのための環境を構築できますが、Azure App Serviceと連携して利用することで継続的インテグレーション&デリバリー環境(CI/CD環境)とデプロイ先の環境を簡単に作成することができます。

Azure App Serviceとは、Webアプリケーションの実行環境を、インフラの設定を意識することなく簡単に作成できるAzureのサービスです。Azure Pipelineと連携させることにより、Webアプリケーションのビルド、デプロイ、テストを、アプリケーションの実行環境を含めて自動で生成できるようになります。

また、さらにAzure Reposを連携させることでバージョン管理も同時に行い、Azure Test PlansやAzure Boardsを組み合わせて、手動テストの管理やタスク・進捗管理と連動した統合的なDevOpsを実現することも可能です。

6. まとめ

DevOpsとは、本来「ユーザーのビジネス価値を高める」という開発と運用の共通目的があるにも関わらず、役割分担により対立構造が発生しやすい状況を打破するために開発と運用の協力体制を築き上げる取り組みです。開発と運用がお互いに信頼・尊重し、問題発生時は解決策を一緒に考える協力体制により、迅速かつ安定的な開発と運用を目指すものです。

DevOpsは体制論とプロセスに重点が置かれていますが、そこにクラウドを組み合わせることで、より俊敏性が高くシンプルな仕組みでDevOpsを実現可能です。Azure DevOpsを利用して、より高いビジネス価値を提供できる開発を目指してみてはいかがでしょうか。

Azure設計・構築を任せたい

Azure構築サービス

Azure構築サービス

お客様のご要件をヒアリングし、Microsoft Azure DevOpsの導入をサポートいたします。

Tag: DevOps

関連記事

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php