スマホとPCでClashのサブスクリプション設定を共有する方法
サブスクリプションURLの直接利用、自前ホスティング、オーバーライドの3方式を比較。スマホとPCでルールの違いを保つ方法や、更新間隔とローカル設定が競合した場合の優先順も解説します。
まず同期する範囲を決める:サブスクリプションの共有は、すべての設定のコピーではない
まずスマホとPCで、それぞれクライアントの「設定」または「Profiles」画面を開き、現在有効な設定の取得元を確認します。両方で同じサブスクリプションURLから設定をダウンロードしていれば、ノードの取得元は統一されています。ただし、選択中のノード、ルールモード、システムプロキシの有効・無効、バックグラウンド実行の権限は、通常デバイスごとに保存されます。
サブスクリプションURLは、クライアントがリモートの設定を取得するためのアドレスです。完全なYAML設定を返す場合もあれば、ノード一覧だけの場合や、エンコードされた別形式の場合もあります。YAMLはインデントで構造を表すテキスト形式です。クライアントが解析できる内容だけをそのままインポートできます。「サブスクリプション」と書かれたURLなら必ず対応している、とは限りません。
mihomoは、Clash Metaの後継として使われているコアの名称で、プロキシプロトコルやルールの処理を担います。クライアントは設定のインポート、システムへの適用、更新などを操作する画面を提供します。両方のデバイスがmihomo設定に対応していても、クライアントごとにオーバーライドの設定場所やマージ方法が同じとは限りません。
| 設定内容 | 共有の推奨 | 設定場所 |
|---|---|---|
| ノードの取得元、共通のプロキシグループ | 推奨 | リモートサブスクリプションまたは共通設定 |
| 共通ドメインのルール | 推奨 | 共通ルールソースまたは共通オーバーライド |
| リスニングポート、コントローラー | デバイスごとに設定 | クライアントのローカル設定 |
| Androidのアプリ別プロキシ | スマホのみで設定 | Androidクライアントの画面 |
| TUN、システムプロキシ、VPNの許可 | 個別に設定 | クライアントとOS |
方法1:同じサブスクリプションURLを両方にインポートする
スマホとPCの2台だけで使い、主にサービス提供元のルールを利用するなら、まずはこの方法を選びましょう。追加のホスティングサーバーが不要で、問題が起きたときもダウンロード失敗かローカル設定の競合かを切り分けやすくなります。
- サービスのアカウントページから、Clashまたはmihomo向けのサブスクリプションURLをコピーします。ブラウザーで開いているアカウントページのURLをコピーしないでください。
- Androidクライアントで「設定」を開き、「追加」「新規作成」「URLからインポート」などを探します。URLを貼り付けて保存してください。項目名や場所はクライアントによって異なります。
- PCで「設定」または「Profiles」を開き、URLから同じアドレスをインポートします。ダウンロード後、この設定が選択されていることを確認してください。
- 両方で一度ずつ手動更新し、更新日時、ノード一覧、プロキシグループが想定どおりか確認してから自動更新を有効にします。
- 必要なノードやプロキシグループはデバイスごとに選択します。クライアントに状態同期機能が明示されていない限り、PCでノードを切り替えてもスマホ側まで切り替わるとは考えないでください。
更新間隔はまず24時間に設定する
時間単位で指定する画面なら、まず24に設定します。秒単位と明記されている場合、24時間は86400秒です。固定の選択肢しかないクライアントでは、最も近い値を選んでください。サービス提供元が案内する更新頻度を守り、接続の問題を解決しようとして更新間隔を数秒に縮めないでください。
Androidが省電力モードやバックグラウンド制限の対象になると、定期タスクが遅れることがあります。そのため「毎日更新」を設定しても、毎日決まった時刻に必ず実行されるとは限りません。ノードの変更に気付いたら、まずアプリを開いて手動更新し、その後バックグラウンド制限を確認してください。PCが長時間スリープしている場合も、予定時刻に更新されないことがあります。
この方法ではローカルの変更は同期されない
ダウンロードしたサブスクリプション本文を直接編集すると、次回の更新で上書きされる可能性があります。長期的に残したいルールは、リモート設定のコピーに追加するのではなく、クライアントのローカルオーバーライドに保存してください。クライアントがオーバーライドに対応していない場合は、ローカル設定を別に保管すれば上書きを避けられますが、以降のノードやルールは自分で更新する必要があります。
方法2:設定を自前でホスティングし、共通ルールを管理する
複数のデバイスを管理する場合や、業務用ドメイン、プロキシグループ、ルールの順序を一元管理したい場合は、共通設定を自分で管理するHTTPSサーバーに置けます。クライアントにはそのホスティングURLを登録し、管理者がリモートのファイルを更新します。ここでのホスティングは設定の保存と配信を指し、スマホとPCが直接ファイルをやり取りする方法ではありません。
完全な設定とプロキシプロバイダーを区別する
完全な設定には通常、proxiesまたはproxy-providers、proxy-groups、rulesなどのフィールドが含まれます。proxy-providersは、指定した方法でノード一覧を取得するプロキシプロバイダーです。そのリソースを、任意の形式のサブスクリプション本文に置き換えることはできません。
- サービス提供元がプロキシプロバイダーに直接使えるYAMLを提供している場合は、共通設定から参照し、プロキシグループで
useを使ってそのプロバイダーを利用できます。 - サービス提供元が完全な設定だけを提供している場合は、まずノード専用の出力があるか確認してください。完全な設定をそのままプロキシプロバイダー用のファイルとして使うことはできません。
- 形式の変換が必要な場合は、自分で管理する環境で行ってください。変換後のプロトコルフィールドが、両方のデバイスのコアに対応していることも確認します。
この方法なら「ノードの更新」と「共通ルールの更新」を分けられますが、障害箇所も増えます。メイン設定のダウンロードに成功しても、プロバイダーの取得に成功したとは限りません。問題の切り分けでは、両方の更新日時とログを個別に確認してください。
ホスティング前に確認する3つのポイント
- アクセス時の応答:ログインしていないブラウザーで、クライアントが使うURLにアクセスし、ログインページ、共有プレビュー、エラーページではなく設定テキストが返ることを確認します。認証が必要な場合は、クライアントがその方式に対応しているか先に確認してください。
- アクセス権:ノードの認証情報を含むファイルを公開リポジトリに置かないでください。アクセストークンを公開ルールファイルやスクリーンショットに記載するのも避けましょう。
- キャッシュ設定:公開後に両方のデバイスで手動更新し、実際に内容が更新されたことを確認します。古いファイルが返る場合は、クライアントを何度も変更するのではなく、ホスティングサービスや中間キャッシュを確認してください。
方法3:共通サブスクリプションにローカルオーバーライドを加え、デバイスごとの差を保つ
まずクライアントの設定管理画面を開き、「オーバーライド」「拡張設定」「Merge」「Script」などの機能を探します。オーバーライドは、リモート設定をダウンロードした後にローカルの変更を適用する仕組みです。スクリプトオーバーライドでは、クライアントが提供する実行インターフェースを通じて設定オブジェクトを変更します。これらはクライアント固有の機能であり、Clashコアを使うすべてのクライアントが同じスクリプトインターフェースを備えているわけではありません。
比較的管理しやすい構成は、サブスクリプションでノードと基本のプロキシ設定を管理し、共通オーバーライドで共有ルールを管理し、デバイスごとのオーバーライドで個別の差を設定する方法です。適用順はクライアントによって異なります。オーバーライドを1層しか使えない場合は、必要な変更をその層にまとめ、設定元を記録してください。
まずルールを1つ追加し、マージ動作を確認する
以下は完全なルールリストの例であり、ノードやプロキシグループなしで単独実行できる完全な設定ではありません。DIRECTは直接接続を表します。「プロキシ」という名前のプロキシグループがあらかじめ存在している必要があります。example.comは説明用のドメインです。実際にルーティングしたいドメインに置き換えてください。
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,プロキシ
Clashのルールは通常、上から順に照合され、一致すると対応するプロキシが使われます。MATCHは最終ルールなので、リストの最後に置きます。既存のMATCHより後に新しいルールを追加しても、通常は実行されません。
特に、ルールリストのマージ方法を確認してください。rules全体を置き換える設定もあれば、先頭への追加や末尾への追加に対応する設定もあります。上記の2行でリスト全体を置き換えると、サブスクリプションに含まれる他のルールが削除されます。本番で使う前に、クライアントの実行設定プレビューを開いて最終結果を確認してください。プレビュー機能がない場合は、設定の検証とルール画面で先に確認します。
スマホとPCで個別に設定する項目
- Android:アプリ別プロキシ、VPNの許可、バックグラウンドでのバッテリー制限はスマホ側で管理します。パッケージ名で選ぶアプリ一覧を、そのままPC側のルールにコピーしないでください。
- PC:システムプロキシの有効・無効、スタートアップ、TUNの権限は個別に設定します。TUNはネットワーク通信を取り込むための仮想ネットワークインターフェースです。スイッチの設定をコピーするだけでは、OSの許可は得られません。
- リスニングポート:たとえばPCの
mixed-portを7890に設定している場合、手動プロキシを使うアプリにも同じポートを指定します。スマホでVPN経由の通信を使う場合、PCアプリのプロキシアドレスをそのまま設定する必要はありません。 - コントローラー:設定同期のために
external-controllerをインターネットに公開しないでください。これはコアの管理に使うもので、サブスクリプションの同期には必要ありません。
更新後にルールが消えた場合:生成順に沿って競合を確認する
スマホではルールが機能するのにPCでは効かない場合、両方を同時に変更しないでください。正常に動作するデバイスを比較用に残し、もう一方を順番に確認します。一度に変更する場所を1つに絞ると、どの段階で上書きされたのかを特定しやすくなります。
- 有効な設定を確認:現在選択中の設定名と取得元を確認します。有効になっていない設定を更新しても、実行中のルールは変わりません。
- ローカル設定を保存:ローカルオーバーライドと必要なクライアント設定をエクスポートします。バックアップにトークンが含まれる場合は安全に保管してください。リモートのサブスクリプション本文だけをバックアップしないようにしましょう。
- リモートからのダウンロードを確認:まず設定を正常に取得して解析できることを確認します。ダウンロードに失敗すると、クライアントは古い設定を使い続けることがあります。通信できるというだけで更新に成功したと判断しないでください。
- プロバイダーを確認:ノードやルールのプロバイダーを使っている場合は、そちらの更新日時も確認します。メインのサブスクリプションとプロバイダーにはそれぞれ更新の仕組みがあり、同時に更新されるとは限りません。
- オーバーライドの結果を確認:最終設定の
rulesとproxy-groupsを照合し、ルールリスト全体が置き換わっていないことと、参照先のプロキシグループ名が変わっていないことを確認します。 - 再読み込みして新しい接続をテスト:クライアントの再読み込みまたはコア再起動機能を使い、新しい接続を開いてテストします。既存の長時間接続は、新しいルールですぐに再ルーティングされない場合があります。
「プロキシグループが見つからない」というエラーは、サービス提供元がグループ名を変更したのに、ローカルルールが古い名前を参照しているケースがよくあります。「更新後にカスタムルールが消えた」場合は、ルールをリモートファイルに直接記述していたか、後段のオーバーライドが前段を置き換えている可能性があります。該当フィールドの最終的な取得元を特定してからマージ順を調整し、ルールを何度も貼り付けて解決しようとしないでください。
同期後の確認リスト
最後に両方のデバイスで一度ずつ手動更新し、直接接続するドメイン、プロキシ経由にするドメイン、よく使うアプリをそれぞれテストします。設定の更新日時、コアのバージョン、ローカルオーバーライドの内容を記録してください。バージョンは「バージョン情報」またはコア情報の画面で確認し、クライアントの外側のアプリだけのバージョンを記録しないようにします。
| 発生している現象 | まず確認する項目 | 次に行うこと |
|---|---|---|
| 同じURLなのに、両方でノードが異なる | 更新日時、キャッシュ、リクエストに対してサービス側が返す内容 | 両方で手動更新し、ダウンロード結果を比較する |
| ノードは同じなのに、通信経路が異なる | モード、ルールの順序、選択中のプロキシ | 接続ログで適用されたルールを確認する |
| PCではインポートできるが、スマホで解析に失敗する | コアが対応するプロトコルとフィールド | 解析ログを確認し、互換性のある形式を選ぶ |
| スマホの画面ロック後に自動更新されない | バックグラウンド制限と更新タスクのスケジュール | まず手動更新し、その後バッテリー設定を確認する |
| 更新後も古い経路が使われる | 長時間接続、プロキシの選択、設定の再読み込み状況 | 再読み込み後、新しい接続を確立してテストする |
ノードを共有するだけなら、同じサブスクリプションを各デバイスにインポートすれば十分です。ルールを一元管理したい場合は自前ホスティングを追加し、デバイスごとの差が大きい場合は各端末のオーバーライドに設定します。大切なのは、各設定の管理場所を1か所に明確に決めることです。2台の設定ファイル全体を常に完全一致させる必要はありません。