Status | Authors | Coach | DRIs | Owning Stage | Created |
---|---|---|---|---|---|
accepted |
@ntepluhina
|
@ayufan
|
@gweaver
| devops plan | 2022-09-28 |
作業項目
この文書は作業途中です。いくつかの側面は文書化されていませんが、将来的に追加されることを期待しています。
要約
ワークアイテムは、イシュー、要件、インシデントなど、製品全体で構築および計画されたさまざまなタイプのエンティティをサポートするために作成された新しいアーキテクチャです。同じ Core 機能を共有しながら、これらのタイプを簡単に拡張およびカスタマイズできるようにします。
用語
ワークアイテムアーキテクチャのコンポーネントとプロパティを説明するために、以下の用語を使用します。
ワークアイテム
イシュー、要件、テストケース、インシデント、タスクの基本タイプ(このリストは将来拡張される予定です)。異なるワークアイテムは、同じ基本プロパティのセットを持ちますが、ウィジェットのリストは異なります。
ワークアイテムのタイプ
ワークアイテムのさまざまなカテゴリのための事前定義されたタイプのセット。現在、利用可能なタイプは次のとおりです:
既存のオブジェクトをワークアイテムタイプに変換したり、新しいオブジェクトを追加する作業が進行中です:
ワークアイテムのプロパティ
すべてのWork Itemタイプには、以下の共通プロパティがあります:
注:詳しくはWork Itemのフィールドを参照してください。
-
id
- 一意のWork Itemグローバル識別子; -
iid
- 親ワークスペースに対するワークアイテムの内部 ID(現在、ワークスペースはプロジェクトのみ)。 - ワークアイテムのタイプ;
- ワークアイテムの変更時間に関連するプロパティ:
createdAt
updatedAt
,closedAt
; - タイトル文字列;
- ワークアイテムの機密保持状態;
- ワークアイテムの状態(オープンまたはクローズ);
- ワークアイテムが更新されるたびにインクリメントされます;
- リソースに対する現在のユーザーの権限。
- ワークアイテムウィジェットのリスト
作業項目ウィジェット
すべてのWork Itemタイプは、定義済みのウィジェットを共有し、特定のタイプでどのウィジェットがアクティブかによってカスタマイズされます。特定のWork Itemタイプのウィジェットリストは現在定義済みで、カスタマイズできません。しかし、将来的にはユーザーが新しいWork Itemタイプを作成し、そのタイプ用のウィジェットを定義できるようにする予定です。
ワークアイテムのウィジェットタイプ(更新中)
ウィジェット | 説明 | 機能フラグ |
---|---|---|
作業項目ウィジェット割り当て | 作業項目担当者のリスト | |
ワークアイテムウィジェットアワード絵文字 | upvote/downvoteカウントのサポートを含む、ワークアイテムに追加された絵文字リアクション | |
WorkItemWidgetCurrentUserTodos | ワークアイテムのユーザーTodo状態 | |
ワークアイテムウィジェット説明 | 編集状態、タイムスタンプ、作成者のサポートを含むワークアイテムの説明 | |
ワークアイテムウィジェット健康状態 | ワークアイテムの健康状態割り当てサポート | |
ワークアイテムウィジェット階層 | 子供の存在を表すブール値のサポートを含む、ワークアイテムの階層。注意:階層は現在OKRに対してのみ利用可能です。 | okrs_mvc |
WorkItemWidgetIteration | ワークアイテムの反復割り当てサポート | |
ワークアイテムウィジェットラベル | スコープされたラベルがサポートされているかどうかをチェックするためのサポートを含む、ワークアイテムに追加されたラベルのリスト | |
WorkItemWidgetLinkedItems | 指定されたワークアイテムに関連するものとして追加されたワークアイテムのリスト。可能な関係タイプは、relates_to 、blocks 、blocked_by 。 ブロックされたステータス、ブロックされている、ブロックされている、および関連するの個々のカウントのサポートを含みます。 | linked_work_items |
ワークアイテムウィジェットマイルストーン | ワークアイテムのマイルストーン割り当てサポート。 | |
ワークアイテムウィジェットメモ | ワークアイテム内のディスカッションのリスト | |
ワークアイテムウィジェット通知 | 現在のユーザーに対するワークアイテムの通知購読状況 | |
ワークアイテムウィジェット進行状況 | ワークアイテムの進捗値。注:Progressは現在OKRに対してのみ利用可能です。 | okrs_mvc |
ワークアイテムウィジェット開始日および期限日 | 作業項目の開始日と期限日を設定します。 | |
ワークアイテムウィジェットステータス | ステータスの種類はunverified 、satisfied 、またはfailed
| |
WorkItemWidgetTestReports | 作業項目に関連付けられたテスト レポート。 | |
ワークアイテムウィジェットウェイト | 作業項目の重さを設定 |
作業項目の関係
ワークアイテムは、さまざまな方法で他のワークアイテムと関連付けることができます:
- 親:親:現在のワークアイテムの直接の先祖で、その完了はこのワークアイテムの完了に依存します。
- 子:現在のワークアイテムの直接の子孫で、このワークアイテムの完了に貢献するもの。
- ブロックされたもの:現在の作業項目の完了を妨げている作業項目。
- ブロック:現在の作業項目によって完了が妨げられている作業項目。
- 関連:現在の作業項目の主題に関連するが、この作業項目の完了に直接貢献したり、妨げたりしない作業項目。
階層
親子関係は、ワークアイテムの階層の基礎を形成します。各ワークアイテムのタイプには、そのタイプの親または子になることができるタイプの定義されたセットがあります。
タイプが拡大し、親アイテムがそれ自身の親アイテムを持つようになると、階層機能は指数関数的に成長します。
Pajamasは、コンテキストに応じて階層を表示する方法を説明します。
ワークアイテムビュー
グローバルWork Itemid
を識別子として使用し、あらゆるタイプのWork Itemをレンダリングする新しいフロントエンドビューです。
タスク
タスクは特別なワークアイテムタイプです。タスクは子アイテムとしてイシューに追加でき、イシュービューのモーダルに表示できます。
フィーチャーフラグ
このプロジェクトは、多数の可動部がある大規模なプロジェクトであるため、利用可能なウィジェットの昇格を追跡するために機能フラグが使用されています。下の表は、使用されているさまざまな機能フラグと、それらが利用可能な対象者を示しています。
機能フラグ名 | 聴衆 |
---|---|
work_items | デフォルトはオン |
work_items_mvc |
gitlab-org ,gitlab-com
|
work_items_mvc_2 | gitlab-org/plan-stage |
動機
Work Itemsの主な目標は、プランニングツールセットを強化し、あらゆる業界のナレッジワーカーにとって最も人気のあるコラボレーションツールにすることです。
- すべての類似アイテム(イシュー、インシデント、エピック、テストケースなど)を標準プラットフォーム上に配置し、メンテナンスを簡素化し、エクスペリエンスの一貫性を高めます。
- 一般的なプランニングコンセプトをファーストクラスでサポートすることで、複雑さを軽減し、ユーザーがGitLab特有のニュアンスを学ぶことなくプランニングできるようにします。
目標
スケーラビリティ
現在、イシュー、エピック、マージリクエストなどの異なるエンティティは多くの類似した機能を共有していますが、これらの機能はエンティティの種類ごとに個別に実装されています。例えば、イシューとインシデントに新しい機能を追加する場合、イシューとインシデントタイプに別々に実装する必要があります。ワークアイテムの場合、新しい機能は既存のすべてのタイプに対してウィジェットを介して実装されるため、アーキテクチャがよりスケーラブルになります。
柔軟性
既存の実装では、イシュアブル、マージリクエスト、エピックなどのための厳格な構造を持っています。この構造はバックエンドとフロントエンドの両方で定義されているため、変更には調整作業が必要です。また、既存の機能を有効/無効にするフラグを導入することなく、この構造をユーザーのためにカスタマイズ可能にすることは非常に難しいでしょう。Work Itemアーキテクチャは、フロントエンドが柔軟な方法でWork Itemウィジェットを表示することを可能にします。これにより、変更を素早く行うことができ、構造がより柔軟になります。例えば、インシデントページにラベルを表示したくない場合、バックエンドでインシデントワークアイテムタイプからラベルウィジェットを削除します。また、将来的には、ユーザーがカスタムWork Itemタイプに表示したいウィジェットのセットを定義できるようになります。
一貫したエクスペリエンス
異なるエンティティの類似機能に対して一貫した動作を持つように努めていますが、実装にはまだ違いがあります。たとえば、GraphQL API を介したマージリクエストでのラベルの更新は専用のsetMergeRequestLabels
変異で行うことができますが、イシューではより粗粒度のupdateIssue
を呼び出します。これは、フロントエンドと外部 API ユーザーの両方に一貫性のないエクスペリエンスを提供します。その結果、エピック、イシュー、要件、その他はすべて、共通するインタラクションにおいて類似していますが微妙な違いがあるため、ユーザーはそれぞれの動作について複雑なメンタルモデルを保持する必要があります。
Work Itemアーキテクチャは、Work Itemウィジェットとして実装された、すべてのタイプのためのすべての機能を一貫したものにすることを念頭に設計されています。
解決すべき高レベルアーキテクチャの問題点
- グループやプロジェクトのマイグレーションを回避して、エピックをWork Itemタイプに移行する方法;
- 特定のWork Itemタイプ(エピック>イシュー>タスク)、および同じWork Itemタイプ(イシュー>イシュー)の親子関係への対応。
- カスタムWork Itemタイプとカスタムウィジェットの実装