GitLabをアジャイルな開発環境でどのように使うか

 
プロダクト開発を行う上で開発する機能を各人のタスクに分解し進捗管理するために、どのツールを使うかは生産性の非常に大きなファクターになります。Scrum Guideにはどのようにスクラムを行うといいかは書いてありますが、どのようなツールを使ってスクラムを行っていくかは書いてありません。それがScrum Guideのいいところなのですが、自由にツールを選べることでどれがいいか迷いながらそしてツールを移行しながらやっていくケースも多いと思います。オフィスに集まって開発していたころは付箋と会話でよかったかもしれませんが、リモートがあたりまえの開発では何らかしらのオンラインで編集できるツールが必要です。
今回はツールの候補の1つであるGitLabで、どのようにすればアジャイル開発に適用できそうかというのを公式のドキュメントを参考にして探っていきます。

アジャイルなプロダクト開発では何を確認する必要があるか

Mapping Agile artifacts to GitLab featuresにアジャイル開発で使うものと、それがGitLabでどの機能にあたるかの対応表があります。それをもとに、各役割の人が何にフォーカスして、どの機能を主に使うかというのをマッピングしました。
(GitLabを紹介するための一例としてこのように表現しています。組織によって異なると思いますが説明しやすいように単純化しています。メンバもプロダクトやイテレーションにも気を配るべきだとは思っていますが単純化するとフォーカスや使う機能はどうかという話です。)

GitLabでの各機能の紹介

Group/Project

架空のプロダクトで開発を通してGitLabを使っていきましょう。Todoリストの という名前のプロダクトを開発するとしましょう。まず各種機能を使うために以下を作ります。
作ったもの名前機能
GroupTODOTODOプロダクト全体を管理するグループ
ProjectTODO-clientTODOプロダクトのソースコードを保存するレポジトリ

Epic

グループのプロダクトオーナは最初のリリースのために以下のEpicを作りました。
 

Issue

Epicを完了するためのUser storyをIssueとしてプロダクトオーナは追加します。
 
Issueができあがったら各Issueで何を行うかの詳細化が必要です。必要なメンバが開発可能になるようにタスクリストを追加します。Issue同士の依存関係も設定できます。今回は#1が完成しないと#2と#3は作業ができません(Blocks)。Issueにweight(story point)も振ることができます。後述するMilestoneでweightによるBurndown/Burndownチャートが表示できます。
 

Milestone

スクラムマスタは開発計画をたてるためにMilestoneをつくります。
 
依存関係を考慮して#1のIssueをMilestone 1に、#2と#3のIssueをMilestone 2に振ります。weightの合計やBurndown/Burnupチャートを見ることができます。
 

Merge Request

メンバはIssueが開発可能になったので開発し、Merge requestを出します。
 

Roadmap

Merge requestがマージされると、Issueが自動で閉じられます。IssueはEpicに紐付けられているので、プロダクトオーナやスクラムマスタは、Roadmapで進捗を確認できます。
 
他にも多くの機能がありますが、これでMapping Agile artifacts to GitLab featuresで紹介している一連の機能には触れました。Agile Planningでも同じような概要がみれます。

チームのサイズによる違い

チームが1つでプロダクトも1つという小さな組織では先ほどの使い方でも大丈夫そうですが、複数のチームがあるような大きな組織はどのようにGitLabが使えるか疑問がわいてくると思います。GitLabはHow to use GitLab for Agile portfolio planning and project managementで述べていることが以下の図に凝縮されています。Epicを階層化して対応するのがよさそうです。

まとめ

GitLabを使ってどのようにアジャイルな開発をマネージできるか確認していきました。開発で使うそれぞれのアイテム(Roadmap, Milestone, Issue, Merge Requestなど)が連動してプロダクトメンバの負荷を下げるように作られているのがわかりました。多くの機能があるために結構ごちゃごちゃしていますが、1つのツールだけでアジャイル開発すべての工程をまかなえるのが大きな魅力でした。

参考

参考にしたドキュメント

GitLab.org自体のGroup

GitLabの価格と使える機能

Free/Premium/Ultimateと3種類あります。
Ultimateでは使えるが、Premiumでは使えない機能で特に気になる機能を抜粋します。
  • Multi-level Epics
機能が使えるか使えないかは常に更新されると思うので最新の情報は直接サイトを確認してください。

Stories, epics, and initiativesの違いについて

あとがき

GitLabを使っていて大変だと感じたところ

以下につらつらと書いていきます(あくまで個人の感想です)。一言で言うと素晴らしいプロダクトですがチームに大きな教育が必要です。
  • 初めて使う人(特にAgile開発に慣れていない人)にとってはEpic, Miliestone, Iterationなど新しい概念が多くあり概念の学習コストが高い
  • GroupやSub Groupを多様すると階層が増え認知負荷が高くなる。自分がどの階層にいるのかわからなくなる。Milestoneをつくる際にもどこのGroupやProjectにMilestoneを所属させたらいいか自明ではない。
  • GitHubと比べると情報がごちゃごちゃしている。IssueのActivityの中からMerge Requestがどれか探すのも結構大変(慣れていないだけかもしれませんが)