rule-providersで肥大化したClash設定を整理する
Clashの設定を使い続けるうちに、rulesへ独自ルールを追加し、例外を直し、公開リストを継ぎ足していくと、メインのYAMLが長くなりがちです。変更のたびに大きな設定ファイル全体を見直す必要があり、購読更新やクライアント変更のときに、自分で追加した行を失う危険もあります。そこで役立つのが、ルールを別ファイルとして管理し、必要なときに読み込むrule-providersです。ルールの本文と、どの通信をどのポリシーへ送るかを決めるメイン設定を分離できるため、差分を追いやすくなります。
rule providerはルールの保管場所を定義する設定です。プロバイダー側では、HTTPで取得するのかローカルファイルを読むのか、ルールの種類は何か、更新間隔をどれくらいにするかを指定します。メイン設定のrulesでは、個々の行をすべて書く代わりにRULE-SETでプロバイダーを参照します。これにより、共通ルールを複数の設定で再利用したり、用途ごとにリストを分けて更新したりできます。
ただし、rule-providersを定義しただけでは通信の行き先は決まりません。読み込んだルールセットをどのポリシーグループへ割り当てるか、さらに既存ルールより前後どちらに置くかまで整えて初めて、意図した分流になります。まずは現在使っているコアがrule-providersに対応しているかを確認し、設定ファイルのバックアップを取ってから、小さなルールセットで試すのが安全です。
RULE-SET行は「そのルールをどのポリシーへ適用するか」を担当します。両方の名前が一致しているかを最初に確認しましょう。
YAMLでrule-providerとルールセットを定義する
以下は、GitHub上に置いたYAML形式のルールセットを定期取得する構成例です。nameはメイン設定から参照する識別子、typeは取得方法、behaviorはルールの種類、formatはファイル形式を表します。URLと保存先のパスは例なので、自分のリポジトリ名やファイル配置に置き換えてください。
rule-providers:
custom-services:
type: http
behavior: domain
format: yaml
url: https://raw.githubusercontent.com/USER/clash-rules/main/services.yaml
path: ./ruleset/custom-services.yaml
interval: 86400
rules:
- RULE-SET,custom-services,Proxy
- MATCH,DIRECT
対応するservices.yamlは、たとえば次のような構造にします。ドメインルールのproviderであれば、behavior: domainとファイル内のルール内容を対応させます。behaviorに合わないルールを混ぜると、URLからファイルを取得できても、読み込み時にエラーになったり、期待した一致が起きなかったりします。
payload:
- DOMAIN,service.example.com
- DOMAIN-SUFFIX,api.example.net
既存のルール記法をそのまま一行ずつ置きたい場合は、behavior: classicalを選ぶ方法もあります。その場合は、利用中のコアがサポートする形式と拡張子を確認し、ドメイン・IP・キーワードなどの種類を混ぜる意図を明確にしてください。domain、ipcidr、classicalは互換の言い換えではありません。分類を選び違えると、ルールが読み込めない、または期待する範囲に一致しない原因になります。
interval: 86400は24時間を秒で指定した例です。小さな値を設定すれば常に最新になるわけではなく、GitHubへのアクセス回数が増えたり、短時間の通信障害で更新に失敗したりする可能性があります。更新間隔はリストの変更頻度に合わせて決め、更新に失敗した際も前回取得したルールが利用されるか、ログと実際のクライアント挙動で確かめてください。パスはクライアントの実行場所によって見え方が異なるため、読み込み先の相対位置も確認が必要です。
GitHubでルールを公開し、安全に更新する
ルールをGitHubで管理する利点は、変更履歴を残せることと、Clash本体の設定ファイルから独立して編集できることです。リポジトリに用途別のファイルを置き、たとえば広告関連、仕事用ドメイン、個人サービス用のように分ければ、変更の影響範囲を絞れます。コミット前に差分を確認する習慣をつけると、誤った一括置換や、意図しない広範囲のルール追加も発見しやすくなります。
URLにはGitHubのファイル閲覧ページではなく、コアが取得できるRawファイルのURLを使います。ブランチ名やファイルのパスを変えたときは、providerのURLも同時に更新してください。URLの末尾に余分な空白がある、リポジトリを非公開にした、ファイル名の大文字小文字が異なる、といった小さな違いでも取得に失敗します。公開リポジトリへ置く内容に、購読URL、アクセストークン、個人情報、社内限定の接続先を含めないことも重要です。
非公開リポジトリは、認証情報を必要とする構成やクライアントの制約が増えやすいため、個人用トークンをYAMLへ直接書く運用は避けてください。トークンがリポジトリ履歴に一度入ると、ファイルから削除しただけでは過去の履歴に残る場合があります。共有するリストは公開可能な情報だけにし、誤って秘密情報をコミットした場合は、該当ファイルの編集にとどめず、認証情報の失効や履歴への対処も検討します。
更新確認では、GitHub上のファイルが新しくなったことと、Clashが実際に新しい内容を取得したことを分けて考えます。アプリによってproviderの更新操作や状態表示の場所は異なります。更新を実行したら、クライアントのログで取得結果を確認し、保存先のキャッシュ日時やルール件数に変化があるかも見てください。更新できたように見えて通信が変わらない場合は、メイン設定で参照しているprovider名、ルールの一致条件、ルール順を順番に点検します。
ルール順序と読み込み結果を検証する
Clashは基本的にrulesを上から評価し、最初に一致したルールで処理を決めます。そのため、広範囲に一致するGEOIPや独自providerが、対象サービス用のRULE-SETより前にあると、後ろのルールまで到達しないことがあります。さらに、MATCHは残りの通信を処理する包括的なルールなので、通常は適切な個別ルールより後ろに置きます。リストの中身だけでなく、メイン設定のどこへRULE-SETを挿入したかが結果を左右します。
新しいproviderを追加するときは、いきなり多くのリストを一斉に導入せず、まず一つだけ追加して検証します。設定変更前のファイルを保存し、YAMLのインデント、コロン、リスト記号、provider名の一致を確認してから再読み込みしてください。読み込みエラーが出たら、ルール行を増やす前にログのファイル名や行番号を確認します。エラーの場所がprovider定義なのか、取得したルールファイルなのかを切り分けると、修正箇所を絞り込めます。
動作確認では、対象ドメインへの接続を発生させ、Connectionsや接続ログで一致したルールと選択されたポリシーを確認します。想定したRULE-SETではなくMATCHが選ばれるなら、ファイルが更新されていない、ルールの表記が実際の通信先と異なる、あるいはルール順が先に別の条件へ一致している可能性があります。逆に広すぎるドメインルールが多数の通信を拾う場合は、そのルールの範囲を狭め、意図しないサービスまで同じ出口に送っていないかを確認してください。
| 症状 | 確認するポイント | 次の対応 |
|---|---|---|
| providerを取得できない | Raw URL、公開設定、ブランチ名、通信ログ | ブラウザー以外から取得可能か確認し、URLを修正する |
| YAML読み込みエラー | インデント、キー名、provider形式 | 設定を小さく分け、エラー行の前後を見直す |
| 期待したルールに一致しない | behavior、payload、ドメイン表記、ルール順 | 接続ログで実際の一致ルールとポリシーを確認する |
| 更新後も動作が変わらない | 更新結果、キャッシュ、参照中のprofile | providerの再取得と有効な設定の選択状態を確認する |
長く使えるルール管理にする
運用を続けやすくするには、ファイル名とprovider名に用途を反映し、何のためのリストかを自分で説明できる状態にします。似たルールセットを細かく増やしすぎると、重複や優先順位の確認が難しくなります。一方、すべてを一つの巨大なリストにまとめると、更新時に差分の原因を探しにくくなります。追加する前に「独立して更新する必要があるか」「別のポリシーへ送る必要があるか」を考え、分ける理由を明確にしてください。
共有リストを採用する場合も、掲載されているルールを無条件に信頼せず、更新履歴と内容を確認します。第三者のリストが突然大きく変化したとき、通信の遮断や予期しない迂回が起きる可能性があります。定期更新の前後で差分を確認できるようにし、重要な環境では変更をすぐ本番へ反映せず、検証用プロファイルで影響を確かめると安心です。ルールの目的、更新元、最後に確認した日付をREADMEなどに記録しておけば、後から管理を引き継ぐ場合にも役立ちます。
GUIクライアントの画面だけで編集する方法は手軽ですが、複数の設定で同じリストを使い回したい場合や、更新履歴を追いたい場合には管理が煩雑になりやすいことがあります。反対に、GitHubへ置くだけで正しさが保証されるわけではなく、YAMLの形式、取得状態、ルール順序を自分で検証する必要があります。Clash V.COREなら、プロファイルを扱いながらMihomoのログや接続状態を確認しやすく、providerの更新トラブルを分流結果と合わせて調べる作業にも役立ちます。手作業の設定管理から一歩進めたい方は、利用環境に合うクライアントをダウンロードして、まずは小さなルールセットから試してみてください。
// エディターズ・チョイス
Clash V.COREでルール管理を整理
GitHub管理のルールセットを読み込み、分流結果や更新状態を確認しながら運用を整えましょう。
- プロファイルとルール設定をまとめて管理
- Mihomoの接続ログで一致結果を確認
- 更新後の分流トラブルを切り分け
- 日々の設定変更を見直しやすく整理