なぜ Rule Providers に分けるのか

Clash 系コアでは、トラフィックをどのプロキシ(または DIRECT)へ送るかを RULE セクションのルール列で決めます。初期の運用では、サブスクリプションが吐き出す config.yaml にルールがべた書きされていることが多いのですが、リストが長くなるほど次の負担が増えます。差分の追跡が難しい、同じドメイン集合を複数プロファイルで複製してしまう、上流リストの更新を手でマージし直す必要がある、といった課題です。

Rule Providers(設定上は rule-providers ブロック)は、ルール本体を「別リソース」として URL やローカルパスから読み込み、コア側でキャッシュと定期更新を担わせる仕組みです。プロキシのノード定義を取り込むプロキシ用サブスクリプションとは目的が異なり、こちらはルールセットの購読・同期に特化していると理解すると整理しやすくなります。結果として、ベースの設定ファイルは「どのルールセットをどの順で参照するか」という骨格だけを書けばよくなり、リストのライフサイクルを分離できます。

設定ファイルに書く基本形

典型的には、トップレベルに rule-providers を定義し、rules 側で RULE-SET,プロバイダ名,ポリシー のように参照します。名前は任意ですが、将来の自分が見て意味がわかる英数字にしておくとメンテナンスが楽です。

# Example only — adjust keys for your core version
rule-providers:
  cn-direct:
    type: http
    behavior: classical
    url: "https://example.com/rules/cn.yaml"
    path: ./ruleset/cn.yaml
    interval: 86400

rules:
  - RULE-SET,cn-direct,DIRECT
  - MATCH,PROXY

type: http はリモート取得を意味し、interval は秒単位の更新間隔です。初回起動時に取得できれば、以降はキャッシュされた path 先のファイルを優先しつつ、間隔に応じて再取得します。オフライン環境では type: file でローカルだけにすることもあります。

behavior(古典・ドメイン・IP)を誤らない

Rule Provider が解釈するリスト形式は、behavior によって期待される構造が変わります。classical は従来どおりのルール行(DOMAIN-SUFFIX 等)を束ねた YAML/テキスト想定で、可読性と柔軟性のバランスがよい一方、巨大化すると読み込みコストが増えます。domain はドメイン列挙向け、ipcidr は CIDR 列挙向けで、用途に特化した最適化が効きやすいです。

実務では、まず「そのリストは何を主に載せているか」を確認し、配布元の推奨 behavior に合わせるのが安全です。誤った指定はパースエラーや、静かに期待と異なるマッチ順になる原因になります。新しいリストを試すときは、本番プロファイルに直結させる前に、最小構成のプロファイルでログを確認する習慣があると安心です。

Mihomo では ruleset 記法や UI 上の「ルールセット」表現が増えていますが、根底は「外部からルール集合を供給し、メイン設定を薄く保つ」という思想でつながっています。クライアントによって編集画面の名称が異なるだけで、YAML 上のブロック名が rule-providers かどうかを一度確認すると混乱が減ります。

更新間隔・キャッシュ・帯域のバランス

interval を極端に短くすると、リスト配布元への負荷と自分の回線の無駄打ちが増えます。逆に長すぎると、緊急のリスト修正が手元に届くのが遅れます。公開コミュニティのリストであれば README に推奨間隔が書かれていることが多いので、それに従うのが礼儀かつ安全です。

キャッシュファイルはクライアントの作業ディレクトリ配下に置かれるのが一般的です。ディスク容量が厳しいルーターでは、購読するセットの数とファイルサイズの積がボトルネックになることがあります。使われなくなったプロバイダ定義は設定から外し、実ファイルもクリーンアップすると安定しやすくなります。

ルールの合成順と「最後の一行」

複数の Rule Provider を並べる場合、上から順に評価されるという基本は変わりません。たとえば広いカテゴリのリストを先に置き、会社や個人向けの細かい例外を後段に置く、といった並べ方が典型です。サブスクリプションが自動生成する RULE ブロックと手元の RULE-SET を混在させるときは、どちらが優先されるかを紙に書いてから並べ替えるとミスが減ります。

最終行の MATCH やフォールバック系ポリシーは、意図しない通信が黙って別経路に流れないよう、定期的に見直し対象に入れてください。テレメトリ系ドメインや更新 CDN の振る舞いは、ルールセットの更新タイミングと相関して「急に遅くなった」ように感じられることがあります。

ローカルだけの例外をきれいに載せる

社内ホスト名や検証用ドメインなど、リモートリストに載せたくない例外は、別の rule-providers エントリに type: file で持つか、rules セクションの手書き部分に短く書く方法があります。ファイル化しておけば Git で差分管理しやすく、チーム運用でも共有しやすいです。

「リモートを信頼しつつ、自分だけの追記を最小限に保つ」という二層構造にすると、上流の更新を取り込みやすくなります。逆に、巨大な手書きルールを末尾に延々と足していく方式は、いつか誰も触れない塊になりがちなので、Provider への切り出しを検討するタイミングの目安になります。

取得失敗・形式変更・パースエラーへの対処

ネットワークと TLS

一時的な DNS 不調や証明書検証の失敗で、更新だけが止まることがあります。ログに HTTP ステータスや TLS の文言が出ていれば、まずブラウザや curl で同じ URL に到達できるかを切り分けます。企業プロキシ下では、ルール取得用の URL がブロックされているケースもあります。

フォーマット変更

コミュニティリストは突然フォーマットが変わると、古いコアでは読めなくなることがあります。対策は、コアとクライアントを健全なリリースに追従することに加え、重要なリストはミラー URL をメモしておく、といった運用面の備えです。

キャッシュのリセット

不可解なマッチ結果が続くときは、該当 path のキャッシュを削除して再起動し、クリーン取得させると直ることがあります。GUI クライアントによっては「ルールキャッシュのクリア」ボタンが用意されているので、まずはそれを試すのも手です。

出所のわからないルールセットを無検証で取り込むと、意図しないドメインが DIRECT/PROXY に振り分けられるリスクがあります。可能なら公開リポジトリ・チェックサム・更新履歴が確認できるソースを選び、本番と検証用でプロファイルを分けて試してください。

プロキシ購読とルール購読を混同しない

用語上どちらも「サブスクリプション」と呼ばれることがありますが、Clash の設定では通常、プロキシ行を供給する URL と、ルール集合を供給する URL は別チャンネルです。ダッシュボードが一つのリンクで両方を返す場合でも、クライアント側でプロキシ用とルール用に分解されて格納されます。トラブル時に「ノードは見えるのに振り分けだけおかしい」というときは、ルール Provider の更新とマッチ順を疑うと早いです。

クライアントの一括インポート機能に頼りすぎると、裏でどの URL がルール用か把握しづらくなるので、年に一度でも設定ファイルをエクスポートして Provider 名と URL の対応表を作っておくと、数年後の自分が助かります。

GUI(Verge / FlClash 等)で触るときのコツ

多くのユーザーは 公式のクライアント入手ページから配布物を取得し、GUI でプロファイルを編集します。Rule Providers に相当する画面では、URL・更新間隔・保存先が対応づいているはずなので、RAW ファイルの URL を誤って渡していないか(HTML ページの URL になっていないか)を確認してください。

高度な話題(TUN や DNS とルールの境界など)は、当サイトのドキュメントとチュートリアルとあわせて読むと、設定全体のつながりが掴みやすくなります。ルールだけをいじっても解決しない問題は、しばしば DNS モードやスニッフィング設定に根があります。

Mihomo 利用者向け:ruleset 記法の位置づけ

新しめのコアでは、ルール集合を扱う文法が拡張され、ファイル形式や圧縮、別名キーが増えています。既存の rule-providers ベースの設定がそのまま動く場合もあれば、移行ガイドに沿って ruleset ブロックへ寄せた方が簡潔になる場合もあります。どちらにせよ、「外部リストを参照し、メイン設定を薄くする」という目的は同じです。利用中のクライアントが内蔵するテンプレートやサンプル YAML を一度通読すると、自前の設定との差分が明確になります。

運用チェックリスト(そのままメモに使えます)

  • 各 Provider の urlbehaviorinterval を表にし、責任者(自分)がわかるようにした
  • 本番と検証でプロファイルを分け、検証で問題がなければ本番へコピーするフローを決めた
  • ローカル例外は短い手書きか type: file に閉じ、リモートと混ぜない
  • ログローテーションと同様に、年に一度は不要な Provider を削除する
  • コアと GUI のバージョンをメモし、リリースノートでルール関連の破壊的変更を追う

上流ドキュメントとソースの見方

仕様の一次情報は、利用コアの公式ドキュメントおよび Mihomo(MetaCubeX)の GitHub リポジトリに集約されています。挙動の細部や新キーはリリースノートの方が早いことも多いです。インストールパッケージの主な入手経路は GUI の更新機能や当サイトのダウンロード導線とし、GitHub は仕様確認・Issue 追跡の参照先として使い分けると混乱が少ないです。

まとめ

Rule Providers は、ルールを「設定の本文から切り離し、更新可能なモジュールとして扱う」ための仕組みです。プロキシ用サブスクリプションでノードを同期しつつ、ルール集合も別 URL で同期する二段構えにすると、長期運用でのメンテナンスコストが下がります。behavior と並び順を正しく押さえ、キャッシュと更新間隔を配慮し、ローカル例外だけを手元で管理する——この四点がそろうと、購読ルールセットの運用はかなり楽になります。

同種ツールのなかでも、Clash エコシステムはルール表現の蓄積とクライアントの選択肢の豊富さが強みです。まずは一つのリストだけを Provider 化し、動作に問題がなければ徐々に移行する段階的アプローチが、設定事故を避けるうえでもっとも現実的でしょう。

Clash を無料ダウンロードし、Rule Providers に対応したクライアントでルール運用を整理してみる