Clashルールを手書きする最大の悩みはメンテナンスです。ルールリストが増えるにつれて設定ファイルが肥大化し、サービスのドメインリストを更新するたびに手動でYAMLを編集しなければなりません。Rule ProviderはClashのモジュール型ルール管理システムです。ルールリストを外部ファイルに分離し、Clashが自動的に取得・更新し、設定ファイルはそれらを参照するだけで済みます。この記事では完全な使い方とベストプラクティスを解説します。

ルールプロバイダーの構造

Rule Providerは2つの要素で構成されます:ルールセットファイル(ドメイン・IPリスト)と設定ファイル内の宣言です。ルールセットファイルは2つのフォーマットをサポートしています:

  • YAMLフォーマット:各ルールは独立した行に記述し、DOMAIN,example.comIP-CIDR,8.8.8.8/32のように明示的な型プレフィックスを持ちます。複雑な混合ルールセットに最適です。
  • テキストフォーマット:各行はドメインまたはIPのみ(型プレフィックスなし)。Clashはbehaviorフィールドから型を推論します。シンプルでコンパクトで、純粋なドメインリストやIPリストに最適です。
YAMLフォーマットルールセット(proxy-list.yaml)
payload:
  - DOMAIN,google.com
  - DOMAIN-SUFFIX,youtube.com
  - DOMAIN-SUFFIX,github.com
  - DOMAIN-KEYWORD,openai
  - IP-CIDR,8.8.8.8/32,no-resolve

設定ファイルでのルールプロバイダー宣言

rule-providersフィールドを使ってルールセットのソースを宣言します。http(リモートURL)とfile(ローカルパス)の両方がサポートされています。

rule-providers 宣言例
rule-providers:

  proxy-list:
    type: http
    behavior: classical   # ルール形式: classical / domain / ipcidr
    url: https://raw.githubusercontent.com/yourrepo/rules/proxy.yaml
    path: ./ruleset/proxy-list.yaml
    interval: 86400          # 自動更新間隔(秒): 24時間

  direct-list:
    type: http
    behavior: domain
    url: https://raw.githubusercontent.com/yourrepo/rules/direct.txt
    path: ./ruleset/direct-list.txt
    interval: 86400

behaviorフィールドの解説

behaviorはClashがルールセットをどのように解析・インデックス化するかを指定し、マッチングパフォーマンスに直接影響します:

  • classical:各エントリに完全な型プレフィックス(例:DOMAIN-SUFFIX,google.com)。異なるルール型を混在可能。柔軟ですが、マッチングがやや遅い。
  • domain:各行はドメイン名のみ。Clashはドメイントライ(プレフィックスツリー)を構築し、ワイルドカードマッチング(例:+.google.com)をサポート。純粋なドメインリストに最高のパフォーマンス。
  • ipcidr:各行はCIDR IPレンジ。Clashはラジックスツリーインデックスを構築し、非常に高速な検索を実現。大規模なIPベースのルーティングに最適。
ルールセットをタイプ別に分割しましょう:ドメインルールにはdomainビヘイビア、IPルールにはipcidrビヘイビアを使用。すべてにclassicalを使うのは避けてください。専用のビヘイビアはそれぞれの型に最適化されたデータ構造を使用するため、検索が数倍高速になります。

rulesセクションでのルールプロバイダー参照

rule-providersを宣言したら、rulesセクションでRULE-SETキーワードを使って参照します:

rules 参照例
rules:
  - RULE-SET,direct-list,DIRECT      # 直接接続ドメイン → DIRECT
  - RULE-SET,proxy-list,Proxy         # プロキシドメイン → プロキシグループ
  - RULE-SET,private-ip,DIRECT        # プライベートIP → DIRECT
  - GEOIP,JP,DIRECT                   # 国内IPアドレス → DIRECT(国コードを調整)
  - MATCH,Proxy                        # キャッチオール → プロキシ

ルールの優先順位と順序

Clashはrulesを上から順番に評価し、最初にマッチしたルールで処理を終了します。ルールの順序は重要です。推奨される順序:

  1. LAN/ローカルドメインを最初にDOMAIN-SUFFIX,.localIP-CIDR,192.168.0.0/16):内部トラフィックが誤ってプロキシされるのを防ぎます。
  2. 既知の直接接続ドメイン(内部サービス、ローカルリソース)
  3. 既知のプロキシドメイン(プロキシ経由でアクセスしたい外部サービス)
  4. GEOIP,<あなたの国コード>,DIRECT:国内IPのキャッチオール
  5. MATCH:最終キャッチオール:通常は未マッチトラフィックをプロキシへ
最後のルールとしてMATCH,DIRECTを使わないでください。これはすべての未認識トラフィックを直接送信することになり、明示的にリストに載せていない外部サービスがプロキシをバイパスしてしまいます。

fileタイプ:オフラインルールセット

オフラインアクセスやカスタムルールが必要な場合は、ローカルファイルを指すtype: fileを使用します。パスはClashのホームディレクトリ(通常は~/.config/clash/または~/.local/share/mihomo/)からの相対パスです。

ローカルルールセット設定
rule-providers:
  my-custom-rules:
    type: file
    behavior: domain
    path: ./ruleset/my-custom.txt