ワークアイテム

このページには今後予定されている製品・機能・機能性に関する情報が含まれています。ここに示す情報は参考目的のみです。購入・計画の決定にこの情報を使用しないでください。製品・機能・機能性の開発、リリース、タイミングは変更または延期される可能性があり、GitLab Inc. の独自の判断に委ねられています。
StatusAuthorsCoachDRIsOwning StageCreated
accepted@ntepluhina@ayufan@gweaver~devops::plan2022-09-28

このドキュメントは作成中です。いくつかの側面はまだ文書化されていませんが、将来追加する予定です。

概要

ワークアイテムは、Issue、要件、インシデントなど、製品全体でさまざまな種類の構築済みおよび計画済みエンティティをサポートするために作成された新しいアーキテクチャです。同じコア機能を共有しながら、これらのタイプを拡張およびカスタマイズしやすくします。

用語

ワークアイテムアーキテクチャのコンポーネントとプロパティを説明するために以下の用語を使用します。

ワークアイテム

Issue、要件、テストケース、インシデント、タスクの基本タイプ(このリストは将来拡張される予定)。異なるワークアイテムは同じ基本プロパティのセットを持ちますが、ウィジェットのリストは異なります。

ワークアイテムタイプ

ワークアイテムのさまざまなカテゴリのための定義済みタイプのセット。データベースの work_item_types テーブル内で定義されます。

GitLab 製品内のワークアイテムタイプ

上記のデフォルトのワークアイテムタイプは本番データベースに存在しますが、各タイプをレガシー API からワークアイテム API に移行する過程にあるため、GitLab 製品の UI では使用されていない場合があります。レガシーアイテムが存在する場合、すべてのワークアイテムが保存されている issues テーブルにデータを移行し、すべての機能を包括する新しいウィジェットを構築する必要もあります。

ワークアイテムタイプUI の状態UI での利用可能性issues テーブルへのデータ移行が必要かドキュメント
タスク実装済み完全に利用可能いいえタスク
目標実装済みフィーチャーフラグの後ろで完全に利用可能いいえ目標
キーリザルト実装済みフィーチャーフラグの後ろで完全に利用可能いいえキーリザルト
インシデント計画中-いいえインシデント
テストケース計画中-いいえテストケース
要件計画中-いいえ要件
Issue開発中-いいえIssue
エピック開発中-はい、進行中エピック
チケット計画中-いいえチケット

ワークアイテムプロパティ

すべてのワークアイテムタイプには以下の共通プロパティがあります:

注意: 詳細については、ワークアイテムのフィールドも参照してください。

  • id - 一意のワークアイテムグローバル識別子
  • iid - 親ワークスペース(現在ワークスペースはプロジェクトのみ)に対するワークアイテムの内部 ID
  • ワークアイテムタイプ
  • ワークアイテムの変更時刻に関連するプロパティ: createdAtupdatedAtclosedAt
  • タイトル文字列
  • ワークアイテムの機密状態
  • ワークアイテムの状態(オープンまたはクローズ)
  • ロックバージョン(ワークアイテムが更新されるたびにインクリメント)
  • リソースに対する現在のユーザーの権限
  • ワークアイテムウィジェットのリスト

ワークアイテムウィジェット

すべてのワークアイテムタイプは同じ定義済みウィジェットのプールを共有し、特定のタイプでどのウィジェットがアクティブかによってカスタマイズされます。特定のワークアイテムタイプのウィジェットのリストは現在定義済みでカスタマイズできません。ただし、将来的にはユーザーが新しいワークアイテムタイプを作成し、そのウィジェットセットを定義できるようにする予定です。

新しいウィジェットの追加方法を含む、ワークアイテムウィジェットに関する別のページもあります。

ウィジェットタイプ(更新中)

ウィジェット説明フィーチャーフラグ書き込み権限GraphQL サブスクリプションサポート
WorkItemWidgetAssigneesワークアイテムの担当者リストエピックワークアイテムタイプの場合 work_items_beta、それ以外は FF なしGuestYes
WorkItemWidgetAwardEmojiワークアイテムへの絵文字リアクション(アップボート/ダウンボートカウントのサポートを含む)誰でも閲覧可能No
WorkItemWidgetColorワークアイテムの色を設定。注意: 色はエピックでのみ利用可能。ReporterNo
WorkItemWidgetCurrentUserTodosワークアイテムのユーザー Todo 状態誰でも閲覧可能No
WorkItemWidgetDescriptionワークアイテムの説明(編集状態、タイムスタンプ、作成者のサポートを含む)ReporterNo
WorkItemWidgetDesignsワークアイテムのデザイン添付ファイルReporterNo
WorkItemWidgetDevelopmentワークアイテムの関連ブランチとマージリクエストを表示ReporterNo
WorkItemWidgetHealthStatusワークアイテムのヘルスステータス割り当てサポートReporterNo
WorkItemWidgetHierarchy子の存在を表すブール値のサポートを含むワークアイテムの階層。GuestNo
WorkItemWidgetIterationワークアイテムのイテレーション割り当てサポートReporterNo
WorkItemWidgetLabelsワークアイテムに追加されたラベルのリスト(スコープ付きラベルがサポートされているかどうかのチェックを含む)ReporterYes
WorkItemWidgetLinkedItemsrelates_toblocksblocked_by の関係タイプで、特定のワークアイテムに関連付けられたワークアイテムのリスト。ブロック状態、ブロック対象、ブロック中、関連のカウントのサポートを含む。GuestNo
WorkItemWidgetMilestoneワークアイテムのマイルストーン割り当てサポートReporterNo
WorkItemWidgetNotesワークアイテム内のディスカッションのリストGuestYes
WorkItemWidgetNotifications現在のユーザーのワークアイテムの通知サブスクリプション状態誰でも閲覧可能No
WorkItemWidgetParticipantsワークアイテムの参加者誰でも閲覧可能No
WorkItemWidgetProgressワークアイテムの進捗値。注意: 進捗は現在 OKR のみで利用可能。okrs_mvcReporterNo
WorkItemWidgetRequirementLegacyレガシー要件No
WorkItemWidgetRolledupDatesエピックワークアイテムの開始日と期限を設定し、子ワークアイテムから開始日と期限をロールアップするReporterNo
WorkItemWidgetStartAndDueDateワークアイテムの開始日と期限を設定ReporterNo
WorkItemWidgetStatusタイプが要件の場合のワークアイテムのステータス(unverifiedsatisfiedfailed のステータスタイプが可能)No
WorkItemWidgetTestReportsワークアイテムに関連するテストレポート
WorkItemWidgetTimeTrackingワークアイテムに費やした合計時間を追跡ReporterNo
WorkItemWidgetWeightワークアイテムのウェイトを設定ReporterNo
WorkItemWidgetLockワークアイテムのロック/ロック解除ReporterNo

ウィジェットの可用性(更新中)

ウィジェットエピックIssueタスク目標キーリザルト
WorkItemWidgetAssignees✔️
WorkItemWidgetAwardEmoji✔️
WorkItemWidgetColor
WorkItemWidgetCurrentUserTodos
WorkItemWidgetDescription
WorkItemWidgetDesigns✔️
WorkItemWidgetDevelopment
WorkItemWidgetHealthStatus
WorkItemWidgetHierarchy
WorkItemWidgetIteration
WorkItemWidgetLabels
WorkItemWidgetLinkedItems
WorkItemWidgetMilestone
WorkItemWidgetNotes
WorkItemWidgetNotifications
WorkItemWidgetParticipants
WorkItemWidgetProgress
WorkItemWidgetRequirementLegacy
WorkItemWidgetRolledupDates
WorkItemWidgetStartAndDueDate
WorkItemWidgetStatus
WorkItemWidgetTestReports
WorkItemWidgetTimeTracking
WorkItemWidgetWeight
凡例
  • ✅ - ウィジェット利用可能
  • ✔️ - ウィジェット利用可能予定
  • ❌ - ウィジェット利用不可
  • ❓ - ウィジェット検討中
  • 🔍 - 代替ウィジェット計画中

ワークアイテムの関係

ワークアイテムはさまざまな方法で他のワークアイテムに関連付けることができます:

  • 親: 現在のワークアイテムに対する直接の先祖であり、その完了は現在のワークアイテムの完了に依存します。
  • 子: 現在のワークアイテムの直接の子孫であり、このワークアイテムの完了に貢献します。
  • ブロック対象: 現在のワークアイテムの完了を妨げるワークアイテム。
  • ブロック中: 現在のワークアイテムによって完了がブロックされるワークアイテム。
  • 関連: 現在のワークアイテムの主題に関連するワークアイテムですが、直接このワークアイテムの完了に貢献またはブロックするものではありません。

階層

親子関係はワークアイテムの階層の基盤を形成します。各ワークアイテムタイプには、そのタイプの親または子になれるタイプの定義済みセットがあります。

タイプが拡張し、親アイテムが自分自身の親アイテムを持つようになると、階層機能は指数関数的に成長できます。

現在、以下の親子関係が許可されています:

タイプ親になれる対象子になれる対象
エピックエピックエピック
Issueタスクエピック
タスクなしIssue
目標目標目標
キーリザルトなし目標

ワークアイテムビュー

グローバルワークアイテム id を識別子として使用して、あらゆるタイプのワークアイテムをレンダリングする新しいフロントエンドビュー。

タスク

タスクは特別なワークアイテムタイプです。タスクは Issue に子アイテムとして追加でき、Issue ビューのモーダルに表示できます。

フィーチャーフラグ

これは多数の可動部分を含む大きなプロジェクトであるため、利用可能なウィジェットのプロモーションを追跡するためにフィーチャーフラグが使用されています。以下の表は使用されているさまざまなフィーチャーフラグとそれらが利用可能なオーディエンスを示しています。

フィーチャーフラグ名オーディエンス
work_itemsデフォルトでオン
work_items_betagitlab-orggitlab-com
work_items_alphagitlab-org/plan-stage

コンテキストビューのフィーチャーフラグ

フィーチャーフラグ名制御エリア状態
work_items_alphaコンテキストビュー内の子アイテムgitlab-org/plan-stage で有効
epics_list_drawerエピックリスト、エピックボードgitlab-org/plan-stage で有効
issues_list_drawerIssue リスト、Issue ボード無効

Issue ワークアイテムビューのフィーチャーフラグ

フィーチャーフラグ名制御エリア状態
work_item_view_for_issuesIssue のワークアイテムビューを有効にするデフォルトでオン
work_items_view_preferenceヘッダーセクションで Issue ワークアイテムビューの有効/無効を切り替えるトグルを表示デフォルトでオン

エピックワークアイテム固有のフィーチャーフラグについては、エピックワークアイテム移行エピックを参照してください。

動機

ワークアイテムの主な目標は、あらゆる業界の知識労働者にとって最も人気の高いコラボレーションツールとなるための計画ツールセットを強化することです。

  • Issue、インシデント、エピック、テストケースなどの類似アイテムを標準プラットフォームに集約して、メンテナンスを簡素化し、エクスペリエンスの一貫性を高める
  • GitLab 固有のニュアンスを学ばずにユーザーが計画できるように、共通の計画概念のファーストクラスサポートを可能にして複雑さを軽減する

目標

スケーラビリティ

現在、Issue、エピック、マージリクエストなどのさまざまなエンティティは多くの類似機能を共有していますが、これらの機能はエンティティタイプごとに個別に実装されています。これにより、新機能の実装や既存機能のリファクタリングが困難になります。例えば、Issue とインシデントに新機能を追加する計画がある場合、Issue タイプとインシデントタイプで個別に実装する必要があります。ワークアイテムでは、新機能はすべての既存タイプのウィジェットとして実装されるため、アーキテクチャがよりスケーラブルになります。

柔軟性

既存の実装では、issuable、マージリクエスト、エピックなどに対して厳格な構造があります。この構造はバックエンドとフロントエンドの両方で定義されているため、変更には協調的な取り組みが必要です。また、フラグのセットを導入してあらゆる既存機能を有効/無効にすることなく、この構造をユーザーがカスタマイズ可能にすることも非常に困難です。ワークアイテムアーキテクチャにより、フロントエンドはワークアイテムウィジェットを柔軟にレンダリングできます: ワークアイテムウィジェットに存在するものはすべてページにレンダリングされます。これにより、変更を迅速に行え、構造がより柔軟になります。例えば、インシデントページでラベルの表示を停止したい場合、バックエンドのインシデントワークアイテムタイプからラベルウィジェットを削除します。また、将来的にはユーザーがカスタムワークアイテムタイプで表示するウィジェットのセットを定義できるようになります。

一貫したエクスペリエンス

異なるエンティティで類似機能の一貫した動作を実現しようとしても、実装に違いが生じています。例えば、GraphQL API を通じてマージリクエストのラベルを更新するには専用の setMergeRequestLabels ミューテーションを使用しますが、Issue の場合はより粗粒度な updateIssue を呼び出します。これにより、フロントエンドと外部 API ユーザーの両方に一貫性のないエクスペリエンスが生じます。結果として、エピック、Issue、要件など、すべてが類似しているが共通のインタラクションに微妙な違いがあり、ユーザーはそれぞれの動作の複雑なメンタルモデルを持つ必要があります。

ワークアイテムアーキテクチャは、すべてのタイプのすべての機能を一貫して、ワークアイテムウィジェットとして実装することを目的として設計されています。

解決すべき高レベルのアーキテクチャ問題

リンク