-
Notifications
You must be signed in to change notification settings - Fork 6
MakingRuleSet
Kozu edited this page Jun 14, 2019
·
41 revisions
VitDeckでは検証したいルールとその設定をルールセットと呼ばれる単位で管理します。ツールの管理者は独自のルールセットを作成したうえで作業者に配布することになります。ルールセットは複数作成でき、チェック時に選んで実行することができます。
独自のルールセットをBaseRuleSetクラスを継承して作成し、Assets/VitDeck/Validator/Rules
内に配置してください。
[サンプル]
namespace VitDeck.Validator
{
/// <summary>
/// サンプルルールセット
/// </summary>
public class SampleRuleSet : BaseRuleSet
{
/// <summary>
/// GUIに表示されるルール名
/// </summary>
public override string RuleSetName
{
get { return "サンプルルールセット"; }
}
/// <summary>
/// 検証対象検索オブジェクトを返す。
/// `ValidationTargetFinder`によるデフォルトの検索対象でよい場合はオーバーライド不要
/// </summary>
public override IValidationTargetFinder TargetFinder
{
get
{
return new SpecialValidationTargetFinder();
}
}
/// <summary>
/// 検証ルール
/// [Validation]をつけIRuleフィールドを追加する。
/// orderを指定した場合は値が小さいほど先に実行される。(デフォルトは0)
/// </summary>
[Validation(order = -1)]
public IRule rule1 = new SampleRule("ルール1");
[Validation]
public IRule rule2 = new SampleRule("ルール2", "カスタム設定値2");
[Validation]
public IRule unityVersionRule = new UnityVersionRule("Unityバージョンルール", "2017.4.15f1");
}
}
作成したクラス内で以下を定義してください。
- ルールセットの名前を返す
RuleSetName
- 検証開始時に検証対象の検索を行う
TargetFinder
(省略可) - 各ルールを表す
IRule
フィールド- フィールドに検証ルールであることを表す
[Validation]
を付与して下さい。 - デフォルトではルールの実行順序は不定です。
- 事前チェックなどで順序を指定したい場合Validation属性の
order
値を指定することができます。デフォルトは0で値が小さいほど先に実行されます。
- フィールドに検証ルールであることを表す
以下のルールが汎用ルールとして定義されています。必要なルールをルールセットに追加してください。 (随時追記)
ID | クラス名 | ルール |
---|---|---|
U01 | UnityVersionRule | 指定のUnityバージョンで動作しているか検証 |
独自のルールを追加する場合はBaseRuleクラスを継承したクラスを作成し、Assets/VitDeck/Validator/Rules
内に配置してください。
[サンプル]
namespace VitDeck.Validator
{
/// <summary>
/// サンプルルール
/// </summary>
public class SampleRule : BaseRule
{
private string customSetting;
public SampleRule(string name, string custom = "デフォルト設定値") : base(name)
{
this.customSetting = custom;
}
protected override void Logic(ValidationTarget target)
{
//前提チェック
if (string.IsNullOrEmpty(target.GetBaseFolderPath()))
throw new FatalValidationErrorException("ベースフォルダが指定されていません。");
//チェック結果を設定
var baseFolder = AssetDatabase.LoadAssetAtPath<DefaultAsset>(target.GetBaseFolderPath());
AddIssue(new Issue(baseFolder, IssueLevel.Info, "これはtargetを設定したサンプルルールの検証結果です。target:" + baseFolder.name));
AddIssue(new Issue(null, IssueLevel.Info, "これはサンプルルールの解決策付き検証結果(情報)です。", "解決策テキスト", "https://github.com/vkettools/VitDeck/issues/57"));
}
}
}
作成したクラスにprotected override void Logic(ValidationTarget target)
を定義して検証ロジックを実装してください。
引数のValidationTarget
には検証対象の情報が格納されています。取得用の以下のメソッドがあります。
メソッド名 | 取得対象 |
---|---|
GetBaseFolderPath() | ベースフォルダパスを取得する |
GetAllAssetGuids() | 検証対象の全てのアセットのGUIDを取得する |
GetAllAssetPaths() | 検証対象の全てのアセットのパスを取得する |
GetAllAssets() | 検証対象の全てのアセットのオブジェクトを取得する |
GetScenes() | 検証対象のシーンファイルを取得する |
GetRootObjects() | 検証対象の全てのルートオブジェクトを取得する |
GetAllObjects() | ルートオブジェクト以下の全てのGameObjectを取得する |
BaseRule内で定義された以下のメソッドを使用できます。
-
void AddIssue(Issue issue)
- 発見された問題を結果に追加します。
- Issueオブジェクトは対象オブジェクト、メッセージレベル、メッセージ本文、[解決策メッセージ]、[ヘルプページへのリンク]を設定して生成します。
- Issueのメッセージレベルは
Error
,Warning
,info
から設定してください。
-
void AddResultLog(string logText)
- 検証中の問題に紐づかないログを結果に追加します。
FatalValidationErrorException
をthrowすることで検証を中断することができます。事前条件のチェックなどで使用できます。
引き続きほかのルールの検証を継続させたい場合はreturn
を使用し、例外は使用しないでください。
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。