[Azure] DevOps でチーム開発

本日は日々使っているAzure DevOpsに関してまとめたいと思います。普段使っていない部分は簡単な説明と、詳細ドキュメントの参照先の記載までとしています。

# Azure DevOpsとは

Azure DevOpsとはチーム開発（一人で開発でもOK）に必要な機能がそろったオンラインサービスになります。

トップページは下記のように、左メニューにて`Overview`, `Boards`, `Repos`, `Pipelines`, `Test Plans`, `Artifacts`となっています。詳しいことは後程説明していきます。日本語に表示を変える方法は見当たりませんでした・・ので英語のまま使っています。 `Test Plan`, `Artifacts`に関しては普段使っていないの簡易な説明のみとなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/ede36952-8b94-1a8a-acc1-6c4e74d7fd7d.png)

製品ページはこちらです。
https://azure.microsoft.com/ja-jp/products/devops/

組織の下に複数のプロジェクトを保持することができ、
プロジェクト内に複数のレポジトリーを保持できるようになっています。
組織はADで紐づています。各プロジェクトへのアクセス権限も設定が可能です。権限に関しては本日は割愛します。

簡単に言うと、開発に関するプロジェクト管理、ソース管理、リリース・ビルド管理を行うサービスになります。

それでは、具体的にこのサービスを使うと、どんな風に開発プロジェクトを管理することができるのかを説明していきます。

# Overview

## Summary
まずログインすると出てくるページが サマリーページです。ここではプロジェクトのステータスをみることができます。いくつぐらいのタスクがあり、誰がどれぐらいタスクを完了したのかなどを見ることができます。

## Dashboard
よく見る項目をまとめて表示することができます。普段の開発ではあまり使っていませんが、定期的に確認したい数値があればここに表示することをお勧めします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/ed83e853-7565-7296-26ec-89d40e3fb698.png)


## Wiki 

開発プロジェクトに関するドキュメントはすべてここで管理することができます。　サブページを作りツリー型でドキュメントを管理することができます。Markdown記述ができるので便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/7a6fde4e-2d38-464c-5a4a-a4bec2878791.png)


# Boards 

ボードは主にタスク管理で使う機能になります。　

## Work items

ここはタスク一覧がリストで表示されます。特に区切りなどはなく、最近更新されたものから表示されています。とにかくタスク一覧をだしたい場合はこのページを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/b611d620-1afa-b729-453f-7926ba2534e7.png)

## タスクアイテムの種類

タスクアイテムの種類はここで`Epic`, `Issue`, `Task`となっています。表示はされていませんが、そのほかに`Test Case`, `Test Plan`, `TestSuite`があります。

マイルストーン的なのは `Epic`
バグ系は `Issue`
一般的なタスクは `Task`

といった感じにタスクの種類を分けています。

### Task

タスクには、`Title`, `Assign`, `State`, `Area`, `Reason`, `Iteration`, `Description`, `Priority`, `Activity`, `Remaiing Work`, `Links`, 添付ファイルなどの管理機能があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/5d97b41e-6ccc-e7cb-0b07-ce009d4c5324.png)

ここにある`Area`はカテゴリーみたな機能になります。タスクがどのカテゴリーのものなのか`Area`で定義しています。後程エリアごとに進捗管理が行えるので初期段階で設計しておくことをお勧めします。

### Boards

Boardsはステータスごとにタスクを並べることができます。現在とりかかっているタスク一覧をみるのに便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/c8ebf0f3-4b01-16c6-1a51-a039ef014281.png)


### Backlogs

`Backlogs`とは簡単に言うと残タスクになります。ここでは残タスクは`Epic`レベルで表示、`Issue`レベルで表示することで残タスクを管理することができます。担当者レベルでタスクの一覧表示や、ステータスごとで一覧表示など、残タスクをリストで管理することができます。 `Work items` はすべてのタスクが羅列されているのに比べ`Backlogs`はタスクレベル単位で表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/640f3815-cc5a-d85a-718f-8156c9be7206.png)

### Sprints 

`Sprints`は決まった期間でやるべきタスクのみを`Kanban`スタイルで表示することができます。今はメインでこれを使っています。今週やるべきタスクがすべてここにあり、来週取り掛かりたい内容などは次のスプリントに繰り越します。開発規模によってこの期間は変わりますが、今は基本１週間の`Sprint`を回しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/3f4e6beb-afff-db02-9e78-c868f99afcf6.png)

### Queries

ここはほぼ使っていませんが、`Task`の検索をすることができます。また検索条件を保存しておくこともできるので、なにか決まった条件でいつもタスクを検索したい場合はここを利用します。

## Delivery Plans

ここでは`Sprint`単位でデリバリーされるであろうタスクをみることができます。デリバリープランは複数作ることができますのでチームごとにデリバリープランをみたり、プロダクト事に見たりなどすることができます。今は1プロダクトしかないので、1プランで使っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/ae5e1593-6019-1378-ba83-a99df6f6755a.png)

# Repos

ここでは`Repositor`yの管理を行えます。複数の`Repository`を管理することができます、今進めているプロジェクトでは、まだ1`Repository`のみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/ea260ed5-0e11-d2a8-6087-4e4a53d91987.png)

`Repository`ごとに設定、ポリシー、セキュリティ（権限管理）を行うことができます。　`Project Settings > Repos > Repostories` に行くとこれらの設定を行うことができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/8d57cc3f-c13b-a1e1-9a1c-c3328b49682a.png)


## Commits

`Commits`では`Branch`事に`Commit`された履歴を参照することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/38c52081-e00b-3657-8e09-3e3a9f8d468a.png)

## Pushes

`Pushes`は`Repository`に`Push`された履歴を参照することができます。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/ac4f12a8-73ca-ba10-07d0-44402c3da3b4.png)

## Branches

`Branches`ではサーバー上にある`Branch`一覧を閲覧することができます。ここにある`Branch`同士`Merge`したりすることができます。みんなの`Branch`がサーバー上にたくさんあると、管理しずらくなるので基本メイン`Branch`に`Merge`したら削除するようにしています。

## Tags

`Tags`は普段利用していませんが、複数の`Branch`を管理する必要があるときなどは便利だと思います。

## Pull requests

`Pull request` は`Branch`と`Branch`の`Merge`を`Request`したものになります。開発者は自身の`Branch`を作成し、`Pull Request`を行い、特定の`Branch`に`Merge`をしていきます。ここでコードの`Conflict`がなければ`Merge`されます。

# Piplines

Piplinesではビルドやリリースを管理します。実際に開発されたコードを実装環境にリリースする作業になります。

## Piplines 

ここでは、割り当てられたサーバーを使い実際にビルドを行うことができます、このフローを自動化したものをPiplineと呼びます。そして、これらのフローを定義したファイルをYAMLファイルといいます。このYAMLファイルを編集し、ビルドのフローを定義します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/ffab4474-08e2-e117-4ae7-74699e181c4d.png)


## Environments

普段はここを使っていませんが、環境ごとにPiplineなどを管理したいときは利用できます。詳細はこちらを参照ください。
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/environments?view=azure-devops

## Releases 

Pipelineにて、コードをビルドしたあとにはDeployment Artifactsと呼ばれるリリース用のアウトプットを生成することができます。このArtifactsを使い指定したAzureのサーバーなどにリリースをすることができます。ここで開発したコードでビルドされたものをリリースすることになります。

下記のようにビルドされた後に、リリースするフローを作成し管理することができます。ここではマスターブランチがマージされたあと自動的にビルドを行い、テスト環境に自動的にリリースされるようになっています。そして本番環境（リリース用スロット）へは手動でリリースするようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/fc8eac00-66b4-fd05-67a7-244a88b42e40.png)


## Library 

ここではYAMLで呼び込める変数などを管理することができます。普段は使っていませんので、詳細はこちらを参照ください。
https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml


## Task groups

こちらも普段利用することなく、詳細はこちらを参照ください。
https://learn.microsoft.com/en-us/azure/devops/pipelines/library/task-groups?view=azure-devops

## Deployment groups

複数のdeploymentを行う際にグルーピングする機能です、こちらも普段使っていません。　詳細はこちらを参照ください。https://learn.microsoft.com/en-us/azure/devops/pipelines/release/deployment-groups/?view=azure-devops

# Test PLans

テストプランは普段使っていません、テスト計画の利用はTest Planが必要となります。　詳細はこちらを参照ください。
https://learn.microsoft.com/ja-jp/azure/devops/test/overview?view=azure-devops


# Artifacts

Artifactsでは開発したコードのArtifactsを共有できる仕組みです。普段は使っていませんので、詳細はこちらを参照ください。　https://learn.microsoft.com/ja-jp/azure/devops/artifacts/start-using-azure-artifacts?view=azure-devops

# まとめ

リモートワークがメインとなっている本日、複数の開発者が各々の環境で仕事しているため、Azure DevOpsのようなサービスで、開発タスク及びコードを管理し、アウトプット先（サーバー）も管理できる環境が必要とされています。また、テック市場は成長が著しく、Azure DevOpsを使い倒して、高品質かつ爆速でプラダクト開発を進めることが求められています。この記事では、とても簡易な説明に限定されていますので、是非今回貼り付けたリンク先を読んで、使い倒してくださいませ。

# 採用中

現在私が進めているレシートローラーでは絶賛採用中です。紙レシート削減を一緒につき進めてくれるエンジニアの方はこちらからご応募ください。

https://receiptroller.com/ja/jobs