メインコンテンツまでスキップ

ルール実行優先度


KurocoEdgeのルール実行優先度は、降順にソートされています。ルールの実行優先度は、番号の大きいものから小さいものへと並びます。

ルールの実行優先度は、ルール編集画面で設定することができます。 Image from Gyazo

ルールアクションの相互作用

同じ要素を修正するルールアクションが複数ある場合、最後に実行されたルールアクションの修正が、それ以前に実行されたルールアクションよりも優先されます。最後に実行されたルールは、ルールアクションの変更優先度が最も高くなるため、ルール実行優先度が低いと、ルールアクション優先度も高くなります。

ほとんどのルールアクションでは、先に実行されたルールアクションによる変更が、後に実行されるルールアクションによって考慮される。

備考

HTTPヘッダーに影響を与えるルールアクションは、次々に実行されます。しかし、HTTPボディを変更するアクション(HTML編集やテキスト置換など - 下記参照)は連鎖的に実行されません。ボディを変更するすべてのルールから必要な変更が事前に計算され、ストリームされたボディに1回適用されます。

例外

上記のルールアクションの相互作用には例外があり、各アクションタイプについてより詳しく説明します。

HTML編集

HTML編集アクションは互いに影響し合わないため、先に実行されたHTML編集アクションによる変更は、後から実行されるHTML編集アクションには考慮されない。

次のようなシナリオを考えてみましょう:

  • ウェブページに次のような文章が表示されている:「これは犬です。」
  • 実行優先度10のルールAは、「これ」を「あれ」に置き換えるHTML編集アクション。
  • 実行優先度5のルールB、「犬」を「猫」に置き換える「HTML編集」アクション。
  • 実行優先度1のルールCは、「あれ」を「あちら」に置き換えるHTML編集アクション。
  • 実行優先度0のルールDは、「犬」を「牛」に置き換えるHTML編集アクションを。

最終的な結果は「あれは牛」となります。

実行優先順位の観点から、上記のルールは以下の順序で実行される A → B → C → D。

  • ルールAは、「これ」 を 「あれ」に変更する。
  • ルールBは、「犬」を「猫」に変更する。
  • ルールCは、元の文に「あれ」という単語がないため、何も修正しない
  • ルールDは、「犬」を「牛」に変更します、

HTML編集アクションは互いに影響しあわず、ルールCとルールDの両方が 「これは犬です。」という元の文にそのルールを適用し、ルールAやルールBによる変更は考慮されない。

実行優先度が最も低いイベント(最後に実行される)は、実質的に最も高い変更優先度を持つことになり、最後に実行されるため、その変更は、同じソースに変更を加える他のすべての先行アクションを上書きする。

備考

HTML編集は、指定されたDOM要素がストリームされたボディの中で遭遇したときに起こるであろうイベントを登録することによって動作します。 同じ要素に複数のイベントがアタッチされ、同じデータ(例えば要素の同じ属性)を変更する場合、すべてのイベントは元のソースを入力とするため、以前のイベントの結果が次のイベントの入力になることはありません。

テキスト置換

HTML編集と同様に、複数のテキスト置換アクションは互いに影響し合うことはない。しかし、複数のテキスト置換アクションが同じソースを指定し、結果が異なる場合、1つのテキスト置換アクションからの変更のみがランダムに適用されます。

次のようなシナリオを考えてみましょう:

  • ウェブページに「Values」という単語が表示されている。
  • 次のような設定のテキスト置換アクションが2つあります:
    • テキスト置換アクションAは、"「Va」を「B」に置換することを条件としています。期待される結果は 「Blues」です。
    • テキスト置換アクションBは、「Val」を「H」に置き換えるという条件で実行します。期待される結果は「Hues」である。

実行の優先順位に関係なく、上記のテキスト置換アクションのうち1つだけからの変更が適用されます。 結果はランダムで、「Blues」または「Hues」になる可能性があります。

注記

実際には、同じソースを変更する複数のテキスト置換アクションは、それぞれのテキスト置換アクションに条件を指定し、指定した条件が満たされた場合にテキスト置換アクションのうち1つだけが実行されるようにします。

同じソースを変更する複数のテキスト置換が実行されるようにルールが設定されている場合、ルール実行優先度が高いルールからの変更が優先されることがありますが、この動作を保証するものではありません。これは、上記のシナリオで説明したように、ソースが部分的に重なっている場合に特に当てはまり、ルールの優先順位に関係なく、より簡単にテキスト置換ができるルールが適用されることに気づくかもしれません。

「より簡単なテキスト置換」とは、以下のようなものを指します:

  • 「Values」を「Blues」に変更する(「Va」を「B」に置き換える)のは、「Hues」に変更する(「Val」を「H」に置き換える)よりも簡単である(「Va」を「B」に置き換えるには2文字しか置き換える必要がない)。
備考

KurocoEdgeは、ストリーム配信されるソース上のテキスト文字列を効率的に大量置換するために、Aho-Corasickアルゴリズムを使用しています。この結果、ストリームソースは一度だけ処理され、一回の置換の出力が次の置換の入力として供給されることはない。


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Discordコミュニティにご参加ください。