Clash 設定ファイル(Profile)の構造解説:フィールドの意味と複数サブスクリプションの管理方法
Profile の主要フィールド(ポート、プロキシグループ、ルールセクション)がそれぞれ何を担っているかを分解し、サブスクリプション更新時にどの部分が上書きされるかを解説。さらに複数の設定ファイルを切り替え・重複排除・バックアップする方法をまとめ、変更内容が更新で消える事故を防ぐ。
Profile の主要フィールド(ポート、プロキシグループ、ルールセクション)がそれぞれ何を担っているかを分解し、サブスクリプション更新時にどの部分が上書きされるかを解説。さらに複数の設定ファイルを切り替え・重複排除・バックアップする方法をまとめ、変更内容が更新で消える事故を防ぐ。
Clash のエコシステムにおいて「設定ファイル」(Profile)とは、YAML 形式のテキストファイルを指す。この中にはローカルのポート、アウトバウンドノードの一覧、プロキシグループの分類ロジック、そして一連の振り分けルールがまとめて記録されている。クライアントの画面に表示されるポリシーグループ、遅延計測、ルールマッチ結果は、突き詰めればすべてこの YAML を解析・レンダリングした結果にすぎない。サブスクリプションリンクを手動で入力する場合でも、ローカルファイルをインポートする場合でも、クライアントが行っている作業は本質的に同じで、リモートあるいはローカルのこのテキストを取得し、フォーマットを検証してから、コア(Clash Premium または mihomo)に渡して読み込ませているだけである。
Profile の構造を理解しておくメリットは、トラブルシューティングが速くなるだけではない。より重要なのは「どの変更が安全で、どの変更が次回のサブスクリプション更新で上書きされてしまうか」を判断できるようになることだ。これが本稿で明らかにしたい核心の問題である。
完全な Profile はおおむね 4 つのブロックに分けられる。順序に決まりはないが、クライアントの画面では通常次のようなロジックでグループ化して表示される。
このセクションはコアがどのポートを監視し、どのモードで動作するかを決める。代表的なフィールドは以下の通り。
| フィールド | 役割 |
|---|---|
| port | HTTP プロキシの監視ポート |
| socks-port | SOCKS5 プロキシの監視ポート |
| mixed-port | HTTP と SOCKS5 を兼ねる混合ポート。多くのクライアントはポートを分けず、このデフォルト設定を使う |
| allow-lan | 同一 LAN 内の他デバイスからこのプロキシへの接続を許可するか |
| mode | 動作モード。rule / global / direct のいずれか |
| log-level | ログの詳細度。トラブル対処時は一時的に debug に上げることが多い |
| external-controller | RESTful API の監視アドレス。クライアントの GUI はここを通じて動作状態を取得する |
これらのフィールドの大半はデフォルト値を持っており、クライアント GUI の「ポート設定」「混合ポート」「LAN 接続」といったスイッチは、実際にはこのブロックの内容を変更しているにすぎない。
proxies は配列で、各要素が 1 つのアウトバウンドノードを表す。代表的なフィールドは name(表示名)、type(プロトコル種別。ss、vmess、trojan、hysteria2 など)、server、port、そしてプロトコル固有の暗号方式・UUID・パスワードなどのパラメータである。このセクションは基本的に手動で編集する必要がない――サブスクリプション提供者側が生成するものであり、利用者側はサブスクリプションリンク自体が有効かどうかを確認するだけでよい。
proxy-groups はノードをどのように「選択可能なグループ」としてまとめるかを決める。各要素の代表的なフィールドは以下の通り。
クライアント画面に並ぶ「ノード選択」のドロップダウンリストは、ここに定義された select タイプの各グループに対応している。
rules は上から順にマッチングされるリストで、書式は通常 タイプ,マッチ対象,適用先ポリシー となる。代表的なタイプには DOMAIN-SUFFIX(ドメインサフィックス一致)、DOMAIN-KEYWORD(ドメインキーワード一致)、IP-CIDR(IP 範囲一致)、GEOIP(地理位置データベースによる判定)、RULE-SET(外部ルールセットの参照)などがある。最後には通常 MATCH,ポリシー名 という兜底ルールが置かれ、それまでのどのルールにも一致しなかった通信をすべてここで処理する。ルールリストは上位ほど優先度が高く、一度マッチしたら後続のルールは判定されない。
補足
比較的新しい Clash Meta(mihomo)コアでは rule-providers フィールドもサポートされており、外部ルールセット(例えばドメインをカテゴリ別にまとめたルールファイル)を宣言できる。ルールセクションでは RULE-SET,ルールセット名,ポリシー の形式で参照するため、ルールファイルを単体で更新でき、数千件のドメインをメイン設定に直接書き込む必要がなくなる。
ここが最も落とし穴になりやすい部分である。サブスクリプションリンクは提供者側でホストされている完全な YAML を指しており、クライアントの「サブスクリプション更新」という操作は、本質的にこのファイルを再ダウンロードしてローカルキャッシュを丸ごと置き換える処理である。つまり proxies(ノード一覧)、proxy-groups(ポリシーグループ構造)、rules(ルールリスト)の 3 つは、サブスクリプション提供者側の元ファイルに含まれていれば、更新後にすべて提供者側の最新版で上書きされる――手動で追加した独自ルールや、並び替えたグループ順序は、ほぼ確実に消えてしまう。
一方、ポート・LAN スイッチ・モードといった基本動作パラメータについては、クライアントによって扱いが異なる。多くの GUI クライアントはこれらを「実行時オーバーライド」として個別に保存し、サブスクリプションファイル自体には書き戻さないため、サブスクリプションを更新してもポート設定には影響しないことが多い。ただし、ローカルの YAML ファイルを直接編集し、それを「ローカル設定」としてインポートして使っている場合は、サブスクリプションリンクの更新機構を経由していないため、そもそも「再ダウンロード」という動作自体が存在せず、上書きの問題は発生しない。
特に注意すべきケースとして、一部のサブスクリプション提供者はリンク生成時にパラメータを付加し、独自ルールの挿入や特定グループの強制指定を行える。こうした内容も更新のたびに再度書き込まれるため、ローカルでの変更とは共存できない。判断の要点は一つだけである。その内容が「ダウンロード」によって得られたものであれば、次回更新時に必ず再ダウンロードされて上書きされる。
多くの GUI クライアント(Clash Verge Rev、FlClash、ClashX Meta など)は複数の Profile を同時に保存でき、画面上のリストからサブスクリプションやローカルファイルを互いに影響を与えずに切り替えられる。複数の設定を管理する際は、次のような原則に従うとよい。
複数のサブスクリプション提供者を併用している場合や、日常用と新規ノード検証用を分けたい場合は、それぞれを独立した Profile として保存すべきで、同一ファイル内でコピー&貼り付けを繰り返して切り替えるべきではない。こうしておけば、切り替え時はクライアントのリストから選ぶだけでよく、テキスト編集が発生しないためミスが起きにくい。
長期的に維持したい独自ルール(例えば特定の内部サービスをホワイトリスト化して直接接続させるなど)がある場合は、クライアントが提供する「オーバーライド」や「マージ」機能を使うのが最も確実である。多くの現代的なクライアントはサブスクリプションとは別にローカルオーバーライドファイルを維持できるため、サブスクリプション更新時に置き換わるのは提供者側の元コンテンツのみで、ローカルオーバーライド部分は独立したまま保持され、一緒に消えることはない。この機能がないクライアントの場合は、更新前に現在有効な YAML を手動でバックアップし、更新後に独自ルールの部分を貼り戻すという方法で対応する。
同じサブスクリプションアカウントを長期間使い続けると、ノード一覧が冗長になったり、すでにサービス終了したノードがグループに残ったままになったりすることがある。次のような点検を習慣化するとよい。
新しいデバイスへ移行する場合や、クライアントを再インストールする場合でも、次の 2 種類の内容を保持しておけば、以前の利用状態をほぼ完全に復元できる。1 つはサブスクリプションリンク自体(いつでも最新のノードとルールを再取得できる)、もう 1 つはローカルオーバーライドや独自ルールファイル(存在する場合)である。クライアントキャッシュの一時ファイルを追加でバックアップする必要はなく、それらは次回サブスクリプションを取得した際に自動で再生成される。
注意
ノードのパスワードや UUID などの機密情報を含む Profile ファイルを公開リポジトリにアップロードしたり、信頼できない第三者に共有したりしないこと。サブスクリプションリンク自体も機密情報として扱い、漏洩した場合は速やかに提供者側の管理画面でリセットすることを推奨する。
前述のフィールド区分に基づけば、よくある問題のほとんどは具体的なブロックに絞り込める。
Profile を一まとまりの構造化された設定文書として理解し、読み解けない YAML テキストの塊として捉えないようにすれば、大半のトラブルシューティングは根拠のある作業に変わる。画面上のあるスイッチの効果が想定と一致しない場合は、対応するフィールドの値を確認する方が、クライアントの再インストールを繰り返すよりも効果的なことが多い。