YouTrack および Hub ヘルプの開発者ポータル

かんばん

このワークフローは、容量が利用可能になるとタスクが処理されるプルベースのシステムをサポートするように設計されており、チームの生産性と効率を最適化できます。これは、各列のタスクがブロック (または進行などの別の値) およびプルの準備完了 (または終了 ) としてマークされている物理的なかんばんボードをシミュレートすることを目的としています。

これは、単一のタスクをさまざまな専門家が一連の引き継ぎを通じて処理するチームを特に対象としています。例: 研究からデザイン、レビュー、承認、品質保証、出版まで作業が進むクリエイティブチーム。

このモデルを使用すると、ある列から次の列に移行するタスクには、ただちに Blocked のフラグが立てられます。これにより、本番パイプラインのさらに下流にいる人々は、タスクがプルの準備完了としてマークされるまでタスクをプルできなくなります。これらのステータスは、かんばん状態と呼ばれる専用フィールドに保存されます。

この例では、設計者は研究部門がプルの準備完了とマークしたタスクに自由に取り組むことができますが、レビュー担当者は設計者が作業を完了するまで同じタスクを取得することはできません。

名前

@jetbrains/youtrack-workflow-kanban

自動添付

いいえ

モジュール

プルする準備ができていない課題に対するかんばん段階での変更のブロック (変更時のルール)

ユースケース

このワークフローは、課題のかんばん状態を管理できます。

モジュール

報告された課題があるステージから次のステージに移動すると、このモジュールの変更時ルールはかんばん状態フィールドの値を確認します。かんばん状態プルの準備完了に設定されていない場合は、警告が表示されます。変更は元に戻されます。

かんばん状態プルの準備完了に設定されている場合、issue が次のステージに移動したときにかんばん状態は Blocked に設定されます。

プルする準備ができていない課題に対するかんばん段階での変更のブロック

const entities = require('@jetbrains/youtrack-scripting-api/entities'); const workflow = require('@jetbrains/youtrack-scripting-api/workflow'); exports.rule = entities.Issue.onChange({ title: 'Block change in Kanban stage for issues that are not ready to pull', guard: (ctx) => { const issue = ctx.issue; return issue.isReported && issue.fields.isChanged(ctx.Stage); }, action: (ctx) => { const issue = ctx.issue; workflow.check(issue.fields.is(ctx.KanbanState, ctx.KanbanState.ReadyToPull), 'The issue is not ready to be pulled'); issue.fields.KanbanState = ctx.KanbanState.Blocked; }, requirements: { Stage: { type: entities.State.fieldType }, KanbanState: { name: 'Kanban State', type: entities.EnumField.fieldType, ReadyToPull: { name: 'Ready to pull' }, Blocked: {} } } });

移動時に割り当てる

この変更時モジュールは、課題が移動されたとき、つまりステージフィールドが変更されたときに、現在のユーザーに課題を割り当てます。

const entities = require('@jetbrains/youtrack-scripting-api/entities'); exports.rule = entities.Issue.onChange({ title: 'Assign on move', guard: (ctx) => { const issue = ctx.issue; return issue.isReported && !issue.fields.Assignee && issue.fields.isChanged(ctx.Stage); }, action: (ctx) => { const issue = ctx.issue; if (issue.project.findFieldByName(ctx.Assignee.name).findValueByLogin(ctx.currentUser.login)) { issue.fields.Assignee = ctx.currentUser; } }, requirements: { Assignee: { type: entities.User.fieldType }, Stage: { type: entities.State.fieldType } } });
2026 年 9 月 10 日