まず、更新停止がどの層に及んでいるのかを見極める

Clash 関連のプロジェクトは大きく三つの層に分かれます。コア、GUI クライアント、そして設定とルールセットです。コアはプロトコル解析、DNS、TUN ルーティングを担当し、クライアントは UI、サブスクリプション管理、システムプロキシの切り替えを担当します。設定層は profile ファイルとルールセットファイルです。三つの層は YAML 設定とローカルポートを介してやり取りするため、インターフェースが変わらなければ、どの層でも個別に差し替えられます。

まず更新が止まったのがどの層なのかを特定し、そのうえで設定に手を入れる必要があるかを判断します。判断材料は release タグの公開日時とデフォルトブランチの最終コミット日時であり、star 数やダウンロード数は関係ありません。

更新停止した層と対処方法
典型的な兆候実際の影響対処方法
コアリポジトリがアーカイブ済みで、最後の release から 12 か月以上が経過。オリジナルの Clash は v1.18.0(2023 年 8 月)で停止新しいプロトコルや DNS 機能は取り込まれず、ルールセットの新形式も解析できないコアを差し替え。profile の大半は再利用できる
クライアント9 か月以上新しい release が出ておらず、issue も長期間放置されているUI とサブスクリプション管理が旧バージョンのまま。TUN が新しい OS バージョンと互換性を持たない可能性があるクライアントを差し替え。サブスクリプションと profile はそのままインポートできる
ルールセットルールリポジトリに 6 か月間コミットがないドメインリストと IP リストが徐々に古くなり、振り分けの精度が低下するルール配布元を変更し、rule-providers の url を書き換える
  1. クライアントの「設定」→「バージョン情報」または「このアプリについて」で、UI バージョンとコアバージョンの 2 つを控えておきます(例:v1.18.0、v1.19.5)。
  2. 該当するリポジトリの releases ページを開き、最新タグの日付を確認して、本当に更新が止まっているのかを確かめます。
  3. profile ディレクトリを開き、設定がサブスクリプション URL 由来なのかローカルファイル由来なのかを確認します。前者は再生成できますが、後者は必ずバックアップが必要です。

クライアント層だけが更新停止した場合は、変更が最小で済む

既存の profile とルールセットはそのままに、メンテナンスが続いている UI に乗り換えるだけです。コア、サブスクリプション、ルールセットに手を入れる必要はなく、移行は通常 10 分以内で完了します。

移行前に設定資産をエクスポートする

設定資産は 3 種類に分かれます。サブスクリプション URL、ローカルの profile ファイル、そしてクライアント上で手動変更した項目(ポート、TUN のオン/オフ、自動起動、ルールの上書き)です。前の 2 つは完全にエクスポートできますが、3 つ目は項目ごとに記録するしかありません。エクスポート作業はプロキシをオフにした状態で行い、途中で通信が切れてサブスクリプションの更新に失敗するのを避けます。

プラットフォーム別 profile の既定ディレクトリ

profile と設定ファイルの保存場所
プラットフォームクライアントの設定ディレクトリコアの既定ディレクトリ
Windows%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\profiles\、旧版 Verge は %APPDATA%\clash-verge\%USERPROFILE%\.config\clash\
macOS~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev/profiles/~/.config/mihomo/
Linux~/.config/io.github.clash-verge-rev.clash-verge-rev/profiles/~/.config/mihomo/ または /etc/mihomo/
Androidアプリ内の「プロファイル」メニューにあるエクスポート項目。書き出したファイルは通常 /sdcard/Download/ に保存されるアプリ専用ディレクトリ。root 化しないと直接読み取れない

エクスポート手順

  1. システムプロキシと TUN をオフにする:「設定」→「システムプロキシ」をオフ、「設定」→「TUN モード」をオフ。
  2. 「サブスクリプション」ページで対象の profile を右クリック →「サブスクリプション URL をコピー」し、ローカルのテキストファイルに貼り付けて保存します。
  3. ローカルファイル型の profile:profiles ディレクトリ全体をバックアップ先にコピーします。providers サブディレクトリも含めます。
  4. ポートを記録:混合ポート 7890、コントロールポート 127.0.0.1:9090、DNS リスニング 1053。
  5. ルールセットの配布元を記録:rule-providers の各項目の url、interval、path。

最小構成の移行用設定

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
unified-delay: true
tcp-concurrent: true

dns:
  enable: true
  listen: 127.0.0.1:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - https://223.5.5.5/dns-query
    - https://1.1.1.1/dns-query

proxy-providers:
  main:
    type: http
    url: "https://sub.example.com/link/8f3c1a2b?flag=meta"
    interval: 3600
    path: ./providers/main.yaml
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 300

このうち unified-delaytcp-concurrent は mihomo のフィールドで、オリジナルの Clash が読むと解析エラーになります。移行時は移行先コアのバージョンに応じて残すか削除するかを決めてください。その他のフィールドは両方で共通です。

コアの差し替え:オリジナル Clash から mihomo へ

オリジナルの Clash コアは v1.18.0 で停止しています。Clash.Meta ブランチは 2024 年に mihomo へ改名され、メインラインは v1.19 系へ進み、TUN スタック、DNS、ルールセット形式は今も更新が続いています。両者は設定フィールドの大半が同名で、違いはここ 2 年で追加された機能に集中しています。

フィールド互換性の対照表
設定フィールドオリジナル Clash v1.18.0mihomo v1.19.x移行時の対応
mixed-port対応対応変更不要
tun.stacksystem / gvisor に対応mixed の値を追加そのままの値で可
sniffer非対応対応追加可能。fake-ip で上書きされたドメインを復元する用途に使う
rule-providersformat: mrs非対応対応メモリ使用量を抑えたい場合は mrs に変更可
geodata-modegeox-url非対応対応geo ファイルが必要な場合は追加する
proxy-groupslazy非対応対応任意。アイドル時のヘルスチェックを減らせる
sub-rule(1.19 で追加)非対応対応旧コアでは解析エラーになる

逆方向の互換性はほぼ成立します。mihomo はオリジナル Clash の profile をそのまま読めますが、逆は余分なフィールドのせいで解析に失敗します。したがって移行の方向は旧コアから mihomo への一方向だけで、逆向きにはできません。

Linux でコアを差し替えるコマンドライン

# 旧コアのサービスを停止
sudo systemctl stop clash

# mihomo コアをダウンロードしてインストール(amd64 の例)
curl -LO https://github.com/MetaCubeX/mihomo/releases/download/v1.19.5/mihomo-linux-amd64-v1.19.5.gz
gunzip mihomo-linux-amd64-v1.19.5.gz
sudo install -m 0755 mihomo-linux-amd64-v1.19.5 /usr/local/bin/mihomo

# 差し替えが反映されたか確認
mihomo -v

# 旧設定でフォアグラウンド試運転し、フィールド解析エラーが出ないか確認
mihomo -d /etc/mihomo -f /etc/mihomo/config.yaml

試運転中はフォアグラウンド出力を保ち、ログに parse error のようなフィールドエラーが出ていないことを確認してから終了し、systemd に任せます。非 root ユーザーで実行する場合は、ネットワーク権限を別途付与する必要があります:

[Unit]
Description=mihomo
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

同じパスに別々のコアのバイナリを上書きし続けない

旧コアのプロセスがバックグラウンドで動いたまま 9090 ポートを占有していると、差し替え後に「設定が反映されない」ように見えます。まずプロセスが終了していることを確認してから、バイナリを上書きしてください。

プラットフォーム別に代替クライアントを選ぶ

代替クライアントを選ぶ際は 3 つの必須条件で判断します。コアのダウンロードと更新の経路を内蔵しているか、profile ディレクトリを直接インポートできるか、システムプロキシと TUN の両モードを備えているかです。3 つすべてを満たす UI なら、サブスクリプションもポートの運用もそのまま持ち込めるため、移行コストが最も低くなります。

プラットフォーム別の選択肢
プラットフォーム選択できるクライアントコア設定のインポート方法
WindowsClash Verge Rev、FlClash、Clash Nyanpasumihomoサブスクリプション URL を貼り付けるか、yaml をウィンドウにドラッグ
macOSClash Verge Rev、FlClash、Mihomo Partymihomo同上。TUN の初回有効化時はシステム設定での承認が必要
AndroidFlClash、Clash Meta for Androidmihomoアプリ内でサブスクリプションを貼り付けるか、ローカルファイルからインポート
iOSApp Store で Network Extension を提供するクライアント(Shadowrocket、Stash、Loon など)独自のコア多くはサブスクリプション URL のみを受け付け、完全な yaml は解析しない
LinuxClash Verge Rev(AppImage / deb / rpm)、mihomo + systemdmihomo設定ファイルは直接 /etc/mihomo に配置される

iOS では地域差に注意が必要です。こうしたクライアントは中国本土の App Store では配信されておらず、別の地域のアカウントに切り替えてダウンロードする必要があります。また、多くは完全な yaml を解析せずサブスクリプション URL しか受け付けないため、ローカルで手書きしたルールは事前にサブスクリプション側へ整理しておかないと、移行後にルールが欠けてしまいます。

旧クライアントから設定を移す手順

  1. まず新しいクライアントをインストールし、いつでも見比べられるよう、しばらくは旧クライアントをアンインストールしないでおきます。
  2. サブスクリプション URL をインポートし、profile の生成が完了してノード一覧が表示されるまで待ちます。
  3. バックアップの記録と照らし合わせながら、混合ポート、コントロールポート、TUN スタックの種類、自動起動、システムプロキシモードを 1 項目ずつ戻していきます。
  4. 新しいクライアントで通信できることを確認してから、旧クライアントを停止し、そのバックグラウンドサービスをアンインストールします。Windows のサービスモードや macOS の特権ヘルパーは個別に削除しないと、待ち受けポートが残ったままになります。

移行後の確認チェックリスト

以下の 10 項目を順に確認すれば、移行後に残る問題のほとんどをカバーできます。コマンド内のポートは既定値で示しているので、変更している場合は実際の値に置き換えてください。

  1. コアのバージョン:curl -s http://127.0.0.1:9090/version を実行し、返ってくる version フィールドがインストールしたタグと一致していることを確認します。
  2. プロキシ経路:curl -I -x http://127.0.0.1:7890 https://www.gstatic.com/generate_204 を実行し、HTTP/2 204 が返れば経路が通っていると判断できます。
  3. DNS 解決:Windows では nslookup www.google.com 127.0.0.1、macOS と Linux では dig @127.0.0.1 -p 1053 www.google.com を使います。198.18.0.0/16 のアドレスが返れば fake-ip が有効です。
  4. ルールの適用確認:UI の「接続」ページを開き、まず日本国内のサイトにアクセスして DIRECT になるか、続いて海外のサイトにアクセスしてプロキシグループに入るかを確認します。
  5. TUN ルーティング:Windows では route print -4 を実行して TUN アダプターと 198.18.0.0 セグメントを確認します。Linux では ip route show table all | grep 198.18 を実行します。
  6. ポートの占有状況:Windows では netstat -ano | findstr :9090、macOS と Linux では lsof -i :9090 を使い、待ち受けているプロセスが 1 つだけであることを確認します。
  7. サブスクリプションの更新:手動で 1 回更新を実行し、ログに 403、404、TLS ハンドシェイク失敗が出ていないことを確認します。
  8. ルールセットの保存:ルールセットディレクトリ内のファイルサイズが 0 でなく、更新日時がたった今になっていることを確認します。
  9. 自動起動:システムを 1 回再起動し、クライアントが自動で立ち上がり、システムプロキシの状態が再起動前と同じであることを確認します。
  10. フォールバック経路:プロキシノードを切断し、DIRECT ルールのサイトに引き続きアクセスできることを確認します。これで振り分けがすべてプロキシグループに寄っていないことが分かります。

よくある移行トラブルと対処

サブスクリプションの更新が 403 または 404 を返す

多くは User-Agent の不一致が原因です。サーバー側が UA によって返す形式を変えている場合、新しいコアの既定 UA が旧クライアントと一致しないと、管理画面側でそのまま拒否されます。まずクライアントのサブスクリプション設定で UA のドロップダウン項目を探し、clash に切り替えて再試行してください。次に疑わしいのは URL 自体の期限切れで、その場合は管理画面に戻ってコピーし直します。

ルールセットのダウンロードに失敗する

geodata-mode: true の場合は geoip.dat、geosite.dat、または対応する mmdb ファイルが必要です。mihomo は作業ディレクトリへの自動ダウンロードを試みますが、ネットワークが制限されていると失敗します。手動でファイルを作業ディレクトリに置くか、geox-url をアクセス可能なアドレスに変更してください。

TUN モードが起動しない

起動直後に終了する、または設定が反映されない

まず 9090 が旧プロセスに占有されていないかを確認し、次に設定ファイルのインデントと文字コードを確認します。YAML を Tab でインデントすると解析に失敗します。ファイルは UTF-8(BOM なし)で保存してください。ログレベルを log-level: debug にするとログに具体的な行番号が出るので、設定ファイルを 1 行ずつ見比べるよりはるかに速く特定できます。

移行の本質は、3 つのものを新しい器に移すことに尽きます。サブスクリプション URL、profile ファイル、そしてポートとモードの運用習慣です。この 3 つが手元にあれば、クライアントを何度乗り換えても日常の使用には影響しません。逆に、UI 上のスイッチの位置だけを覚えていると、次に更新停止に直面したときにまた一から調べ直すことになります。