Skip to content

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を使用し、例外は使用しないでください。

Clone this wiki locally