APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azure DevOpsでプロジェクトのProcessを変更する

f:id:thanaism:20211111142235p:plain

はじめに

こんにちは、コンテナソリューション事業部の髙井です。

今日もみんな大好き ADO(Azure DevOps)について書いていきます。

初見ではわかりにくいプロジェクトの プロセス についてです。

スクラムに精通している人ならともかく「これからアジャイルっぽいことに挑戦するぞー!」という場合はなかなかとっつきにくいポイントなのかと思います。

そうした場合、最初に間違えて選んでしまったプロセスをあとから変えたくなったりすること請け負いです。

本記事では、プロセスの切替をメインに付随する概念の説明もしますので、切り替えをしない場合にも参考になればいいなと思って書いています。

プロジェクトのプロセス

f:id:thanaism:20220323164453p:plain
Project SettingsのOverviewで現在のProcessが確認できる

ADOを使い始めようとすると、まずプロジェクトを作成する必要があります1

そして、プロジェクトの作成時にプロセスを選択する必要があります。

  Azure DevOpsのプロセス選択肢  
  • Basic
  • Agile
  • Scrum
  • CMMI

名前から察しがつくとは思いますが、たとえばスクラム方式でプロジェクト管理をするなら [Scrum] を選択します。

ADOを使い始めていきなり選択するものなので、よくわからないまま適当に選んでスタートしてしまったというパターンも多いのではないでしょうか。
(訂正)ADO組織を作成して一番最初に作成するプロジェクトでは、そもそも強制的にBasicになる仕様でした。

f:id:thanaism:20220323182924p:plain
本当に最初のプロジェクトだと選ぶ余地すらなかった

新規作成の画面でも隠れている

一番最初のプロジェクトでなくても 新規作成の画面では設定箇所が隠れていたりする ので、あとからプロセスを変えたくなるシーンってそれなりにあるのではないかと思います。

f:id:thanaism:20220323181201p:plain
プロジェクトの新規作成画面(プロセスの設定は"Advanced"の中に隠れている)

f:id:thanaism:20220323181422p:plain
"Advanced"の中を見ると選択できるのがわかる

プロセスをあとから変更するのはそれなりにめんどくさい

ADOでは、あとからプロセスを変更する機能がサポートされています。ただし、完全自動ではできません

各プロセスで存在する作業項目(チケット)の構造が異なっており、うまく手作業で整合性を取る必要があります。

この手作業に関してMicrosoft Docsにページがあるため基本的にはそれを読めばよいのですが、読むのに少し前提知識が必要なので本記事で補足しようと思います。

docs.microsoft.com

  補足するポイント  
  • Work Item Type(作業項目の種類)
  • Inherited Process(継承されたプロセス)
  • Workflow States(ワークフローの状態)

ざっくり上記3点が分かればスムーズに移行できるでしょう。

Work Item Type(作業項目の種類)

まず、大きなポイントとしてWork Item Typeの違いがあります。日本語ドキュメントだと作業項目の種類と訳されていたりします。

f:id:thanaism:20220323184319p:plain
移行先に同じWork Item Typeがないとエラーに

たとえば、Basicのプロセスでは以下のような作業項目の構造になっています。

f:id:thanaism:20220323185255p:plain
BasicプロセスのWork Item Type(図は公式から引用)

また、Scrumのプロセスでは以下のような構造になっています。

f:id:thanaism:20220323185700p:plain
ScrumプロセスのWork Item Type(図は公式から引用)

BasicからScrumに移行を考える際に、EpicとTaskは項目が共通していますが、IssueはScrumに含まれていません。

このように、移行先に存在しないWork Item Typeがあるとプロセスの移行は失敗します。

Inherited Process(継承されたプロセス)

移行先に存在しないWork Item Typeがあるなら、それらを追加してやればいいです。

しかし、システム組み込みで用意されているScrumプロセスに直接Issueタイプを組み込むことはできません。他のBasicプロセスを利用しているプロジェクトに影響が出てしまうからです。

そのため、Basicプロセスから派生させたプロセスを作ってそちらを改変します。

公式ドキュメントではInherited processだとか継承されたプロセスの種類と表記されています。

  移行のための継承プロセスの例  
  • BasicからScrum:ScrumにIssueを加えたものを作成
  • ScrumからAgile:AgileにProduct Backlog Itemを加えたものを作成
  • AgileからScrum:ScrumにUser Storyを加えたものを作成

継承されたプロセスの作成

上で紹介したMicrosoft Docsにも記載がありますが、簡素な説明なため少し補足します。

冒頭のProject SettingsProcess欄をクリックするか、Organization SettingsProcessからプロセスの編集画面にいけます。

f:id:thanaism:20220323211123p:plain
Create inherited processから作成する

BasicからScrumならIssueを追加しますし、AgileからScrumに移行するならUser Storyを種類として追加します。

f:id:thanaism:20220323214411p:plain
User Storyを組み込んだScrum継承プロセスを作成する

f:id:thanaism:20220323214606p:plain
Scrum継承プロセスに"User Story"名称のTypeを追加

Work Item Typeを追加する際に、上記画面で [Create] するとフィールドの詳細設定に画面推移されますが、移行する目的を果たすだけなら詳細設定は省略して、プロセス切り替え実行に移ってよいです。

ただし、User StoryにおけるStory Pointsなどの情報を切替後も表示させ続けたい場合は、詳細画面でフィールドを手動で作成してください。

f:id:thanaism:20220323193403p:plain
Scrumへ単純にUser Storyを追加しただけの状態
f:id:thanaism:20220323193451p:plain
AgileデフォルトのUser Storyにある項目を見ながら復元する

上記2枚の画像の差分を埋めるようなイメージです。[New group] で Plannning を作成して、そこに [New field] で Story Points を追加するなどしていきます。

f:id:thanaism:20220323215315p:plain
フィールドを追加しないまま移行して"Story Points"が表示されていない例

ただし、これはあくまで欄が表示されなくなるだけで内部的に値は残っているようです。

いろいろ実験してみましたが、これらフィールドに入力していた値はたとえWork Item Typeを変えても消失しないようです。

たとえば、AgileプロセスでUser Storyを作成し、Story Pointsに値を入力し、フィールドを追加しないままScrumプロセスへ切り替え、さらにアイテムの種類をUser StoryからProduct Backlog Itemに変更しても値は消えませんでした。

その状態でProduct Backlog ItemにStory Pointsフィールドを追加すれば最初に入力していた値がちゃんと復元されます。

Workflow States(ワークフローの状態)

プロセス移行の山場は「継承されたプロセスの作成」で説明した部分ですが、実際に切り替えを行うと各ボードのカラムもプロセスごとに異なるため不一致となることに気付きます。

かんばんボード

f:id:thanaism:20220323230235p:plain
Agileプロセスのかんばんボード
f:id:thanaism:20220323231306p:plain
Scrumプロセスのかんばんボード

Agileのかんばんボードは、New->Active->Resolved->Closedです。
Scrumのかんばんボードは、New->Approved->Commited->Doneです。

Scrumでは、Product Backlog Itemと同列でBugを扱うのがデフォルト設定です。

スプリントボード

f:id:thanaism:20220323225329p:plain
Agileプロセスのスプリントボード
f:id:thanaism:20220323231206p:plain
Scrumプロセスのスプリントボード

Agileのスプリントボードは、New->Active->Resolved->Closedです。
Scrumのスプリントボードは、To Do->In Progress->Doneです。

AgileではTaskと同列でBugを扱うのがデフォルト設定です。

作業項目の状態を一致させる

このように、各プロセスでWorkflow Stateが異なり、それに伴い各ボードのColumnも異なるので、手作業で一致させる必要があります。

f:id:thanaism:20220323225649p:plain
Scrumに切り替えるだけでは以前の作業項目が機能しない

こちらは上で紹介したMicrosoft Docsに手順が細かめに載っていますので根本的に詰まることは少ないと思いますが、「AgileとScrumでそれぞれどんな状態があるんだっけ?」と作業中にいろいろ調べるのは面倒ですのでまとめておきました。

おわりに

このように、最初に選ぶシーンでミスりやすいプロセスですが、いったんプロジェクトが走り出してから「そもそもプロセスの選択がまちがってるっぽい!」と気付いて後から切り替えようとすると、そこそこ手間がかかります。

ADOではプロセスによってこのような機能の違いがある、ということが伝わるだけでもAzure DevOpsをぐっと使いこなしやすくなると思います。切り替え作業を行うことがなくてもプロセス周りの知識をご活用いただければ嬉しいです。

それでは、今回のところはここまで……え?こないだの記事で書くと予告していた「Application Gatewayを完全に理解する」はいつ書かれるのかですって?やー、書きたいことはいっぱいあるんですけどね。気長にオマチクダサイ……。


  1. 組織・プロジェクト・チームなどの構成要素についてはこちらの記事で説明しています。