まだAzure DevOpsを使ったことがない人へ

# 導入

この記事は「[NEXTSCAPE Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nextscape)」の9日目です。

[Azure DevOps](https://azure.microsoft.com/ja-jp/services/devops/)、皆さん利用したことはありますか？
日本語の記事もかなり多くなってきたので目にしたこと、利用したことがある人も増えてきたかと思いますが、「聞いたことはある」「結局何ができるかわからない」「いろいろできるらしいけど手は出してない」という状態の方もまだまだ居るのではないでしょうか。

これはそんなAzure DevOps利用への一歩を踏み出せない方向けの、**Azure DevOpsは良いぞ！！**という紹介記事です（2020/12/09時点）。

何故そんな記事を書くかって、私がAzure DevOpsのファンだからです。
みんなAzure DevOps使ってみよう。救われる命がここにある。

#Azure DevOpsって？
簡潔に言うと”アジャイル開発のためのチーム運営とCI/CDまわりに必要な機能をスッキリ統合して管理できるサービス”です。

プロジェクト全体からスプリント単位までを意識したチームのタスク、メンバーの割り振り、ソースコードのGitリポジトリ、自動ビルド、自動リリース、自動テストとテスト項目の管理……など、いわゆるDevOpsに必要な環境を、Azureが提供してくれています。
運用チーム（PMやPL）と開発チームがAzure DevOpsを一緒に使えば、DevOps実現への大きな一歩になるのではないでしょうか。

タスク管理やGitリポジトリ、CI/CDツールというと、同じ機能を無料で提供してくれるサービスは数多あります。が、タスク確認したいときはここみて、ソースコード取得するときはこれ使って、CI/CDはこのページ開いて、ドキュメントはこの共有フォルダで………………などとやっていると、中々面倒。それぞれでアカウントつくらないといけないし、ツールを入れないといけないし、プロジェクトごとに使ってるサービスをおぼえないといけない。
Azure DevOpsはこのあたり全部まかなってくれるので「**とりあえずAzure DevOps開けばOK！**」になれるのがとても楽。脳みそのリソース節約になります。

「そんなこと言ってもうちの開発はオンプレだから……」などという方。
Azure DevOpsサービス上で登録したデータの保存先など、バックグラウンドで動いているのはAzureですが、開発プラットフォームがAzureじゃなくても使えます。
開発プラットフォームはAWSだけどDevOps周りだけはAzure DevOpsで管理する、なんていうことも勿論可能。

支払先はAzureになるけど、Azure DevOpsは契約・支払い周り以外でAzureポータルを開くことはほぼ無いかな。
Azure使ったことない方でも、Azure DevOpsは手を出しやすいですよ。

#Azure DevOpsの機能
色々できます。提供されている機能が多いし、設定から何からプロジェクトに合わせて細かくカスタマイズできる。
ただ、高機能が故に敬遠してしまっている人も居るんじゃないでしょうか。

それはその通りで、Azure DevOpsの全ての機能をいきなり完璧に使おうとすると、かなりの学習コストが必要になります。なので、はじめは**使ってみたい部分から使うのが良い**と思います。

Azure DevOpsで使える機能はざっくりと以下のような感じです。

- Overviews
    - プロジェクト全体の情報
- Boards
    - アジャイル計画ツール
- Pipelines
    - CI/CDツール
- Repos
    - Gitリポジトリ＆プルリクエスト
- TestPlans
    - テストツール
- Artifacts
    - Nugetやnpmなどのパッケージマネージャのフィード

始めに触ってみやすいのは、BoardsとReposあたりじゃないでしょうか。
少し触ってみたら「あれってできないの？」「ここ、こうしたいんだけど」という部分が出てくるので、そうなったら少し調べて知識を深めていきましょう。大体実現できます。すごい。
かく言う私も全ての機能と設定を網羅できたわけではありません……が、こんな記事を書く程度には、Azure DevOpsの恩恵を受けていると思います。

以下に、実際に利用してみて、オススメできる機能の紹介を書いていきます。
開発者にはそれぞれツールの好みがあるので一概には言えませんが、私が**Azure DevOpsのここは推せる**と思ったポイントをつらつら書いていきますので、ご参考までにどうぞ。

※ あくまで本記事は私見に満ちたざっくりとした紹介なので、詳しく知りたいという方はオフィシャルに紹介ページがあるのでそれを見るのが早いです。
https://azure.microsoft.com/ja-jp/services/devops/

## Overview
AzureDevOpsはプロジェクト単位で管理を分けることができるようになっています。
Overviewは名前の通り、プロジェクトの概要です。

- Summary
    - プロジェクトの概要、登録タスクの数やパイプラインの稼働率が確認できる
- Dashboards
    - プロジェクトの中で表示しておきたいデータやグラフをカスタマイズして置いておけるダッシュボード
- Wiki
    - プロジェクトのWiki

Wikiがとても便利。ただのシンプルなWikiですが、プロジェクトについて何か情報を残しておきたい時はすべてWikiに入れるようにしておけば「あの情報ってどこにあるんだっけ」問題が発生しにくい。
そのうえ、記事内容の履歴管理も自動でしてくれるので、誤情報が書き込まれたとしても元を辿ることができます。

## Boards
タスクをバックログ形式やかんばん形式で管理・計画することができます。
詳しくはここちら。
https://azure.microsoft.com/ja-jp/services/devops/boards/

Azure DevOpsで新規プロジェクトを登録する時に「Process」という項目を何にするかによって、タスクのカテゴリやBoardsの動きが変わります。

- Basic
- Agile
- Scrum
- CMMI

詳しくは以下のページに記載されている図を見るのがわかりやすいです。
https://docs.microsoft.com/en-us/azure/devops/boards/work-items/guidance/choose-process?view=azure-devops&tabs=basic-process
どういう流れでタスクを作成・分割・完了させていくか、プロジェクトによって異なると思うので、それぞれにあったものを選ぶのが良いでしょう。

- Work items
    - 登録アイテム一覧
- Boards
    - プロジェクト全体のタスク管理（かんばん形式）
- Backlogs
    - プロジェクト全体のタスク管理（バックログ形式）
- Sprints
    - スプリント単位のタスク管理
- Queries
    - タスクの集計

模造紙上でやるアジャイルのタスク管理と同じ感覚で扱えるのがSprints。
ドラッグ＆ドロップでTodo/InProgress/Doneも、スプリントの移動もできる。付箋感覚で動かせて、同じ画面を見ている人もリアルタイムでタスクが移動していくのを確認できるのがとても好きなポイントです。
付箋だと書く範囲が狭くて書ききれないことが多いこともありますが、Azure DevOpsならそれぞれのカードをクリックすれば詳細が開くので、いくらでも補足を書く事ができる。登録者以外からコメントを書くこともできる。1つのタスクからさらに他のタスクを登録することもできるし、関連のあるタスク同士を登録しておくこともできる。便利！

Queriesでは、プロジェクト全体で登録されたPBIやタスクなどに対してフィルタリングをかけて検索することができる。さらにその検索条件を保存して、結果ページを他の人に共有することもできる。
つまり「今スプリント内でDoneになっていないPBI」や「担当者ごとのDone数」や「プロジェクトで登録されているPBIのうち担当者が未設定のもの」などをパッと出して確認することができる。これも地味に便利。

##Repos
プライベートGitリポジトリ。1つのプロジェクトに対していくつもリポジトリを紐づけて管理できます。
プルリクエストもここで管理できるんですが、前述したBoardsに登録したPBIやタスクとプルリクエストを紐づけることができます。つまり、「このプルリクエストはこのPBI（タスク）を実現するためのものです」を端的に示すことができる。逆にPBI（タスク）側から、どんなプルリクエストが関連づいているのかを辿ることもできるので、「このプルリク何？」がとてもわかりやすい。

詳しくはこちら。
https://azure.microsoft.com/ja-jp/services/devops/repos/

- Files
    - リポジトリ内で管理されているファイル一覧
- Commits
    - 樹形図付きのコミット一覧
- Pushes
    - Push一覧
- Branches
    - ブランチ一覧
- Tags
    - タグ一覧
- Pull requests
    - プルリクエスト一覧

Azure DevOpsの良いところは、関連している項目同士を追っていくことができるようにつくってあるところ。
なので、ビルドパイプラインのトリガに紐づけられたPushがあれば、そのPushやPushを含むBranchesなどでビルドが成功しているか失敗しているかがわかるようなインターフェースになっている。
自動ビルドや自動リリースが失敗してしまっている時、どのプッシュが原因なのか？がパッと見でわかると、原因調査がスムーズで良かったです。

##Pipelines
CI/CDツール。.NET系やAzureに限らず、様々な言語や環境でビルド・デプロイが可能。

詳しくはこちら。
https://azure.microsoft.com/ja-jp/services/devops/pipelines/

- Pipelines
- Environments
- Releases
- Library
- Task groups
- Deployment groups
 
Reposでも書きましたが、Azure DevOpsは関連している項目同士を追っていくことができるので、どのコミットがビルドやリリースに含まれているかを辿る事ができます。
プルリクエストにBoardsのタスクを紐づけることもできるので、「このリリースにはこのスプリントのこのタスクについての修正が含まれる」をまとめて見ることができます。
実際のプルリクエストに紐づいたリリース内容一覧が確認できるので、手間なく信用性の高いリリース履歴を保持できる。手作業でリリース履歴を残す手間も減るのでとてもオススメ。

##TestPlans/Artifacts
この2つは実運用で利用したことが無いため省略します。
が、紹介文を見ていると、自動テストを導入したり、自分達でフレームワークを作成するタイプのプロジェクトだと非常に便利そうです。
今後使用する機会があったらまた記事にできればと思います。

#さいごに
百聞は一見にしかずと言います。
色々と書きましたが、少しでも興味が出たらまずは少し触ってみるのが良いと思います。
あまりに長くなるのでここには記載していませんが、設定でかなり細かいカスタマイズもできるので、遊べる環境がある方は色々と遊んでみるのをオススメします。楽しいので。
この記事で一人でも「Azure DevOps、使ってみても良いな」と思う人が増えると嬉しいです。