マイルストーンとイテレーション
「スプリント管理とリリース計画を同時に進めたいが、ツールが対応していない」「チームごとに異なるサイクルで動いているため、進捗の可視化が難しい」このような課題に直面していませんか。
GitLabは、マイルストーンとイテレーションという2つの時間管理機能を提供しています。これらを適切に組み合わせることで、短期的なスプリント実行と長期的なリリース計画を両立できます。本記事では、両機能の特性と実践的な活用パターンを解説します。
1. マイルストーンとイテレーションの基本特性
1.1. 機能比較
両機能の違いを表で整理します。
| 項目 | マイルストーン | イテレーション |
|---|---|---|
| 利用可能ティア | Free, Premium, Ultimate | Premium, Ultimate |
| スコープ | プロジェクトまたはグループ | グループのみ |
| 開始日 | 任意(未設定可) | 必須 |
| 終了日 | 任意(未設定可) | 必須 |
| 期間の重複 | 許可 | 同一ケイデンス内で不可 |
| 自動スケジューリング | なし | あり(1〜4週間間隔) |
| 自動ロールオーバー | なし | あり |
| 割り当て対象 | イシュー、エピック、マージリクエスト | イシュー、エピック、マージリクエスト |
| リリース機能統合 | あり | なし |
| API | Project/Group Milestones API | Iterations API |
1.2. 使い分けの指針
マイルストーンを使用する場合
- リリースバージョン管理(例:
v2.5.0、2025 Q1 Release) - 期間が不定または柔軟な目標管理
- プロジェクト単位での進捗管理
- リリースエビデンスの自動生成が必要な場合
イテレーションを使用する場合
- 固定期間のスプリント管理(1〜4週間)
- 自動的なスケジュール生成が必要な場合
- 未完了作業の自動ロールオーバーが必要な場合
- グループ全体で統一されたサイクル管理
2. マイルストーンの実践活用
2.1. スコープの選択: プロジェクトとグループ
プロジェクトマイルストーンは、単一プロジェクト内のイシューとマージリクエストのみを管理します。小規模なチームや独立したプロジェクトに適しています。
グループマイルストーンは、グループ内のすべてのプロジェクトのイシュー、エピック、マージリクエストを横断的に管理します。複数プロジェクトにまたがるリリースや、組織全体の目標管理に適しています。
プロジェクトマイルストーンは、後からグループマイルストーンに昇格できます。昇格時、同名のプロジェクトマイルストーンがすべて統合され、割り当てられていた作業項目も自動的に移行されます。この操作は不可逆的です。
2.2. リリース管理の実装
マイルストーンをリリース管理に活用する具体的な手順です。
設定例
-
マイルストーン作成
- タイトル:
Version 2.5.0 - 期限日:
2025-03-31 - 開始日:
2025-02-01(任意)
- タイトル:
-
イシュー割り当て
- 右サイドバーのマイルストーンから選択
- または
/milestone %"Version 2.5.0"クイックアクション使用 - または一括編集で複数イシューに一括割り当て
-
リリース作成時にマイルストーンを関連付け
- リリースエビデンスが自動生成される
- 監査証跡として保存される
2.3. 進捗トラッキング
マイルストーン詳細ページでは、作業の状態を複数の視点で確認できます。
ワークアイテムタブ(3列表示)
- 未着手(オープン + 未割り当て)
- 進行中(オープン + 割り当て済み)
- 完了(クローズ済み)
マージリクエストタブ(4列表示)
- 作業中(オープン + 未割り当て)
- マージ待ち(オープン + 割り当て済み)
- 却下(クローズ済み)
- マージ済み
サイドバー情報
- 完了率: クローズ済み数 ÷ 総数(パーセンテージ表示)
- 合計作業時間: すべての作業項目の時間トラッキング合計
- 合計ウェイト: すべてのイシューのウェイト合計
- マージリクエスト統計: 総数、オープン、クローズ、マージ済みの各カウント
- 関連リリース: リンク形式で表示
- 参照番号: クリップボードコピー可能
バーンダウン・バーンアップチャート
- バーンダウン: 残作業の推移を表示(完了進捗の追跡)
- バーンアップ: 追加・完了作業の日次推移を表示(スコープ変更の可視化)
2.4. 高度なフィルタリング
イシューボードやリストページで使用できる特別なフィルタです。
| フィルタ | 表示内容 | 用途 |
|---|---|---|
| None | マイルストーン未割り当て | バックログ管理 |
| Any | マイルストーン割り当て済み | 計画済み作業の確認 |
| Upcoming | 将来開始予定のオープンマイルストーン | 次期計画の確認 |
| Started | 現在日付と重複するオープンマイルストーン | 進行中作業の確認 |
Startedフィルタは、開始日と期限日の両方が設定されているマイルストーンのみが対象です。GitLab 18.0で動作ロジックが変更されています。
3. イテレーションの実践活用
3.1. イテレーションケイデンスの設計
イテレーションケイデンスは、イテレーションの自動生成と管理を行うコンテナです。
自動スケジューリングの設定項目
| 項目 | 説明 | 設定例 |
|---|---|---|
| 自動化開始日 | 最初のイテレーション開始日。以降のイテレーションは同じ曜日に開始 | 2025-01-06(月曜日) |
| 期間 | 各イテレーションの長さ | 2週間 |
| 今後のイテレーション数 | 常に維持する未来のイテレーション数 | 3 |
| ロールオーバー | 未完了イシューの自動移動 | 有効 |
設定例: 2週間スプリント
ケイデンス名: 開発チーム スプリント 2025
自動化開始日: 2025-01-06(月曜日)
期間: 2週間
今後のイテレーション数: 3
ロールオーバー: 有効
この設定により、以下のイテレーションが自動生成されます。
- スプリント1: 2025-01-06 〜 2025-01-19
- スプリント2: 2025-01-20 〜 2025-02-02
- スプリント3: 2025-02-03 〜 2025-02-16
- スプリント4: 2025-02-17 〜 2025-03-02
スプリント1が終了すると、スプリント5が自動生成され、常に3つの未来のイテレーションが維持されます。
3.2. 自動ロールオーバーの動作
ロールオーバー機能を有効にすると、イテレーション終了時に未完了のイシューが次のイテレーションに自動移動されます。
動作仕様
- 実行時刻: インスタンスタイムゾーンの深夜0時(デフォルトはUTC)
- 実行ユーザー: GitLab Automation Bot(
automation-bot1) - 対象: オープン状態のすべてのイシュー
- 記録: イシューのシステムノートに記録される
- 課金: Automation Botは課金対象外
3.3. スプリント計画のワークフロー
2週間スプリントを運用する場合の典型的なワークフローです。
スプリント開始前(計画フェーズ)
- バックログからイシューを選択
- 次のイテレーションに割り当て
- 右サイドバーから選択
- または
/iteration *iteration:"スプリント2"クイックアクション
- イシューにウェイトを設定(見積もり)
- 担当者を割り当て
スプリント実行中
- イテレーションレポートで進捗確認
- バーンダウンチャートで残作業を監視
- ラベルでグループ化して、チーム別・機能別の進捗を確認
スプリント終了時
- 完了イシューをクローズ
- 未完了イシューは自動的に次のスプリントにロールオーバー
- レトロスペクティブでベロシティを確認
3.4. イテレーションレポートの活用
イテレーションレポートは、スプリントの健全性を評価する重要な情報源です。
オープンイテレーションの表示項目
- 完了済み: X / Y(Xはクローズ済み、Yは総数)
- 未着手: X / Y(オープン + 未割り当て)
- 進行中: X / Y(オープン + 割り当て済み)
- バーンダウンチャート: 残作業の推移
- バーンアップチャート: 追加・完了作業の日次推移
クローズイテレーションの表示項目
- 期限日までに完了したイシュー総数
- 最終的なバーンダウン・バーンアップチャート
- ベロシティ計算の基礎データ
ラベルによるグループ化
イテレーションレポートでは、ラベルごとにイシューをグループ化できます。
使用例:
- チームラベル(
team::frontend、team::backend)でグループ化し、チーム別の進捗を確認 - 機能ラベル(
feature::auth、feature::api)でグループ化し、機能別のスコープを確認 - 優先度ラベル(
priority::high、priority::medium)でグループ化し、重要作業の状況を確認
3.5. サブグループ・プロジェクトスコープのレポート
グループレベルで作成したイテレーションを、サブグループやプロジェクトの視点で表示できます。
具体例
グループ構成:
開発グループ
├── プロジェクトA(イシュー2件)
└── プロジェクトB(イシュー3件)
同じイテレーション「スプリント1」に、プロジェクトAから2件、プロジェクトBから3件のイシューが割り当てられている場合:
グループレベルのレポート
- 総イシュー数: 5
- バーンダウンチャート: 5件の推移を表示
プロジェクトAのレポート
- 総イシュー数: 2
- バーンダウンチャート: 2件の推移を表示
プロジェクトBのレポート
- 総イシュー数: 3
- バーンダウンチャート: 3件の推移を表示
これにより、全体の進捗とプロジェクト別の進捗を同時に追跡できます。
3.6. 手動管理から自動スケジューリングへの移行
既存の手動イテレーションケイデンスを自動スケジューリングに切り替える場合、既存イテレーションとの整合性を保つ必要があります。
移行時の制約
- 自動化開始日は、既存のオープンイテレーションと重複できない
- 既存の未来のイテレーションは、新しいスケジュールに合わせて調整される
- 過去のクローズ済みイテレーションは変更されない
移行例
現在日: 2025-04-15(金曜日)
既存イテレーション:
- イテレーション1: 2025-04-04(月)〜 2025-04-08(金)【クローズ済み】
- イテレーション2: 2025-04-12(火)〜 2025-04-15(金)【進行中】
- イテレーション3: 2025-05-03(火)〜 2025-05-06(金)【未来】
自動化設定:
- 自動化開始日: 2025-04-18(月)
- 期間: 1週間
- 今後のイテレーション数: 2
移行後のイテレーション:
- イテレーション1: 2025-04-04(月)〜 2025-04-08(金)【クローズ済み】
- イテレーション2: 2025-04-12(火)〜 2025-04-15(金)【進行中】
- イテレーション3: 2025-04-18(月)〜 2025-04-24(日)【未来】← 調整された
- イテレーション4: 2025-04-25(月)〜 2025-05-01(日)【未来】← 新規生成
既存のイテレーション3は、新しいスケジュールに合わせて日付が調整されます。また、「今後のイテレーション数: 2」を満たすため、イテレーション4が自動生成されます。
4. 実践的な併用パターン
4.1. SAFe型: プログラムインクリメントとスプリント
大規模アジャイル開発(SAFe)を実践する組織向けのパターンです。
構成
- マイルストーン: 8〜12週間のプログラムインクリメント(PI)
- イテレーション: 2週間のスプリント
設定例
マイルストーン:
- タイトル:
PI 2025-Q1 - 開始日:
2025-01-06 - 期限日:
2025-03-28(12週間)
イテレーションケイデンス:
- 自動化開始日:
2025-01-06 - 期間: 2週間
- 今後のイテレーション数: 3
- ロールオーバー: 有効
運用フロー
メリット
- PIレベルの長期目標とスプリントレベルの短期実行を分離
- PIのバーンダウンで全体進捗、イテレーションレポートでスプリント進捗を確認
- エピックにマイルストーン、イシューにイテレーションを割り当てることで階層的な管理が可能
4.2. リリーストレイン型: 継続的リリースとスプリント
継続的デリバリーを実践する組織向けのパターンです。
構成
- マイルストーン: リリースバージョン(例:
v2.5.0、v2.6.0) - イテレーション: 2週間スプリント(継続的に実行)
設定例
マイルストーン1:
- タイトル:
v2.5.0 - 期限日:
2025-02-28
マイルストーン2:
- タイトル:
v2.6.0 - 期限日:
2025-03-31
イテレーションケイデンス:
- 自動化開始日:
2025-01-06 - 期間: 2週間
- 今後のイテレーション数: 4
- ロールオーバー: 有効
運用フロー
- スプリント1〜2で
v2.5.0向けの機能を開発 - スプリント3〜4で
v2.6.0向けの機能を開発 - 各イシューには、イテレーション(スプリント)とマイルストーン(リリース)の両方を割り当て
- スプリント終了時にイテレーションレポートで短期進捗を確認
- リリース前にマイルストーンレポートで全体完成度を確認
メリット
- スプリントとリリースのサイクルを独立して管理
- 複数のリリースにまたがる作業を並行実行可能
- リリース機能との統合により、リリースエビデンスを自動生成
4.3. マルチチーム型: チーム別スプリントと共通目標
複数チームが異なるペースで作業する組織向けのパターンです。
構成
- グループマイルストーン: 四半期目標や全社目標
- イテレーションケイデンス: チームごとに作成
設定例
グループマイルストーン:
- タイトル:
2025 Q1 OKR - 開始日:
2025-01-01 - 期限日:
2025-03-31
フロントエンドチームのイテレーションケイデンス:
- 期間: 1週間
- 今後のイテレーション数: 2
バックエンドチームのイテレーションケイデンス:
- 期間: 2週間
- 今後のイテレーション数: 3
運用フロー
- 全チーム共通の目標をグループマイルストーンに設定
- 各チームは独自のイテレーションケイデンスでスプリントを実行
- すべてのイシューに、チーム別イテレーションと共通マイルストーンを割り当て
- チームレベルではイテレーションレポートで進捗確認
- 組織レベルではマイルストーンレポートで全体進捗確認
メリット
- チームごとに最適なスプリント期間を設定可能
- 共通のマイルストーンで組織全体の目標を統一
- サブグループスコープのイテレーションレポートで、チーム別の詳細進捗を確認
4.4. カンバン型: マイルストーンのみ使用
スプリントを使用しないカンバン方式の組織向けのパターンです。
構成
- マイルストーン: リリースまたは四半期目標
- イテレーション: 使用しない
設定例
マイルストーン:
- タイトル:
2025 Q1 - 開始日:
2025-01-01 - 期限日:
2025-03-31
運用フロー
- バックログのイシューにマイルストーンを割り当て
- カンバンボードで作業を進める
- マイルストーンのバーンダウンチャートで進捗を監視
- 期限日に向けて継続的にデリバリー
メリット
- 固定期間のスプリントに縛られない柔軟な運用
- マイルストーンの開始日を設定しないことで、より柔軟な計画が可能
- シンプルな構成で管理コストを削減
5. 権限と操作
5.1. 必要な権限
GitLab 17.7以降、以下の操作にはPlannerロール以上が必要です。
| 操作 | 必要ロール | 対象 |
|---|---|---|
| マイルストーン作成 | Planner以上 | プロジェクトまたはグループ |
| マイルストーン編集 | Planner以上 | プロジェクトまたはグループ |
| マイルストーン削除 | Planner以上 | プロジェクトまたはグループ |
| マイルストーン昇格 | Planner以上 | グループ |
| イテレーションケイデンス作成 | Planner以上 | グループ |
| イテレーションケイデンス編集 | Planner以上 | グループ |
| イテレーションケイデンス削除 | Planner以上 | グループ |
| イテレーション作成(手動) | Planner以上 | グループ |
| イテレーション編集 | Planner以上 | グループ |
| イテレーション削除 | Planner以上 | グループ |
5.2. 基本操作
マイルストーンの作成
UIから:
- 計画 > マイルストーンを選択
- 新しいマイルストーンをクリック
- 必須項目を入力
- タイトル(必須)
- 説明(任意、Markdown対応、最大1,048,576文字)
- 開始日(任意)
- 期限日(任意)
- 新しいマイルストーンをクリック
APIから:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--data "title=v2.5.0&due_date=2025-03-31" \
"https://gitlab.com/api/v4/projects/278964/milestones"
イテレーションケイデンスの作成
UIから:
- 計画 > イテレーションを選択
- 新しいイテレーションケイデンスをクリック
- 基本情報を入力
- タイトル(必須)
- 説明(任意)
- 自動スケジューリングを設定
- 自動スケジューリングを有効化をチェック
- 自動化開始日を選択
- 期間を選択(1〜4週間)
- 今後のイテレーション数を入力
- ロールオーバーを有効化(任意)
- ケイデンスを作成をクリック
イシューへの割り当て
方法1: サイドバーから
- イシューを開く
- 右サイドバーのマイルストーンまたはイテレーションの編集をクリック
- リストから選択
方法2: クイックアクション
/milestone %"v2.5.0"
/iteration *iteration:"スプリント2"
方法3: 一括編集
- イシューリストでチェックボックスを選択
- 一括編集をクリック
- マイルストーンまたはイテレーションを選択
方法4: ボードでドラッグ&ドロップ
- マイルストーンリストにイシューをドラッグ
5.3. API活用
マイルストーンの取得
# プロジェクトマイルストーン一覧
curl --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.com/api/v4/projects/278964/milestones"
# グループマイルストーン一覧
curl --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.com/api/v4/groups/9970/milestones"
# 特定マイルストーンの詳細
curl --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.com/api/v4/projects/278964/milestones/5"
マイルストーンに割り当てられたイシューの取得
curl --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.com/api/v4/projects/278964/milestones/5/issues"
イテレーションの取得
# グループのイテレーション一覧
curl --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.com/api/v4/groups/9970/iterations"
6. トラブルシューティング
6.1. よくある問題と解決策
問題1: イシュートラッキングが無効なプロジェクトでマイルストーンが表示されない
解決策: URLに/-/milestonesを追加してアクセス
https://gitlab.com/gitlab-org/sample-project/-/milestones
または、グループのマイルストーンページから確認できます。
問題2: イテレーションケイデンスの自動化開始日が選択できない
原因: 既存のオープンイテレーションと重複している
解決策: 既存のオープンイテレーションの終了日より後の日付を選択
問題3: プロジェクトマイルストーンをグループマイルストーンに昇格できない
原因: グループのPlannerロールが必要
解決策: グループの権限を確認し、必要に応じて権限を付与
問題4: ロールオーバーが実行されない
確認項目:
- イテレーションケイデンスでロールオーバーが有効化されているか
- イテレーションが正常に終了しているか(期限日を過ぎているか)
- 次のイテレーションが存在するか
問題5: バーンダウンチャートが表示されない
原因: イシューにウェイトが設定されていない、または開始日が設定されていない
解決策:
- イシューにウェイトを設定
- マイルストーンまたはイテレーションに開始日を設定
7. まとめ
GitLabのマイルストーンとイテレーションは、それぞれ異なる目的に最適化された時間管理機能です。
マイルストーンは、柔軟な期間設定とリリース管理統合により、長期目標やリリース計画に適しています。Free tierから利用でき、プロジェクトレベルとグループレベルの両方で機能します。
イテレーションは、固定期間のタイムボックスと自動スケジューリングにより、スプリントのような反復的開発サイクルに最適です。Premium tier以上で利用でき、グループレベルで統一されたサイクル管理を実現します。
両機能を組み合わせることで、SAFeのようなスケールドアジャイルから、カンバンのような柔軟な手法まで、多様な開発プロセスに対応できます。組織の規模、開発手法、チーム構成に応じて、最適な組み合わせを選択してください。
選択の指針
- 小規模チーム、柔軟な計画: マイルストーンのみ
- スプリント開発、自動化重視: イテレーション + マイルストーン
- 大規模組織、階層的管理: グループマイルストーン + 複数イテレーションケイデンス
- 継続的デリバリー: リリースマイルストーン + スプリントイテレーション
実際の運用では、小さく始めて段階的に拡張することを推奨します。まずマイルストーンで基本的な進捗管理を開始し、必要に応じてイテレーションを導入することで、チームへの負担を最小限に抑えながら、効果的なプロジェクト管理を実現できます。