Azure DevOpsを使う　Boardsの設定

Azure DevOpsは便利ですが、設定や用語を一から学ぶ必要があり、またセットアップを一からしていく日本語の記事があまりないと思うので、ちょうどAZ-400の勉強もかねてまとめてみます。

本記事はAzure Boards編です。

前提として、Scrum Templateを使っていきます。
Scrumの知識があると単語とかわかりやすいかと思います。
https://scrumguides.org/

（なお、貼っているスクショは新規かサンプルプロジェクトのものです。）

デフォルトでも使えなくはありませんが、意外とあまり知られていないカスタマイズすることでさらに使いやすくすることができます。

# Boardsの設定
Project Settings、Organization Settingsから実施する設定類です。

## Iterationを設定する
これはカスタマイズというより使い始めの初期設定の様なものです。

https://learn.microsoft.com/ja-jp/azure/devops/organizations/settings/set-iteration-paths-sprints?view=azure-devops&tabs=browser

左下のProject Settings > Boards > Project configurationからIterationを設定します。今回は1 Iterationを2週間とします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/1eb33bf8-8756-61c8-8d94-8b6021ecb423.png)
もう一か所、Project Settings > Boards > Team configurationにも反映されていることを確認します。（プロジェクト単位とチーム単位でIterationを異なる期間で区切れるようです。基本同期しているはずですが、念のため確認。)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/3b6e9ef1-11da-b2b0-0668-edc8bce3fa76.png)

Iterationの設定が完了したらBoardsが使えるようになります。
これはIterationの期間が終わったら毎回次のIterationをまた10個くらい作る必要があり、DevOps側で自動化してほしいところであります。

## Processをカスタマイズしてみる
Organization Settings > Boards > Processにいく。
※Organization Settingsは左上のAzure DevOpsのロゴをクリックした状態で、左下の歯車アイコンを見てみるとOrganization Settingsに飛べます。
お前さっきまでProject Settingsやなかったんかい。。正直このUIはどうかと思う。

Azure DevOpsは前提として、一つのOrganizationに複数のプロジェクトを紐づけることができます。プロセスのテンプレートは共通のOrganizationの設定になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/9d4de2c8-649d-3c0f-a4c2-60b69fe1da66.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/9c941f71-99f8-0477-f6a2-26e759572dab.png)


今回はデフォルトのTemplateのうちScrumを設定しています。Scrum TemplateではEpic > Feature > Product Backlog Item（PBI）> Taskという階層構造になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/6e4dd343-087c-c111-cb59-2fcf50a62aa4.png)

https://learn.microsoft.com/ja-jp/azure/devops/boards/work-items/guidance/choose-process?toc=%2Fazure%2Fdevops%2Freference%2Ftoc.json&view=azure-devops-2022&tabs=agile-process

デフォルトのプロセスは編集不可なのでここからデフォルトのプロセスを継承して独自のプロセスを作ることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/91602ed0-fb70-402d-90dc-406df9dfb93d.png" width=50%>

おすすめのカスタマイズポイントは以下です。
### 独自のItemの作成
デフォルトだけだと、「あれ、この作業はProduct Backlog Itemなのか？」と迷うような場面がありますが、Item Typeを追加することできます。例えば、
- PBIと同階層にScrum Event、社内業務
- タスクと同階層にQA（お客さんとのやり取り用）、Meeting

ScrumイベントやQA等開発以外のタスクにどれだけ時間がかけているか後々把握しやすくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/a9201bd9-bd9c-8ffe-beee-b5881fdc6768.png)

例えばScrumEventはPBIと同レベルに作るならBacklogLevelも設定してやります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/2399cbf4-040b-f5e7-d0d2-5886cdfc1724.png)

ScrumEventの配下用にMeetingを追加してやりましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/3ca092ea-2a1e-853c-208e-a8fac28625b7.png)

MeetingのStateはTaskと合わせて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/b2fa48de-c592-0b43-c595-c5f47854e97c.png)

LayoutもTaskに合わせて
![Screenshot_20230425-211445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/6751a2ab-e03b-ed40-20a1-59bffa8d55cb.png)

Levelを合わせて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/c415fc4f-f116-d032-cfd2-af7443bba0be.png)

Sprints > Column Optionから適当に合わせて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/d2ae4029-8e55-9a3f-ca64-acea0e9435b5.png)

ScrumEventがPBIと同レベル、MeetingがTaskと同レベルで作れるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/e98141a3-f3df-b9f6-aa8d-8039940aaa43.png)


### Taskの表示項目の変更
タスクはデフォルトだとこんな表示です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/90ee756a-62b0-e5c9-2441-58d39531d696.png)
ですがAzure DevOpsのWork Itemは裏で様々な値を持っており、表示・非表示はもちろん、追加・削除もすることができます。

ここではRemaining Work（残作業時間）しか出ていないので、All processes > [新プロセス名] > [Item名] > Layout > [New field] からOriginal Estimate（当初見積もり）とCompleted Work（作業済み時間）を追加しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/e64f953a-573f-9f5a-5758-fbb09ba7b197.png)
これがあると、当初見積もりが4時間なのに、もう8時間作業している、メンバーの作業見積もりが甘いんじゃないかとか、色々気づきを得ることができます。（タスクの時間を毎日しっかり入力していることが前提ですが。）

### PBIにテンプレートを設定する
PBIのDescriptionを初回作成した場合、最初は何を書けばいいかわからない人もいるかもしれないので、まずはテンプレートを表示するようにしましょう。
PBIのRuleをDescriptionが空の場合、テンプレートを表示するように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/dfecc464-5517-1a66-3c5f-929e644d3e39.png)

Thenには以下のように表示したいテンプレートをhtml形式で記載します。
```
<b>目的</b>
<br>
<br>
<b>背景</b>
<br>
<br>
<b>DoR</b>
<br>
<br>
<b>概要</b>
<br>
<br>
<b>成果物</b>
<br>
<br>
```
PBIの作成画面にテンプレートが表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/2ec79162-4409-3ee0-9d6d-f36012d093c3.png)

### Original Estimateを入れたら自動的にRemaining Workに値が入るようにする
入力項目が増えると人は嫌がるものです。Task作成時にOriginal Estimateを入れると自動的に値がRemaining Workにも入るようにしてあげましょう。ユーザーは後はCompleted WorkとRemaining Workだけを更新していけばよくなります。

※2024/07/05 書いていた設定に誤りがあったため修正しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/627ffa49-300e-56d0-15e5-bf7da3d9f680.png)
（どうやらTask更新時に毎回チェックプロセスが走るようで、元のA value is defined for...だとRemaining Workを手動で更新すると、Original Estimateで上書きされてしまうようになっていました。）

なお、カスタムプロセスを作った後はプロジェクトでそのプロセスを利用するようにプロセスを変更する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/b1c49fe8-8d67-e7f8-e028-695565225e96.png)

## バグを要件として管理する
https://learn.microsoft.com/ja-jp/azure/devops/organizations/settings/show-bugs-on-backlog?view=azure-devops

バグの管理の仕方を決めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/91e44a65-6689-2b59-33d6-e3dfd5f0890e.png)
おおざっぱに言って、バグを①PBIレベルで管理するか、②タスクレベルで管理するか、③それとも完全に別で管理するかということになります。

①の場合はPBIと同階層なので、SprintsやBacklogsに表示されるようになります。Bugの下にタスクを作ることができます。
②の場合はPBIの下にBugを作ることができるようになります。
③の場合は別管理なので、ボード類に表れなくなるようです。クエリで管理していくことになります。

業務では①しか使ったことがないのですが、バグはタスクとして管理するには複雑、大きすぎることが多く、PBIレベルでタスクをぶら下げて管理するほうが個人的には好きです。

# 各種ボードについて
初心者が参ってしまうのが、ボードの種類が多く、かつ違いが分かりづらいので、何をどこで表示、作成できるのかわからない、ということでしょうか。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/95582e93-d25b-38ca-53aa-2f1f8496c1a4.png" width=30%>

個人的な使い方ですが、ざっくりこんな感じです。
- **Work Items**：
Itemを全部表示したいときに使う。あまり使わない。
- **Boards**：
PBI以上を一覧で表示する。が、Backlogsかクエリで見ればいいので、あまり使わない。
- **Backlogs**：
主な使い方は2つ。
①右上の表示フィルタをEpicsにするとItemの階層構造を表示する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/c3eeebf6-18fe-f611-92c0-de3fd5e6fec1.png)
②表示フィルタをBacklog Itemsにして、フィルタのParentsをOffにしてPBI（とバグ）の一覧を表示する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/8996aa87-be8d-dbe4-11a9-45fe390d2a77.png)
ここで左にあるOrderがPBIの優先順位となるので、この画面を見ながらお客さんと話すことが多い。
- **Sprints**：作業者やチームリードが見るのがここ。自分にアサインされているタスク、進捗状況の把握・更新に使う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/7ebfc3d4-9992-bb1b-33a0-f7d7d823bf4a.png)
- **Queries**：WorkItemに対するクエリを実行できます。担当者、Iteration等すべての項目でフィルタリングが可能です。とてもよく使います。
- **Delivery Plans**：PBIにIteration Pathを設定すれば使えるようになります。Microsoft Projectのようにガントチャートを作れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/a1832212-7045-70cc-0b32-a039b7b07df9.png)


## 各種ボードの表示のカスタマイズ
デフォルトだとボードに表示したい項目がないときが多いので、表示してあげましょう。なお、これはプロジェクト単位で設定できないため、人ごとに設定する必要があります。

### Backlogs
#### 表示項目
上のColumn Optionsから表示したい項目を選ぶことができます。
Assigned To（担当者名）やWork時間、Estimate時間等用途に応じて表示しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/c1333af0-5c95-0c23-1146-4e92d5308529.png)
### Sprints
デフォルトだとAssigned toとStateしか表示されません。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/617f86e3-bd76-3c3f-22d0-67ed72b40db8.png" width=50%>

Sprints画面の右上の歯車から、表示する項目を増やせます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/c700ef52-d906-d10f-8024-075586a1495e.png)

#### Capacity
毎Iterationの頭に1日に何時間プロジェクトにアサインされているか、休暇取る予定はあるか、等を入力します。契約上労働時間は8だとしても、8時間フルにプロジェクトワークできるわけではないので、6時間くらいにするのが無難でしょう。マネージャとかだともっと少なくてもいいかもしれません。祝日とかがある場合はTeam days offに入れましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/6c1260ae-605c-7632-4a19-fb9b4d00a6ed.png)

#### In Progressの後にIn Reviewを追加
※これはこういう事もできるよというご紹介です。レビューはレビュータスクとしてレビュワーをアサインするのが本来だと思います。お客さんやマネージャとかタスクがあるけどDevOpsでタスク管理していない場合は使えるかもしれません。

先ほど上で紹介したProcessのカスタマイズのところから、Taskを選択し、新たなStateとしてIn Reviewを追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/ebeddca7-b494-bde2-914a-0f92440bf902.png" width=50%>
そのうえでSprints画面 > Column OptionsにIn Reviewというカラムを追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/d8385e1c-6d51-9c9d-00b2-834767934f77.png" width=70%>
In Reviewができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/c5b15d58-cec8-633e-f8e0-a06c2e7399d3.png)


色々書きましたがこんな感じでしょうか。とりあえずこれでAzure Boardsの基本的なカスタマイズはできるようになったかなと思います。
カラムやWork Item Typeは自分勝手に作るのではなく、Scrumに則って作ってみるといいかなと思います。


# その他おすすめ
こちらにも色々便利そうな設定が。

https://kkamegawa.hatenablog.jp/entry/2020/04/20/084537