Clash Nyanpasuのサブスクリプション更新に失敗する場合の対処法|解析エラーの6つの原因と確認手順

リンク切れ、応答形式の不一致、YAMLのインデントミス、User-Agentの拒否など、サブスクリプションの解析に失敗する原因と症状を解説。クライアントのログで問題を特定する手順も紹介します。

まず切り分ける:ダウンロード、解析、設定の読み込みのどこで失敗したか

Clash Nyanpasuでサブスクリプションを更新する際は、クライアントがURLにリクエストを送り、応答を取得してから、設定を解析してコアに読み込ませます。画面に表示される「更新に失敗しました」は、こうした処理のどこかで発生したエラーをまとめたものです。接続タイムアウト、ログインページの受信、ルールが存在しないプロキシグループを参照している場合など、更新が中断される理由によって対処法は異なります。

この記事では、mihomoコアを使用する設定を対象に解説します。Clash Nyanpasuはクライアント、mihomoはプロキシとルールの処理を担います。ファイルをダウンロードできても、現在のコアがその中のすべての項目に対応しているとは限りません。トラブルシューティングを始める前に、まだ使える設定を残しておきましょう。再試行のためにサブスクリプションをすべて削除する必要はありません。

  1. 環境を記録:OS、Clash Nyanpasuのバージョン、選択中のコアとそのバージョンを控えます。バージョン番号は「このアプリについて」画面またはコアの起動ログで確認し、「最新版」とだけ記録するのは避けてください。
  2. 発生条件を記録:初回のインポートで失敗したのか、これまで使えていたサブスクリプションが突然更新できなくなったのか、ほかのサブスクリプションも失敗するのかを確認します。
  3. 再試行は1回だけ:ログ画面で時刻を記録してから、対象の設定を更新します。その前後に記録されたエラーを残してください。
  4. 認証情報を保護:ログを共有する前に、サブスクリプションURLのクエリパラメーター、パス内のトークン、ノードのパスワード、認証ヘッダーを削除してください。

サブスクリプションURLには、アカウントの認証情報が含まれていることがあります。完全なURLを公開のYAMLチェックサイト、オンライン変換サービス、スクリーンショット付きのコメント欄に投稿しないでください。応答を確認する場合は、できるだけローカル環境で行いましょう。

原因1:サブスクリプションURLの期限切れ、トークンの失効、アカウント権限の変更

これまで更新できていたのに、401、403、404が返る場合は、まずサーバー側の認証状態を確認してください。パスワードの変更、サブスクリプションのリセット、プランの期限切れ、サーバーの移行などによって、以前のURLが使えなくなることがあります。ただし、ステータスコードだけで原因を断定することはできません。403はアクセス保護による場合もあり、404はURLのパスを間違えている可能性もあります。

確認項目

  • サブスクリプション提供元のアカウントページにログインし、プランの状態とサブスクリプションのURLを確認して、Clashまたはmihomo用のURLをコピーし直します。
  • URLが最後まで正しくコピーされているか確認します。特に?以降のパラメーターに注意してください。チャットアプリによる改行、末尾の句読点、コピー時に混入した空白でもリクエストが変わることがあります。
  • アカウントのトップページ、共有ページ、QRコード画像のURLをコピーしていないか確認します。ブラウザーで開けても、サブスクリプションAPIのURLとは限りません。
  • サブスクリプションのトークンをリセットした場合は、クライアントに保存されているURLも更新してください。古いURLを繰り返し試しても復旧しません。

ブラウザーでアカウントページを開けても、サブスクリプションURLが有効だとは限りません。ブラウザーではログインCookieが送信される一方、クライアントのサブスクリプション更新ではログイン状態が引き継がれないことがあります。サブスクリプションAPIのステータスコードと応答内容を確認してください。

原因2:DNS、TLS、プロキシ経路の問題でリクエストが完了しない

timeout、connection refused、no such host、証明書関連のエラーが出る場合は、まず接続層を確認します。この段階では、解析できるサブスクリプションの本文をまだ取得できていないことがほとんどです。YAMLのインデントを直しても解決しません。

ログの手がかりまず確認すること次の手順
no such hostサブスクリプションのドメイン解決ドメインのスペルを確認し、別のネットワークでの結果と比較する
connection refused接続先のポートまたはローカルのプロキシポートリクエストの接続先を確認し、該当サービスが動作しているか調べる
timeout通信経路、出口、サービスの応答直接接続した場合と、利用可能なプロキシ経由で更新した場合を比較する
certificate 関連のエラーシステム時刻と証明書チェーンシステム時刻を合わせ、ネットワークの認証ページやHTTPS検査ソフトを確認する

現在のバージョンにサブスクリプション更新時のプロキシ設定がある場合は、直接接続とプロキシ経由の結果をそれぞれ記録してください。設定項目の場所や名称はバージョンによって異なります。また、システムプロキシを有効にしても、サブスクリプションのダウンローダーが必ずプロキシを使うとは限りません。TUNの対象範囲も、ルーティング、プロセスの除外設定、クライアントの実装によって変わるため、ログや接続記録を確認してください。

よくあるのが、サブスクリプションのドメインへのアクセスにプロキシが必要なのに、利用できるノードが、まだインポートしていないサブスクリプションにしかないという状況です。使える既存の設定を残すか、サブスクリプションのドメインにアクセスできる信頼できるネットワークから更新してください。ルールモードを何度も切り替えても解決しません。証明書エラーが出ても、証明書の検証をすぐに無効化せず、まずシステム時刻とネットワーク環境を確認してください。

原因3:HTTPリクエストは成功しても、完全なClash設定が返されない

200 OKはサーバーから応答があったことを示すだけで、内容が設定ファイルであるとは限りません。サブスクリプションURLからHTMLのログインページ、JSON形式のエラー、Base64でエンコードされたノード一覧、プロキシノードのみを含むproviderファイルが返ることがあります。内容ごとに対処法が異なるため、すべてを完全な設定としてインポートすることはできません。

応答の冒頭を確認し、まず内容の種類を見分ける

  • <!doctype html>または<htmlで始まる:通常はWebページ、ログイン画面、アクセス認証ページです。
  • errorやmessageなどのJSONフィールドがある:まずサーバーから返されたエラーを確認します。利用上限、権限、パラメーターに問題がある可能性があります。
  • 長いエンコード文字列、または複数行のss://、vmess://などのURIがある:完全なClash YAMLではなく、汎用形式のノードサブスクリプションの可能性があります。
  • proxies:のノード一覧だけがある:proxy-providersから参照するファイルの可能性があります。使用可能なプロキシグループや振り分けルールが含まれているとは限りません。

サブスクリプション提供元のページで、Clash Metaまたはmihomoに対応した出力形式を選んでください。ファイルの拡張子を.yamlに変更するだけでは不十分です。また、すべての「Clashサブスクリプション」に同じ項目が含まれているわけではありません。完全な設定には通常、ノードやプロキシの集合、プロキシグループ、ルールが含まれますが、具体的な構成は用途によって異なります。

ダウンロード結果がアクセス認証ページだった場合は、提供元でAPIのURLとアクセス制限を確認してください。ブラウザーで認証を済ませてページを表示できても、クライアントが同じページスクリプトを実行できるとは限りません。

原因4:YAMLのインデント、特殊文字、重複キーによる構文エラー

ログにyaml:、did not find expected key、またはlineを含む構文エラーがある場合は、YAMLを確認してください。行番号は解析を続けられなくなった位置を示すことが多く、実際の問題は直前の行にある場合もあります。たとえば、文字列の引用符が閉じていない、リスト項目のインデントが変わっている、といったケースです。

特によくある4つの確認ポイント

  1. インデントにはスペースを使い、タブを混在させないでください。同じ階層のインデントは統一します。一般的には1階層につきスペース2つです。
  2. キーと値の間には半角コロンを使い、コロンの後に半角スペースを入れます。name:のコロンを全角にしないでください。
  3. 名前やパスワードにコロンとスペース、シャープ記号などの特殊文字が含まれる場合は、構造やコメントとして誤認されないよう、適切に引用符で囲んでください。
  4. rules:を2回貼り付けた場合など、トップレベルのキーが重複していないか確認します。解析器によってエラーになったり、以前の値が上書きされたりするため、この書き方に依存しないでください。

以下はインデントと基本構造を確認するためのローカルテスト設定です。プロキシノードは含まれず、すべての接続はルールに従って直接接続されます。7890は例示用のリッスンポートで、現在のクライアントのポートを示すものではありません。また、すでに待ち受け中のほかのサービスと競合しないようにしてください。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info

proxies: []

proxy-groups:
  - name: "手動選択"
    type: select
    proxies:
      - DIRECT

rules:
  - MATCH,手動選択

テストファイルが読み込めてサブスクリプションのファイルが読み込めない場合は、元ファイルの内容をさらに比較してください。ただし、それだけでネットワーク層に問題がないと判断することはできません。唯一の元データを直接編集せず、まずローカルテスト用のコピーを作成してください。リモート更新では通常ダウンロードした内容で置き換わるため、継続的な変更には現在のバージョンが対応するオーバーライドやマージ機能を使います。

原因5:YAMLの構文は正しいが、コアの項目や参照関係に互換性がない

YAMLを読み込めるのは、構文が正しいということにすぎません。設定を使用するには、コアによる構造と参照先のチェックも通る必要があります。たとえば、ルールが境外代理を参照しているのに、proxy-groupsで定義されている名前が境外节点の場合、読み込み時にプロキシグループが見つからないと報告されることがあります。名前の空白、大文字と小文字、記号まで正確に照合してください。

  • 現在のコアを確認:クライアントのコア選択画面と起動ログで、実際にmihomoが動作していることを確認してください。サブスクリプションのボタンに「Meta」と表示されているだけで、実行環境が対応していると判断しないでください。
  • ノードの種類と項目を確認:新しいプロトコルや追加オプションには、新しいバージョンのコアが必要な場合があります。具体的なエラーをもとに該当バージョンのドキュメントを確認し、更新するか判断してください。認証項目をむやみに削除しないでください。
  • プロキシグループの参照先を確認:ルールの対象は、定義済みのプロキシグループまたは組み込みのターゲットである必要があります。グループ内のノード名も実際に存在していなければなりません。
  • 外部のproviderを確認:proxy-providersやrule-providersのダウンロード失敗は、別のリクエストで発生する問題です。メインのサブスクリプション更新に成功しても、これらのproviderが更新済みとは限りません。

特に「設定の更新に成功」と「設定の有効化に成功」は区別してください。前者はファイルをダウンロードして保存しただけの場合がありますが、後者ではコアによる解析、ポートの待ち受け、外部リソースの読み込みも行われます。ログにポートの競合が記録されている場合は、現在のリッスン設定を確認してください。サブスクリプション内容の破損とは限りません。ルール振り分けの構成については、技術リファレンスの設定解説をご覧ください。

原因6:User-Agentが拒否される、またはクライアントによってサーバーの応答が異なる

サブスクリプションAPIによっては、リクエストヘッダーのUser-Agentを読み取り、設定形式を切り替えたり、アクセス方針に合わないリクエストを拒否したりします。そのため、同じURLをブラウザーで開けてもクライアントから更新できない場合は、Cookieの違いだけでなくリクエストヘッダーも原因として考えられます。

典型的な手がかりは、ネットワーク接続に問題がないのに、クライアントで403や特定の拒否メッセージが表示される、またはブラウザーとは異なる内容が返ることです。「ブラウザーで開ける」というだけではUser-Agentが原因とは断定できません。同じネットワーク、同じURLでステータスコードと応答内容を比較してください。

正しい対処の順序

  1. まず提供元にClash Metaまたはmihomo専用のサブスクリプションURLがあるか確認します。最初から全体のリクエストヘッダーを変更しないでください。
  2. 提供元から特定のUser-Agentを指定されている場合は、現在のクライアントがサブスクリプションごとにリクエストヘッダーを設定できるか確認します。
  3. 一度に変更する項目は1つにして、更新後にステータスコードを記録します。ネットワーク、URL、コアを同時に変更すると比較できなくなります。
  4. アクセス認証や権限エラーが続く場合は、機密情報を削除した結果を提供元に伝えて対応を依頼してください。アクセス制限を回避しようとしないでください。

設定内のproxy-providersにあるリクエストヘッダーは、該当するプロキシproviderのリクエストにのみ適用されます。クライアントがメインのサブスクリプションを取得するときのリクエストヘッダーが自動で変わるわけではありません。コアのリクエスト処理と、クライアントのサブスクリプションダウンローダーは別の層です。

クライアントログで特定する:更新を1回行い、手がかりを記録する

クライアントのログ画面を開くかログファイルを開き、まず現在時刻(例:14:32:10)を記録します。次に設定一覧に戻り、対象のサブスクリプションを1回だけ更新してください。メニューの日本語表記はバージョンによって異なる場合があります。重要なのは、クライアント側のダウンロードエラーとコア側の設定エラーの両方を確認することです。接続一覧だけを見て判断しないでください。

  1. まずリクエスト結果を確認:サブスクリプションのドメイン、status、timeout、certificateで検索します。応答を取得できたか確認してから、内容を調べる必要があるか判断してください。
  2. 次に解析エラーを確認:yaml、parse、lineで検索し、エラー行全体と前後約10行の内容を記録します。
  3. 最後に読み込みエラーを確認:プロキシグループの参照、ノードの種類、providerのダウンロード、ポートの待ち受けを確認します。メイン設定と外部providerのURLを区別してください。
  4. 必要な場合に限りログレベルを上げる:現在のバージョンにデバッグログの設定がある場合は、一時的に有効にして1回だけ再現します。確認後は通常のレベルに戻し、接続情報を必要以上に残さないようにしてください。

問題を報告する際は、クライアントとコアのバージョン、OSのバージョン、失敗した時刻、エラーの原文、HTTPステータスコード(表示される場合)、失敗するサブスクリプションが1つだけかどうか、これまでに行った個別の比較を添えてください。応答の抜粋は形式の判定に必要な数行にとどめ、ノードのアドレス、パスワード、トークン、アカウント情報を必ず削除してください。

更新復旧後に確認する4項目

  • サブスクリプションの更新時刻が変わり、ノード数が提供元の説明とおおむね一致している。
  • 対象の設定が選択され、有効化されている。ダウンロードが完了しただけでは不十分です。
  • プロキシグループで想定したノードを選択でき、外部ルールセットのダウンロードエラーが続いていない。
  • 実際にアクセスした際の接続記録で、使用されているルールが想定どおりである。遅延テストに成功しても、すべてのアプリがプロキシ経由になるとは限りません。

「リクエストが成功したか → 応答内容が正しいか → YAMLの構文が正しいか → コアが読み込めるか」の順に確認すると、クライアントを何度も再インストールするより効率的です。まだ問題が残る場合は、よくある質問でシステムプロキシとTUNの対象範囲も確認してください。これらは通信経路に影響しますが、期限切れのURLや設定ミスを自動で修正するものではありません。

Clashクライアントをダウンロード