Clashルールを手書きする最大の悩みはメンテナンスです。ルールリストが増えるにつれて設定ファイルが肥大化し、サービスのドメインリストを更新するたびに手動でYAMLを編集しなければなりません。Rule ProviderはClashのモジュール型ルール管理システムです。ルールリストを外部ファイルに分離し、Clashが自動的に取得・更新し、設定ファイルはそれらを参照するだけで済みます。この記事では完全な使い方とベストプラクティスを解説します。
ルールプロバイダーの構造
Rule Providerは2つの要素で構成されます:ルールセットファイル(ドメイン・IPリスト)と設定ファイル内の宣言です。ルールセットファイルは2つのフォーマットをサポートしています:
- YAMLフォーマット:各ルールは独立した行に記述し、
DOMAIN,example.comやIP-CIDR,8.8.8.8/32のように明示的な型プレフィックスを持ちます。複雑な混合ルールセットに最適です。 - テキストフォーマット:各行はドメインまたはIPのみ(型プレフィックスなし)。Clashは
behaviorフィールドから型を推論します。シンプルでコンパクトで、純粋なドメインリストやIPリストに最適です。
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: 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: - 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を上から順番に評価し、最初にマッチしたルールで処理を終了します。ルールの順序は重要です。推奨される順序:
- LAN/ローカルドメインを最初に(
DOMAIN-SUFFIX,.local、IP-CIDR,192.168.0.0/16):内部トラフィックが誤ってプロキシされるのを防ぎます。 - 既知の直接接続ドメイン(内部サービス、ローカルリソース)
- 既知のプロキシドメイン(プロキシ経由でアクセスしたい外部サービス)
- GEOIP,<あなたの国コード>,DIRECT:国内IPのキャッチオール
- 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