チュートリアル: GitLabをScrumに活用する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
このチュートリアルでは、アジャイルプランニングとGitLabの追跡機能を使用して、主要なScrumセレモニーとワークフローを容易にするための段階的なガイダンスを提供します。グループ、プロジェクト、ボード、その他の機能を意図的に設定することで、チームは強化された透明性、コラボレーション、およびデリバリーケイデンスを実現できます。
Martin FowlerのAgile Fluency Modelによると、Scrumを実践するチームは次のとおりです:
…スポンサー、顧客、およびユーザーがソフトウェアから得られるメリットを考慮して、考え、計画します。
彼らは、進捗状況を毎月実証し、プロセスと作業習慣の改善を定期的に検討することで、より多くのビジネスおよび顧客価値を提供することにより、これを達成します。
このチュートリアルでは、次のトピックについて説明します:
グループとプロジェクトのセットアップ
GitLabでScrumの実践を容易にするには、まずグループとプロジェクトの基本的な構造をセットアップする必要があります。グループを使用して、そのグループの下にネストされたプロジェクトに継承できるボードとラベルを作成します。プロジェクトには、各スプリントの実際の作業アイテムを構成するイシューとタスクが含まれます。
GitLabにおける継承モデルの理解
GitLabには、グループがプロジェクトを含む階層構造があります。グループレベルで適用された設定と構成は、子プロジェクトにカスケードダウンされるため、複数のプロジェクト間でラベル、ボード、およびイテレーションを標準化することができます:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: GitLab inheritance model diagram
accDescr: Shows how groups, projects, issues, labels, milestones, iterations, tasks, and epics relate to one another in GitLab
Group -->|Contains| Project
Group -->|Contains| Epics
Group -->|Contains| Labels
Group -->|Contains| Boards
Group -->|Contains| Iterations
Group -->|Contains| Milestones
Group -->|Contains| Roadmaps
Project -->|Contains| Issues
Project -->|Contains| Templates
Project -->|Contains| Tasks
Project -->|Contains| Milestones
Project -->|Contains| Labels
Labels .->|Cascades To| Project
Issues .->|Rolls up to| Group
Iterations .->|Cascades to| Project
Milestones .->|Cascades to| Project
Templates .->|Cascades to| Project
Templates .->|Configured in| Group
Issues .->|Child of| Epics
Issues .->|Visible in| Boards
Issues .->|Visible in| Lists
Issues .->|Assigned to| Iterations
Issues .->|Assigned to| Milestones
Tasks .->|Child of| Issues
Tasks .->|Assigned to| Iterations
Tasks .->|Assigned to| Milestones
Epics .->|Visible in| Boards
Epics .->|Visible in| Roadmaps
Epics .->|Visible in| Lists
- グループには、1つ以上のプロジェクト、エピック、ボード、ラベル、およびイテレーションが含まれます。グループのユーザーメンバーシップは、グループのプロジェクトにカスケードダウンされます。
- グループまたはプロジェクトでボードとラベルを作成できます。このチュートリアルでは、単一グループ内の多くのプロジェクトで標準化された計画ワークフローとレポートを容易にするために、グループ内にこれらを作成する必要があります。
- プロジェクトにカスケードダウンする任意のオブジェクトは、そのプロジェクトのイシューに関連付けることができます。たとえば、グループからラベルをイシューに適用できます。
グループの作成
Scrumアクティビティ専用のグループを作成します。これは、プロジェクト間で標準化する必要があるボードやラベルなどのプロジェクトや設定の親コンテナになります。
このグループは、典型的なScrumケイデンス中のさまざまなアクティビティの主要な場所になります。これには、ボード、フィーチャー(エピック)、ストーリー(イシュー)のロールアップ、およびラベルが含まれます。
グループを作成するには:
- 右上隅で、新規作成 ( ) と新しいグループを選択します。
- グループを作成を選択します。
- グループ名テキストボックスに、グループの名前を入力します。グループ名として使用できない単語のリストについては、予約済みの名前を参照してください。
- グループURLテキストボックスに、ネームスペースに使用するグループのパスを入力します。
- グループの表示レベルを選択します。
- オプション。GitLabエクスペリエンスをパーソナライズするには:
- ロールドロップダウンリストから、あなたのロールを選択します。
- だれがこのグループを使用しますか? で、オプションを選択します。
- このグループを何に使う予定ですか? ドロップダウンリストから、オプションを選択します。
- オプション。グループにメンバーを招待するには、メール1テキストボックスに、招待するユーザーのメールアドレスを入力します。他のユーザーを招待するには、他のメンバーを招待を選択し、ユーザーのメールアドレスを入力します。
- グループを作成を選択します。
プロジェクトの作成
作成したグループ内に、1つ以上のプロジェクトを作成します。あなたのプロジェクトには、親グループにロールアップするストーリーが含まれます。
空のプロジェクトを作成するには:
- 右上隅で、新規作成( )と新規プロジェクト/リポジトリを選択します。
- 空のプロジェクトの作成を選択します。
- プロジェクトの詳細を入力します。
- プロジェクト名フィールドに、プロジェクトの名前を入力します。プロジェクト名の制限を参照してください。
- プロジェクトslugフィールドに、プロジェクトへのパスを入力します。GitLabインスタンスは、このslugをプロジェクトへのURLパスとして使用します。slugを変更するには、最初にプロジェクト名を入力し、次にslugを変更します。
- ユーザーのプロジェクトの表示およびアクセス権限を変更するには、表示レベルを変更します。
- Gitリポジトリが初期化され、デフォルトのブランチを持ち、クローンできるようにReadmeファイルを作成するには、リポジトリを初期化しREADMEファイルを生成するを選択します。
- プロジェクトを作成を選択します。
異なるScrumライフサイクルフェーズをサポートするスコープ付きラベルを作成する
次に、作成したグループで、イシューを分類するためのラベルを作成します。
これに最適なツールはスコープ付きラベルで、これを使用して相互に排他的な属性を設定できます。
スコープ付きラベルの名前にあるダブルコロン (::) は、同じスコープの2つのラベルが同時に使用されるのを防ぎます。たとえば、status::in progressラベルを既にstatus::readyがあるイシューに追加すると、以前のラベルが削除されます。
各ラベルを作成するには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 左サイドバーで、管理 > ラベルを選択します。
- 新しいラベルを選択します。
- タイトルフィールドに、ラベルの名前を入力します。
priority::nowで始まる。 - オプション。使用可能な色から選択するか、背景色フィールドに特定の色を表す16進数のカラー値を入力して、色を選択します。
- ラベルを作成を選択します。
必要なすべてのラベルを作成するために、これらの手順を繰り返します:
- 優先順位: これらは、フィーチャーレベルのリリース優先順位を容易にするために、エピックボードで使用されます。
priority::nowpriority::nextpriority::later
- ステータス: これらのラベルは、イシューボード上で、ストーリーが全体的な開発ライフサイクルのどの段階にあるかを理解するために使用します。
status::triagestatus::refinestatus::readystatus::in progressstatus::in reviewstatus::acceptancestatus::done
- タイプ: これらのラベルを使用して、単一のイテレーションに通常取り込まれるさまざまな種類の作業を表します:
type::storytype::bugtype::maintenance
イテレーションケイデンスを作成する
GitLabでは、スプリントはイテレーションと呼ばれます。イテレーションケイデンスには、イシューの計画とレポート作成のための個別の連続したイテレーションタイムボックスが含まれます。ラベルと同様に、イテレーションはグループ、サブグループ、およびプロジェクトの階層にカスケードダウンされます。そのため、作成したグループにイテレーションケイデンスを作成します。
前提条件:
- グループに対してレポーター、デベロッパー、メンテナー、またはオーナーのロールを持っている必要があります。
イテレーションケイデンスを作成するには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 左サイドバーで、Plan > イテレーションを選択します。
- 新しいイテレーションケイデンスを選択します。
- イテレーションケイデンスのタイトルと説明を入力します。
- 自動スケジュールを有効にするチェックボックスが選択されていることを確認します。
- 自動スケジュールを使用するには、必須フィールドに入力します。
- イテレーションケイデンスの自動開始日を選択します。イテレーションは、開始日の曜日と同じ曜日に開始するようにスケジュールされます。
- 期間ドロップダウンリストから、2を選択します。
- 今後のイテレーションドロップダウンリストから、4を選択します。
- ロールオーバーを有効にするチェックボックスを選択します。
- ケイデンスを作成を選択します。ケイデンスリストのページが開きます。
このようにイテレーションケイデンスを設定すると、次のようになります:
- 各スプリントは2週間の長さです。
- GitLabは将来的に4つのスプリントを自動的に作成します。
- 1つのスプリントの未完了のイシューは、現在のスプリントがクローズされると、自動的に次のスプリントに再割り当てられます。
自動スケジュールを無効にし、イテレーションを手動で作成および管理する in yourケイデンス.
機能バックログの管理
フィーチャーバックログは、エピックの形式でアイデアと目的の機能をキャプチャします。このバックログを改良するにつれて、エピックは今後のスプリントへのフローのために優先順位付けされます。このセクションでは、バックログ管理を容易にするエピックボードの作成と、最初のフィーチャーエピックの作成について説明します。
作業の構造を決定する
GitLabは、さまざまな種類のバックログ管理をサポートするように拡張可能です。このチュートリアルでは、成果物を次のように構造化します:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: Deliverables structure
accDescr: Flowchart of features (epics) to job stories (issues) to implementation steps (tasks)
Epic["Feature (Epic)"] --> Issue["Job Story (Issue)"]
Issue --> Task["Implementation Step (Task)"]
エピックは、チームが単一のイテレーションで提供できる機能を表現します。
各エピックには多くのJob Storyが含まれます。
- ストーリーは、具体的な顧客価値を提供し、明確な受け入れ基準を含み、個人が1〜2日で完了できるほど小さいものであるべきです。
- チームとして1スプリントあたり4〜10個のストーリーを完了できる必要があります。
機能を分割する戦略は多数ありますが、優れた戦略の1つは、ユーザーが目標を達成するために必要な個別の独立したストーリーに、垂直に分割することです。
顧客に単一のストーリーを出荷できない場合でも、チームは本番環境またはステージング環境で機能フラグを使用することで、各ストーリーをテストし、操作できるはずです。これは、ストーリーの進捗状況に対するステークホルダーへの可視性を提供するだけでなく、より複雑な機能をアプローチしやすい開発目標に分解するためのメカニズムでもあります。
ストーリーの複雑さによっては、ストーリーを完了するために開発者が実行する必要がある個別の実装ステップにタスクを使用してストーリーを分割できます。
時間軸の観点から、作業アイテムのサイズ設定とスコープ設定には以下のガイドラインを目標とします:
- 一つのfeatureは単一のイテレーションで完了できます。
- 一つのstoryは数日で完了できます。
- 一つのタスクは数時間から1日で完了できます。
例: 機能の垂直分割
エンドユーザーのジャーニーに基づいて、機能を垂直にスライスされたジョブストーリーに分解する例を次に示します:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: Slicing a feature
accDescr: Use the end user's journey to identify slices of work to be completed in iterations
Epic["Epic: When using the application,<br>I need to create an account,<br> so I can use the application features"] --> Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"]
Epic --> Issue2["Issue: When creating my account,<br> I need to specify a password,<br> so my account remains secure"]
Epic --> Issue3["Issue: When creating my account<br> and entering the required info,<br> I need to finalize creating my account,<br> so I can sign in"]
アプリケーションの未変更のアカウント作成機能を、3つの個別のストーリーに分解しました:
- メールアドレスの入力。
- パスワードの入力。
- アカウント作成を実行するためのボタンを選択。
機能をストーリーに分解した後、ストーリーを個別の実装ステップにさらに分解できます:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: Break the story down further
accDescr: Split apart a story into smaller steps
Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"]
Issue1 --> Task2["Task: Backend<br> Validate email formatting"]
Issue1 --> Task3["Task: Backend<br> API endpoint to accept<br> POST request from client"]
Issue1 --> Task4["Task: Frontend<br> Display email input"]
Issue1 --> Task5["Task: Frontend<br> Display error message when validation fails"]
リリース計画ボードのセットアップ
成果物の構造を定義しました。次のステップは、フィーチャーバックログを開発および維持するために使用するエピックボードを作成することです。
新しいエピックボードを作成するには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 左サイドバーで、Plan > エピックボードを選択します。
- 左上隅で、現在のボード名を含むドロップダウンリストを選択します。
- 新しいボードを作成を選択します。
- 新しいボードのタイトルとして
Release Planningを入力します。 - ボードを作成するを選択します。
次に、リストを作成します。対象はpriority::later、priority::next、およびpriority::nowラベルです。
新しいリストを作成するには:
- ボードの右上隅で、Create listを選択します。
- 新しいリスト列で、ラベルを選択ドロップダウンリストを展開し、リストスコープとして使用するラベルを選択します。
- ボードに追加を選択します。
これらのリストを使用して、ボード内で機能を左から右に移動させます。
リリースプランボードの各リストを使用して、次の時間軸を表します:
- オープン: 優先順位付けの準備がまだできていない機能。
- Later: 後続のリリースに優先順位付けされる機能。
- Next: 次のリリースのために暫定的に計画されている機能。
- Now: 現在のリリースのために優先順位付けされた機能。
- クローズ: 完了またはキャンセルされた機能。
最初のエピックの作成
次に、priority::nowリストに新しいエピックを作成します:
priority::nowリストの上部にある新しいエピック ( ) アイコンを選択します。新しいエピックのタイトルを入力します:
When using the application, I need to create an account, so that I can use the application features.エピックを作成を選択します。
このステップを完了すると、ボードは次のようになります:
これで、Release Planningボードを使用して、バックログを迅速に構築できます。
多くの機能をスタブとして作成し、Now、Next、Laterリストに優先順位を付けます。次に、各ストーリーをストーリーとタスクにさらに分解するために時間を費やします。
リスト内またはリスト間でフィーチャーエピックを並べ替えるには、エピックカードをドラッグします。また、リストのカードを上または下に移動することもできます。
ストーリーバックログの管理
エピックとして定義された機能がある場合、次のステップは、それらの機能をイシューとして粒度の高い垂直なスライスに分解することです。その後、専用のバックログボードで、これらのイシューを複数のイテレーションにわたって洗練し、順序付けします。
機能をストーリーに分割する
効率的なスプリントプランニングミーティングを行うために、機能を垂直にスライスされたストーリーに事前に分解します。前のステップでは、最初のフィーチャーを作成しました。それをストーリーに分解してみましょう。
最初のストーリーを作成するには:
上部のバーで、検索または移動先を選択して、グループを見つけます。
左サイドバーで、Plan > エピックボードを選択します。
左上隅で、現在のボード名が表示されているドロップダウンリストにRelease Planningが表示されていることを確認します。そうでない場合は、ドロップダウンリストからそのボードを選択します。
エピックカードのタイトルをクリックして、エピックを開きます。
Child issues and epicsセクションで、追加 > Add a new issueを選択します。
イシューの次のタイトルを入力します:
When creating my account, I need to specify my email address so that I can receive future updates from the applicationプロジェクトドロップダウンリストから、イシューを作成したいプロジェクトを選択します。
イシューを作成を選択します。
他の2つの垂直スライスについてもこのプロセスを繰り返します:
When creating my account, I need to specify a password so that my account remains secureWhen creating my account and entering the required information, I need to finalize creating my account so that I can sign in
ストーリーバックログの洗練
前のステップでは、機能を完了するために必要なユーザーストーリーに機能を分解しました。次に、ストーリーバックログを管理および洗練するための標準的な場所として機能するイシューボードをセットアップします。
グループで、Backlogというタイトルの新しいイシューボードを作成します。このボードを使用して、ストーリーを今後のスプリント(イテレーション)に順序付けし、スケジュールします:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 左サイドバーで、Plan > イシューボードを選択します。
- 左上隅で、現在のボード名を含むドロップダウンリストを選択します。
- 新しいボードを作成を選択します。
- 新しいボードのタイトルとして
Backlogを入力します。 - ボードを作成するを選択します。
ボードを作成したら、今後の各イテレーション用に新しいリストを作成します:
- イシューボードページの右上隅で、Create listを選択します。
- 表示される列で、スコープの下にあるイテレーションを選択します。
- 値ドロップダウンリストから、いずれかのイテレーションを選択します。
- ボードに追加を選択します。
- 他の今後のイテレーションについても前の手順を繰り返します。
次に、イテレーションが終了したら、完了したイテレーションリストを削除し、ケイデンス設定に基づいて自動的に作成された新しい将来のイテレーションの新しいリストを追加する必要があります。
この時点では、ストーリーは見積もられておらず、タスクに洗練されていません。それらを洗練するためにマークします:
- ボード内の各イシューのカードを選択し、
status::refineラベルを適用します:- サイドバーのラベルセクションで、編集を選択します。
- ラベルを選択リストから、
status::refineラベルを選択します。 - ラベルセクション以外の領域を選択します。
- 3つのストーリーを目的の今後のスプリントにドラッグし、ストーリーを対応するスプリントタイムボックスに割り当てます。
このチュートリアルを終える頃には、Backlogボードは次のようになります:
実際には、このボードを使用して、多くのストーリーを今後のイテレーションに順序付けします。バックログが増大し、複数の機能にまたがる多数のストーリーがある場合、対応する機能エピックに関連するストーリーを表示できるようにGroup by epicを有効にすると便利です。ストーリーがグループ化されている場合、それらを今後のスプリントに順序付けるのが容易になります。
スプリントプランニングセレモニー
バックログの準備ができたら、今後のスプリントを計画する時です。GitLabでスプリントプランニングミーティングを容易にするために、同期および非同期の方法を使用できます。
同期的な計画
スプリントプランニングセレモニーの時間になったら、チームとともにBacklogボードを立ち上げ、各ストーリーに取り組みます。現在のスプリントの最終日に、次のスプリントの計画を開始する必要があります。各イシューを議論する際に:
受け入れ基準をレビューし、協力して作業します。チェックリストやリスト項目を使用することで、これをイシューの説明に記録できます。
各実装ステップについて、ストーリーをタスクにさらに分割します。
イシューのストーリーポイントの労力または複雑さを見積もり、この値をイシューのウェイトフィールドに設定します。
チームがイシューのスコープに満足し、ストーリーポイント値に同意したら、
status::readyラベルをイシューに適用します:- サイドバーのラベルセクションで、編集を選択します。
- ラベルを選択リストから、
status::readyラベルを選択します。 - ラベルセクション以外の領域を選択します。
今後のイテレーション内のすべてのイシューを完了したら、スプリントプランニングは終了です。
チームの開発速度をスプリントコミットメントに組み込むことを忘れないでください。各イテレーションリストの上部で、各スプリントに割り当てられたストーリーポイント(ウェイト)の合計数を見つけることができます。また、前のスプリントからロールオーバーする可能性のあるストーリーポイントを確認することも重要です。
非同期プランニング
同期ミーティングを開催する代わりに、イシューを使用してスプリントプランニングを実行します。
非同期スプリントプランニングの性質上、現在のスプリントの終了の数日前にこれを開始する必要があります。すべてのチームメンバーに、コントリビュートすると協力する適切な時間を提供します。
Backlogイシューボードを開きます:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 計画 > イシューボードを選択します。
- 左上隅で、現在のボード名を含むドロップダウンリストを選択します。
- Backlogを選択します。
今後のスプリントのリストで、イシューの新規作成 ( ) を選択します。
イシューのタイトルとして
Release Planningを入力します。イシューを作成を選択します。
イシューを開き、今後のスプリントに割り当てられた各ストーリーのディスカッションスレッドを作成します。
イシューURLに
+を追加すると、タイトルが自動的に展開されます。イシューURLに+sを追加すると、タイトル、マイルストーン、およびアサインされたユーザーが自動的に展開されます。これらのスレッドには、チェックボックスを作成するための以下のテンプレートを使用できます:## https://gitlab.example.com/my-group/application-b/-/issues/5+ - [ ] Acceptance criteria defined - [ ] Weight set - [ ] Implementation steps (tasks) created例:
すべてのストーリーにスレッドができたら、イシューの説明を編集し、各チームメンバーにメンションします。チームメンバーにメンションすると、それぞれのTo-DoリストにTo-Do項目が自動的に作成されます。
その後、非同期で、今後のスプリントが開始する前に、チームメンバーは次のことを行う必要があります:
- 各イシューを議論し、質問を投げかけ、協力して計画された各イシューの受け入れ基準を合わせます。
- ストーリーポイント(ウェイト)がどうあるべきかについて投票するために、
:one:、:two:、および:three:のようなリアクション絵文字を使用します。チームメンバーが異なるストーリーポイント値を設定した場合、コンセンサスが得られるまでさらに議論する絶好の機会です。また、さまざまなリアクションすべてを平均して、ストーリーポイントが何になるかを合わせることもできます。 - 垂直スライス(イシュー)を実装ステップ(タスク)に分解します。
各ストーリーのディスカッションが終了したら、受け入れ基準への変更でイシューを更新し、ウェイトフィールドにストーリーポイント値を設定します。
ストーリーが更新されたら、
status::readyラベルを各イシューに追加します。次に、その垂直スライスの計画が完了したことを示すために、計画イシュー内の各ディスカッションスレッドを解決します。
スプリントの進捗を追跡する
スプリント中の作業を視覚化および管理するために、チームは現在のスプリントのスコープを表す専用のイシューボードを作成できます。このボードは、チームの進捗状況と潜在的なブロッカーに対する透明性を提供します。チームは、バーンダウンチャートを通じて追加の可視性のためにイテレーション分析を使用することもできます。
現在のスプリントのボードを作成する
グループで、Current Sprintというタイトルの新しいイシューボードを作成します:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 左サイドバーで、Plan > イシューボードを選択します。
- 左上隅で、現在のボード名を含むドロップダウンリストを選択します。
- 新しいボードを作成を選択します。
- 新しいボードのタイトルとして
Current Sprintを入力します。 - スコープの横にある展開を選択します。
- イテレーションの横にある編集を選択します。
- あなたのイテレーションケイデンスの下にある現在を選択します。
- ボードを作成するを選択します。
ボードは、現在のイテレーションに割り当てられたイシューのみを表示するようにフィルタリングされます。それを使用して、アクティブなスプリントでのチームの進捗状況を視覚化します。
次に、すべてのステータスのラベルリストを作成します:
イシューボードページの右上隅で、Create listを選択します。
表示される列で、スコープの下にあるラベルを選択します。
値ドロップダウンリストから、いずれかのラベルを選択します:
status::refine: イシューは、開発される前にさらなる洗練が必要です。status::ready: イシューは開発の準備ができています。status::in progress: イシューは開発中です。status::review: イシューの対応するMRはコードレビュー中です。status::acceptance: イシューは、ステークホルダーの受け入れとQAテストの準備ができています。status::done: イシューの受け入れ基準が満たされました。
ボードに追加を選択します。
他のラベルについても前の手順を繰り返します。
次に、スプリントが進むにつれて、イシューを異なるリストにドラッグして、それらのstatus::ラベルを変更します。
スプリントのバーンダウンチャートとバーンアップチャートを表示する
スプリント中にイテレーションレポートをレビューすることは役立ちます。イテレーションレポートは、進捗状況のメトリクスとバーンダウンチャートおよびバーンアップチャートを提供します。
イテレーションレポートを表示するには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 左サイドバーで、Plan > イテレーションを選択し、イテレーションケイデンスを選択します。
- イテレーションを選択します。


