対象読者
- Microsoft Azureや他のクラウドサービスを利用している方
- アジャイル開発を行っている方
- DevOpsの一通りの流れを理解したい方
Azure DevOpsとは?
Azure DevOpsとはMicrosoftが提供しているクラウドベースのDevOpsサービスです。ソフトウェア開発をチームや組織で進める上で欠かせないプロジェクトの計画や管理、ソースコードの管理、ビルド、デプロイ、テストの管理などを支援するためのサービスやツールを統合したプラットフォームです。
DevOpsとは
サービス名にも含まれているDevOpsについて簡単に説明します。DevOpsはソフトウェアの開発(Development)とIT運用(Operations)を統合するアプローチや文化を指した造語で、効率的で高品質なソフトウェアの開発と持続的な運用の実現を目的としています。
従来のシステム開発では開発チームと運用チームは独立した組織として存在し、それぞれシステムの開発や機能追加とシステムの安定稼働といった異なる役割を持つため、対立する場合がありました。DevOpsでは、お互いの考え方を対立させるのではなく協力して両立することを目指しています。
現代のビジネスの観点では、企業やサービスの存続には変化が必要です。変化の促進には生産性の高さが必要ですが既存のビジネスを損なわない安定性も求められます。その相対するテーマを両立するために必要なツールの使い方と組織文化が、DevOpsでは提唱されています。
DevOpsを初めに提唱した写真共有サービスのFlickrは、「ツール」と「組織文化」の観点から以下の項目を必要な要素として挙げています。
ツール
- 自動化されたインフラ:インフラを構築するための一貫したプラットフォームを提供する(Terraform、Dockerなどのインフラ構築自動化ツールを用いる)
- バージョン管理システムの共有:Gitなどのバージョン管理システムをDevとOpsで共有して使用する
- ビルドとデプロイのワンステップ化:手動でのビルドやデプロイは行わず、JenkinsなどのCI(継続的インテグレーション)ツールを使ってビルドやデプロイ作業を自動化する
- フィーチャーフラグ:機能の有効・無効化をブランチや設定ファイルによってコントロールする。これによってリリースタイミングと機能の追加タイミングが分離できるようになる
- メトリクスの共有:ログやアラートといったシステムのメトリクスをDevとOpsで共有する
- チャットツールの活用:TeamsやSlackなどのチャットツールのbot機能を用いて、ビルドやデプロイの結果を通知する
組織文化
- お互いを尊重する:役割が異なる相手を心から思いやること。一人ひとりが優秀であることを認め、能力や功績を評価する
- お互いを信頼する:自分以外の皆が優秀であると認め、信頼して仕事を任せる
- 失敗を責めず健全な態度を取る:新しいことへの挑戦には失敗が伴うものと理解し、他者の失敗を責めない
- 相手を非難しない:問題の当事者を非難するのではなく、同じ問題を繰り返さないように一緒になって考える
これらのツールと組織文化が最初から全て備わっている組織はあまりなく、日々改善していく必要があります。この改善活動の実践こそがDevOpsであるとされています。
Azure DevOpsに含まれるサービス
Azure DevOpsでは、上記のDevOpsに必要なツールと組織文化の改善をサポートするためのサービスが提供されています。Azure DevOpsは、以下の5つのサービスを包括したサービスの呼称です。それぞれのサービスは単体で使用できますが、組み合わせて使用することでDevOpsとしての効果をより発揮できるようになります。
(1)Azure Boards
アジャイル開発やスクラムにおけるタスク管理システムである「カンバン」を提供するサービス。Azure Boardsを使用することで、主にプロジェクト内で発生するタスクや課題、作業の計画やバグトラッキングなどを集約して管理することができます。
(2)Azure Repos
Gitベースのソースコードバージョン管理ツール。プルリクエストによるソースコードレビューを行うことができます。
(3)Azure Pipelines
アプリケーションのビルドやデプロイを自動化するCI/CD(継続的インテグレーション/継続的デリバリー)のサービス。
(4)Azure Artifacts
自身で作成したライブラリ、パッケージをチームで共有するためのホスティングサービス。
(5)Azure Test Plans
手動テスト、探索的テスト、自動テストなどのテスト手法を作成、管理、実行するためのサービス。探索的テストは事前に作成したテストケースをもとにテストを実施する記述式テストとは異なり、テストを実施しながらシステムの振る舞いに応じて次のテストを考えるテストです。