rules に何百行もの DOMAIN-SUFFIX を手書きしているなら、それはほぼ確実に非効率な方法です。ルールセット(rule-providers)はこうした定番のカテゴリを独立したファイルにまとめ、一元管理・定期更新できるようにし、メインの設定ファイルをすっきり保てます。

rule-providersとは

簡単に言えば、別の場所(ローカルファイルまたは遠隔のURL)にあるルール一覧を、Clashが定期的に取得して読み込む仕組みです。rules の中で RULE-SET を1行書くだけで参照でき、何百行ものルールをメイン設定に詰め込む必要がありません。

rule-providers: reject: type: http behavior: domain url: "https://example.com/rules/reject.txt" path: ./rules/reject.yaml interval: 86400 rules: - RULE-SET,reject,REJECT - MATCH,PROXY

behaviorフィールド:3種類のルールセット形式

behavior内容の形式主な用途
domainドメイン/ドメインサフィックスの一覧広告ブロック、動画配信の振り分け、SNSドメイン集
ipcidrIPレンジの一覧ローカルIPレンジ、特定データセンターIPの直接接続
classical完全なルール構文(タイププレフィックス付き)複数タイプの混在、マッチ方法を細かく制御したい場合
behavior はルールセットファイルの実際の内容形式と一致させる必要があります。間違えるとルールセットの読み込みに失敗したり、マッチが異常になったりするので、必ずルールセットの提供元が示す説明に従って設定してください。

type:httpかfileか

  • http:リモートURLから定期的に取得します。コミュニティが継続的に更新しているルールセットに追従するのに向いています。
  • file:ローカルファイルのみを読み込み、自動更新はされません。自分で管理する私有ルールに向いています。

よく使われるルールセットの入手先

コミュニティには長期的に維持されているオープンソースのルールセットプロジェクトが数多くあり、広告ブロック、直接接続、動画配信の振り分け、SNSの振り分けといったカテゴリをカバーしています。必要に応じていくつか選んで組み合わせれば、ゼロから書く必要はありません。

一度に多くのルールセットを取り込む必要はありません。ルールセットの数が増えるほど、内核の起動やルールマッチのオーバーヘッドもわずかに増えるため、実際に必要なものだけを選びましょう。

よく使うルールセットカテゴリの組み合わせ方

どのルールセットを取り込むべきか分からない場合は、「優先度の高い順」で組み立てるとよいでしょう。まず広告・トラッキングブロックを処理し(不要な接続を避ける)、次に直接接続が必須のローカル/内部アドレス、続いて特別な振り分けが必要な動画配信やSNS、最後にローカルIPレンジの直接接続ルールで締める——残りのマッチしなかった通信はデフォルトでプロキシに流れます。この順序の背景にある考え方は、影響範囲が狭く判断基準が明確なルールを前に、あいまいな受け皿ルールを最後に置くことで、範囲の広いルールが本来精確にマッチすべき通信を先取りしてしまうのを防ぐというものです。

自分だけの私有ルールセットを維持する

社内サービスや自分だけが使うマイナーなサイトは、コミュニティのルールセットではほぼカバーされません。こうした場面には type: file が向いています。リモートのルールセットと同じ形式でローカルに管理ファイルを作りますが、ネットワークから自動更新されず、自分で手動編集する必要があります。

rule-providers: private: type: file behavior: domain path: ./rules/private.yaml

会社のVPNや社内管理画面などのドメインをこの私有ルールセットに入れておけば、メイン設定をきれいに保ちつつ、パブリックなルールセットの更新に上書きされる心配もありません。

自動更新の設定方法

interval フィールドは更新頻度を制御し、単位は秒です。広告ブロックや動画配信の振り分けのように更新が頻繁なルールセットには短い間隔(1日程度)、比較的安定しているルールセットには長い間隔(1週間程度)を設定するのが一般的です。

rule-providers: streaming: type: http behavior: classical url: "https://example.com/rules/streaming.yaml" path: ./rules/streaming.yaml interval: 43200 # 12時間ごとに更新

ルールセットもマッチ順序に注意

通常のルールと同様に、RULE-SET の参照も「上から下へ、最初にマッチしたら停止」の原則に従います。範囲の広いルールセットを前に置くと、後ろにあるより精確なルールが永遠にマッチしなくなる可能性があるので、トラブル時はまずルールの順序を確認してください。

ルールセットが読み込みに失敗したときの調べ方

ルールセットの設定ミスには典型的な症状がいくつかあります:内核起動時のエラー、パネルやログでの「ルールセットのダウンロード失敗」表示、あるいはルールが読み込まれたように見えても全く効いていない、などです。次の順番で確認していきましょう。

  1. URLにアクセスできるか確認するurl フィールドのアドレスをブラウザで直接開き、404にならず、追加の認証も求められずにテキストがダウンロードできるか確認します。
  2. behaviorがファイル形式と一致しているか確認する:ローカルにダウンロードされたルールファイルの内容形式を開いて確認し、設定した behavior(domain/ipcidr/classical)と一致しているか確認します。
  3. pathが指すディレクトリに書き込み権限があるか確認する:内核はリモートの内容を path で指定したローカルパスにキャッシュするため、ディレクトリに書き込み権限がないと更新に失敗します。
  4. ルール参照名の表記が一致しているか確認するrule-providers で定義した名前は、rulesRULE-SET,名前,... と完全に一致している必要があります。大文字小文字やスペルの違いがあると、そのルールは黙って無視されます。

ルールセットのキャッシュは手動で削除すべきか

通常は不要です。内核は interval に基づいてキャッシュの期限切れを自動判定し、再取得します。ただし、ローカルにキャッシュされたルールファイルが壊れている疑いがある場合(前回のダウンロードが中断されたなど)や、提供元が内容形式を変更して解析エラーが発生した場合は、path が指すローカルファイルを手動で削除すれば、内核の再起動時に完全に再ダウンロードされ、キャッシュを強制的に更新できます。

ルールセットは起動を遅くするか

ルールセットを取り込むと、内核は起動時(またはキャッシュ期限切れの更新時)に追加の時間をかけてこれらのファイルをダウンロード・解析します。ルールセットの数が多いほど、あるいは個々のファイルが大きいほど、起動時間もそれに応じて増えます。一般的な家庭用途ではほとんど気にならない程度ですが、リソースの限られたデバイス(低性能ルーターなど)で内核を動かしながら大量のルールセットを取り込む場合は、interval を適宜長くして、不要な頻繁な再ダウンロードを減らし、本当に必要な範囲に更新頻度を抑えることを検討してください。

まとめ

手書きルールと比べたルールセットの最大の価値は「分離」と「自動更新」です。メイン設定にはわずかなカスタムルールとポリシーグループ構成だけを残し、面倒なドメイン/IPの分類作業は外部のルールセットに任せることで、繰り返し作業を大幅に減らし、長期的なメンテナンスも容易になります。