ステートマシンルール
state-machine ルールは、カスタムフィールドのある値から別の値への遷移を規制します。
ステートマシンルールは、列挙された任意のカスタムフィールドに適用できます。ただし、ステートマシンルールの最も一般的な使用例は、状態フィールドまたは state タイプを格納する別のカスタムフィールドの値間の遷移を調整することです。
ステートマシンルールがプロジェクトに適用されると、フィールドのドロップダウンリストに表示されるオプションは、現在の状態のステートマシンルールで定義されている遷移に制限されます。ステートマシンルールの各値に対して定義されているアクションが、ドロップダウンリストに表示されます。実際の値がアクションに割り当てられた名前と異なる場合は、アクションの右側に括弧で囲んで表示されます。次の図は、状態フィールドの許可された遷移のリストが現在の値に基づいてどのように変化するかを示しています。

ワークフローコンストラクターでステートマシンルールを作成するときは、状態ブロックをキャンバスにドラッグし、それらの間で可能な遷移を定義します。状態間の未定義の遷移はすべて禁止されています。
ステートマシンルールのサンプル
これは、状態カスタムフィールドの値間の可能な遷移を定義するステートマシンルールです。

オープン状態が初期として設定されます。これは、すべての新しい課題がこの状態で作成されることを意味します。
このステートマシンルールが定義する遷移のリストは次のとおりです。
現在の状態 | 対象国 | トランジション名 |
|---|---|---|
オープン | 進行中 | in-progress |
再現できない | cannot-reproduce | |
再現できない | オープン | 開く |
進行中 | 固定 | 修理 |
固定 | オープン | 再開 |
検証済み | 確認 | |
検証済み | オープン | 再開 |
このルールがアクティブな場合、定義された遷移のみに従って、課題の状態カスタムフィールドの値を変更できます。ある状態値から別の状態値への特定の遷移がルールで定義されていない場合、この状態からターゲットの状態に直接課題を移動することはできません。未定義の状態遷移は、手動での課題の更新、コマンドの使用、自動化を含むすべてのレベルで禁止されています。
ステートマシンエディターでの作業方法とステートマシンルールの作成方法の詳細については、状態マシンを参照してください。
YouTrack は、2 種類のステートマシンルールのテンプレートを提供します。
カスタムフィールドのある値から別の値への遷移を規制する基本的な state-machine ルール。このタイプのステートマシンルールの詳細については、基本的なステートマシンルールを参照してください。
指定されたフィールドの現在の値に基づいて、状態遷移の個別のセットを課す state-machine ルール。このタイプのステートマシンルールをスクリプト化する方法については、課題タイプごとのステートマシンルールを参照してください。
これらのステートマシンルール型は両方とも、同様のパラメーターのコレクションを使用して構築されます。
基本的なステートマシンルール
基本的なステートマシンルールは、ワークフローを使用するプロジェクトのすべての課題について、カスタムフィールドのある値から別の値への遷移を規制します。遷移ごとに、1 つ以上のアクションを追加できます。各遷移の追加のプロパティは、これらのアクションがどのように適用されるかを決定します。
onEnterおよびonExitプロパティを使用する遷移は、フィールドの値が設定されたときにアクションを実行します。これらのアクションは、フィールドの値を変更したユーザーによって実行されます。afterプロパティを使用する遷移は、指定された時間枠の後にアクションを実行します。これらのアクションは、ワークフローのユーザーアカウントによって実行されます。
以下の例は、単純化されたステートマシン規則を示しています。この規則は、状態フィールドに許可される遷移を定義します。
この規則では、次の遷移が定義されています。
初期のオープン状態から、値は進行中に変更できます。
reminderという名前の追加の遷移には、課題が 2 日以上オープン状態のままである場合にプロジェクト所有者に通知するafterプロパティが含まれています。課題がオープンから進行中に移行すると、
In progress状態のonEnterプロパティは、状態フィールドの値を変更するユーザーに課題を自動的に割り当てます。実行中から、値は Fixed またはオープンに変更できます。課題が進行中からオープンに移行すると、この移行の自動化によってユーザーに課題の割り当てを解除するよう求められます。それ以外の場合、遷移はブロックされます。
最終的な状態は修正済みです。この値に対して定義されている追加の遷移はありません。一度設定した値は変更できません。
次のダイアグラムは、この規則の抽象表現を示しています。

このステートマシンをサポートするワークフロールールは、次のように記述されています。
このステートマシン規則を定義するコンポーネントは次のとおりです。
requireステートメントは、ワークフロー API のentitiesモジュールとworkflowモジュールを参照します。exports.TWO_DAYSプロパティは、オープンステータスの課題のリマインダーを送信するために使用されるローカル変数を設定します。この変数には、ミリ秒単位で 2 日に等しい値が割り当てられます。exports.ruleプロパティは、Issue.stateMachineメソッドを使用して、宣言に続くスクリプトをステートマシン規則としてエクスポートします。ルール本体には、次のプロパティの定義が含まれています。
プロパティ
説明
タイトル
人間が読めるオプションのタイトル。
フィールド名
ステートマシンルールによって管理されるカスタムフィールドの名前。
状態
フィールド値のリストとそれらの間の遷移の定義。スペースと特殊文字を含む値は一重引用符で囲みます。
要件
ルールがエラーなしで実行されるために必要なエンティティのリスト。このプロパティにより、ルールをプロジェクトに安全にアタッチできるようになります。
この例では、ルールが関連付けられているプロジェクトに
userタイプを格納する担当者フィールドがあることだけが必要です。このフィールドがないと、ワークフローリストにエラーが表示されます。必須フィールドがアタッチされるまで、ルールを有効にすることはできません。ステートマシンルールの場合、ステートマシンによって管理されるフィールドを要件に追加する必要はありません。このフィールドとその値は、
statesプロパティから取得されます。statesプロパティで定義されている各値には、次の追加プロパティの定義が含まれています。プロパティ
説明
初期
アーティファクトの作成時にリスト内のどの値を設定するかを決定するブール型プロパティ。厳密に 1 つの値でこのプロパティを
trueに設定する必要があります。初期値として設定されていない他の値の場合、このプロパティはオプションであり、省略することができます。onEnter
対応する値が issue に割り当てられたときに呼び出されるオプションの関数宣言。これらの機能は、他の種類のルールのアクションと同じように動作します。
onExit
フィールド値が現在の値から別の値に変更されたときに呼び出されるオプションの関数宣言。これらの機能は、他の種類のルールのアクションと同じように動作します。
遷移
リスト内の各値に設定できる可能なターゲット値のリスト。
この例では、ルールが関連付けられているプロジェクトに
userタイプを格納する担当者フィールドがあることだけが必要です。このフィールドがないと、ワークフローリストにエラーが表示されます。必須フィールドがアタッチされるまで、ルールを有効にすることはできません。ステートマシンルールの場合、要件でステートマシンによって管理されるフィールドによって使用される値をリストする必要はありません。このフィールドとその値は、
statesプロパティから取得されます。transitionsプロパティで定義されている各値には、nameプロパティが含まれています。この名前は、コマンドでこの値を設定するために使用され、カスタムフィールドの値のリストにも表示されます。各トランジション名には、次の追加プロパティの定義が含まれています。プロパティ
説明
targetState
nameプロパティで指定されたコマンドが適用されたときに設定される値の実際の名前。後
アクションを実行する間隔を設定するオプションのプロパティ。アクション自体は
actionプロパティで指定されています。アクション
他のタイプのルールのアクションに似た動作をする任意の遷移のオプションのプロパティ。
ガード
遷移が許可されるタイミングを決定するオプションの条件。ガード条件が満たされていない場合、カスタムフィールドの値は、この遷移に対して定義されている値に変更できません。
この例では、課題を実行中からオープン状態に戻すには、課題の割り当てを解除する必要があります。ガードには、
workflowモジュールのmessageメソッドを使用して、最初に割り当てを解除せずに課題を再開しようとするユーザーにフィードバックを提供する機能が含まれています。
JavaScript でのワークフローの作成の詳細については、開発者ポータルのドキュメントを参照してください。
課題タイプごとのステートマシンルール
課題タイプごとのステートマシンルールにより、基本的なステートマシンに追加の次元が追加されます。このルールは、カスタムフィールド内の値の単一セットの遷移を規制するのではなく、個別のフィールド内の可能な値ごとに個別のステートマシンを提供します。
デフォルトの状態フィールドだけでなく、任意のカスタムフィールドにステートマシンルールを適用できるのと同じように、デフォルトのタイプフィールドだけでなく、列挙型フィールドの値によって型固有の遷移を依存させることができます。最も一般的な使用例は、発行タイプの現在の値に基づいて状態フィールドの値間の遷移を調整することです。
発行タイプごとのステートマシンルールは、基本的なステートマシンルールと同様に記述されますが、次の変更があります。
新しいステートマシン規則のテンプレートでは、
fieldNameプロパティはエイリアスstateFieldNameに置き換えられます。このプロパティの値は、どのフィールドがステートマシンルールによって管理されるかを決定します。typeFieldNameの個別のプロパティを使用すると、どのステートマシンルールを状態フィールドに適用するかを指定するフィールドを指定できます。このプロパティの存在は、基本的なステートマシンルール(それを使用しない)と発行タイプごとのステートマシンルールの主な違いです。statesプロパティは、エイリアスdefaultMachineに置き換えられます。このプロパティは、管理対象フィールドの値のデフォルトの遷移セットを記述します。このステートマシンルールは、代替のステートマシンルールが定義されている値が割り当てられていない課題に適用されます。alternativeMachinesプロパティは、typeFieldNameプロパティに設定されているカスタムフィールドの指定値に対するステートマシン遷移のコレクションを格納します。
typeFieldName の値を指定し、defaultMachine を構成し、ルールの alternativeMachines セクションの値に少なくとも 1 つのステートマシンを定義すると、発行タイプごとにステートマシンルールが作成されます。typeFieldName プロパティに指定するフィールドは、デフォルトのステートマシンルールと代替のステートマシンルールのコレクション間のスイッチとして機能します。
次の例は、課題の種類ごとにステートマシンルールを作成する方法を示しています。以下の各タブは、タイプフィールドの可能な値の 1 つに対応するステートマシンルールを説明しています。

まず、上記の基本的なステートマシンルールで適用されるロジックを採用し、プロジェクト内のあらゆるタイプの課題にデフォルトとして適用します。その結果、タスクタイプが割り当てられた課題の状態フィールドの値は、上記のモデルに従って規制されます。このステートマシンルールは、代替のステートマシンルールが割り当てられていないタイプが割り当てられている課題にも適用されます。

次に、バグタイプが割り当てられている課題に対してのみ、代替のステートマシンルールを追加します。
このアーティファクトタイプでは、値再現できないを状態項目に割り当てることができます。
デフォルトのステートマシンルールよりも少し柔軟にし、Fixed からオープンに戻すことができるようにします。これは、同じ課題を複数回報告する代わりに、リグレッションが発生したときに課題を再開できることを意味します。
また、再現できないからオープンに戻すことも可能にします。
特定の状態や遷移に自動化を追加します。
課題がオープンから進行中に移動すると、課題は、課題の状態を変更したユーザーに割り当てられます。これは、基本ステートマシンの
In progress状態に使用されるonEnterプロパティの定義と同じです。進行中から再現できないへの移行のために、
actionを追加します。これにより、バグを再現するためにどのようなステップを踏んだかをユーザに説明するように求めるアラートが表示されます。修正済みから、課題はオープン状態にのみ戻ることができます。その結果、
onExitプロパティの自動化をFixedフィールドの定義に追加できます。この自動化により、課題が再開されたことを通知する通知が担当者に送信されます。

もう 1 つの代替ステートマシンを追加し、これを機能タイプが割り当てられている課題に適用します。
これらのタイプの課題については、課題をオープン状態から拒否に直接移動する可能性を追加します。チームが製品のビジョンに合わないと判断した機能を誰かが提案した場合、彼らはそれを捨てることができます。
方向転換の可能性を受け入れるために、課題を拒否からオープンに戻すことを許可します。
他のすべての遷移は、バグのステートマシンに似ています。
簡単にするために、このステートマシンには自動化を追加していません。これは、この課題タイプのプロセスを自動化または強化する機会がないことを意味するものではありません。可能な拡張機能は次のとおりです。
オープン状態の一連の遷移に対して
afterイベントを使用して、6 か月以上この状態のままである課題にタグを付けます。その後、次のバックロググルーミングセッションでタグ付けされたすべての課題を確認できます。onEnterイベントを進行中状態に追加して、ロードマップの特定のマイルストーンまたはパイプラインに機能を割り当てるようにユーザーに促します。拒否からオープンへの移行に
actionイベントを追加し、将来の検討のために機能要求を再開する理由を正当化するようにユーザーに促します。
基本的なステートマシンルールのサンプルコードを取得し、わずかな変更を加えるだけで、課題の種類ごとにステートマシンルールにすばやく変換できます。
必須ではありませんが、
fieldNameプロパティの名前をそのエイリアスstateFieldNameに置き換えました。基本的なステートマシンルールのサンプルと同様に、Stateと呼ばれるフィールドの値間の遷移を管理しています。このプロパティの値は変更しません。プロパティ
typeFieldNameを追加し、その値として'Type'を指定しました。これは、タイプフィールドをスイッチとして使用して、デフォルトのステートマシンを適用するか、このフィールドの可能な値の 1 つに割り当てられている代替のステートマシンを適用するかを決定できることを意味します。statesプロパティの名前をそのエイリアスdefaultMachineに置き換えて、化粧目的のためだけに別の変更を適用しました。このプロパティの値は変更しません。代わりに、基本的なステートマシンルールを再利用します。これは、ルールのalternativeMachinesセクションで定義されているタイプのいずれにも割り当てられていない課題に適用されます。alternativeMachinesの新しいセクションを追加しました。ここでは、タイプカスタムフィールドで値バグおよび機能が割り当てられている課題のステートマシンを指定します。
これが修正されたステートマシンのルールです。
このステートマシン規則を定義するコンポーネントは次のとおりです。
requireステートメントは、ワークフロー API のentitiesおよびworkflowモジュールを参照します。exports.TWO_DAYSプロパティは、オープンステータスの課題のリマインダーを送信するために使用されるローカル変数を設定します。この変数には、ミリ秒単位で 2 日に等しい値が割り当てられます。exports.ONE_WEEK_IN_MSプロパティは、1 週間以上進行中であったバグのリマインダを送信するために使用されるローカル変数を設定します。この変数には、ミリ秒単位で 1 週間に相当する値が割り当てられています。exports.ruleプロパティは、Issue.stateMachineメソッドを使用して、宣言に続くスクリプトをステートマシン規則としてエクスポートします。ルール本体には、次のプロパティの定義が含まれています。
プロパティ
説明
タイトル
人間が読めるオプションのタイトル。
stateFieldName
ステートマシンルールによって管理されるカスタムフィールドの名前。
typeFieldName
管理対象フィールドに適用されるステートマシンを規制するカスタムフィールドの名前。
defaultMachine
デフォルトのステートマシンのフィールド値とそれらの間の遷移の定義のリスト。デフォルトのステートマシンは、ルールの
alternativeMachinesセクションで定義されているタイプの 1 つが割り当てられていないすべての課題に適用されます。スペースと特殊文字を含む値は一重引用符で囲みます。
alternativeMachines
typeFieldNameプロパティに設定されているカスタムフィールドに、指定された値のステートマシン遷移のコレクションを格納します。要件
ルールがエラーなしで実行されるために必要なエンティティのリスト。このプロパティにより、ルールをプロジェクトに安全にアタッチできるようになります。
この例では、ルールが関連付けられているプロジェクトに
userタイプを格納する担当者フィールドがあることだけが必要です。このフィールドがないと、ワークフローリストにエラーが表示されます。必須フィールドがアタッチされるまで、ルールを有効にすることはできません。発行タイプ別のステートマシンルールの場合、ステートマシンによって管理されるフィールドを要件に追加する必要はありません。このフィールドとその値は、
defaultMachineプロパティと、ルールのalternativeMachinesセクションの値ごとに定義されているフィールドのコレクションから派生します。typeFieldNameプロパティに設定されたフィールドも、ワークフロールールの要件に暗黙的に追加されます。defaultMachineプロパティで定義された各値、およびルールのalternativeMachinesセクションで各値に対して定義された各フィールドには、次の追加プロパティの定義が含まれています。プロパティ
説明
初期
アーティファクトの作成時にリスト内のどの値を設定するかを決定するブール型プロパティ。厳密に 1 つの値でこのプロパティを
trueに設定する必要があります。初期値として設定されていない他の値の場合、このプロパティはオプションであり、省略することができます。onEnter
対応する値が issue に割り当てられたときに呼び出されるオプションの関数宣言。これらの機能は、他の種類のルールのアクションと同じように動作します。
onExit
フィールド値が現在の値から別の値に変更されたときに呼び出されるオプションの関数宣言。これらの機能は、他の種類のルールのアクションと同じように動作します。
遷移
リスト内の各値に設定できる可能なターゲット値のリスト。
この例では、ルールが関連付けられているプロジェクトに
userタイプを格納する担当者フィールドがあることだけが必要です。このフィールドがないと、ワークフローリストにエラーが表示されます。必須フィールドがアタッチされるまで、ルールを有効にすることはできません。ステートマシンルールの場合、要件でステートマシンによって管理されるフィールドによって使用される値をリストする必要はありません。このフィールドとその値は、
statesプロパティから取得されます。transitionsプロパティで定義されている各値には、nameプロパティが含まれています。この名前は、コマンドでこの値を設定するために使用され、カスタムフィールドの値のリストにも表示されます。各トランジション名には、次の追加プロパティの定義が含まれています。プロパティ
説明
targetState
nameプロパティで指定されたコマンドが適用されたときに設定される値の実際の名前。後
アクションを実行する間隔を設定するオプションのプロパティ。アクション自体は
actionプロパティで指定されています。アクション
他のタイプのルールのアクションに似た動作をする任意の遷移のオプションのプロパティ。
ガード
遷移が許可されるタイミングを決定するオプションの条件。ガード条件が満たされていない場合、カスタムフィールドの値は、この遷移に対して定義されている値に変更できません。
この例では、課題を実行中からオープン状態に戻すには、課題の割り当てを解除する必要があります。ガードには、
workflowモジュールのmessageメソッドを使用して、最初に割り当てを解除せずに課題を再開しようとするユーザーにフィードバックを提供する機能が含まれています。alternativeMachinesプロパティは、typeFieldNameプロパティで参照されるフィールドからの一連の値を格納します。専用のステートマシンに割り当てられた各値は、名前で参照されます。
JavaScript でのワークフローの作成の詳細については、開発者ポータルのドキュメントを参照してください。
関連ページ:
状態マシン
ワークフローコンストラクターは、ステートマシンルールの作成に使用できる一連のツールを備えた編集インターフェースをサポートしています。このインターフェースは、他のルールタイプを作成するためのインターフェースとは異なります。ステートマシンルールを作成するためのインターフェースは、カスタムフィールド値間の遷移を定義するための一連のツールを備えた無料のキャンバスとして提供されます。キャンバスにアクセスしてステートマシンルールを作成するには、ルールヘッダーでルールタイプをステートマシンに設定します。ステー...
JavaScript ワークフローリファレンス
YouTrack を使用すると、JavaScript でワークフローを作成できます。以前のバージョンの YouTrack のワークフローに使用されていたドメイン固有のプログラミング言語は非推奨になり、YouTrack 2020.5 では完全に削除されました。JavaScript は間違いなく今日世界で最も人気のあるプログラミング言語です。独自がそれに慣れていないのなら、あなたの組織には流暢な人がいる可能性があります。JavaScript に切り替えることで、YouTrack 用のワークフローをこ...
スケジュール規則
on-schedule ルールは、設定されたスケジュールに従って適用される一連の変更を定義します。例: 特定の属性値に関する課題を定期的にチェックし、ユーザーまたはグループに通知することができます。これらのルールは、以前のワークフローで使用されていたスケジュール済みルールを置き換えます。スケジュール通りのルールは、特別なワークフローユーザーによって実行されます。これは、すべての権限が付与されたシステムユーザーアカウントです。このアカウントの権限は変更できません。ワークフローユーザーアカウントはライ...
アクションルール
アクションルールを使用すると、コマンドとして適用したり、課題、記事、コメント、添付ファイルのその他を表示メニューから直接アクセスしたりできるアクションを使用して、YouTrack を拡張できます。アクションルールは、次の YouTrack エンティティで使用できます。課題、記事、課題に関するコメント、記事コメント、添付ファイルを発行する、記事の添付ファイル、アクションルールを作成すると、追加の設定を使用して、ルールをトリガーする方法を指定できます。アクションワークフロールールの実行に使用されるコ...