この記事は、利用中のサービスとサブスクリプションURLがあり、Shadowrocketでサーバー一覧を更新したい方を対象としています。まずHomeで手動更新して結果を確認し、その後、アプリ起動時の更新を有効にします。失敗した場合は、URL、通信、応答内容、解析結果の順に確認し、サブスクリプションの更新と接続の問題を切り分けましょう。
サブスクリプション・アプリ・構成ファイルの更新を区別する
サブスクリプションの更新では、保存済みのURLに再度リクエストを送り、返された内容をHomeのサーバー項目として解析します。サービス提供元がサーバーのアドレス、ポート、認証情報を変更した場合は、新しいサブスクリプション情報を取得する必要があります。VPNを切断して再接続するだけでは、サブスクリプションは更新されません。
アプリの更新はApp Storeから行い、Shadowrocket本体を更新します。Configの構成ファイルにはルールやDNSなどの設定が含まれ、そのリモート更新はHomeのサーバーサブスクリプション更新とは別の操作です。確認を始める前に、どれを更新したいのか整理しましょう。
Homeでサブスクリプションを手動更新する
初めて追加する場合は、サービス提供元から案内されたサブスクリプションURLを使います。アカウントのログインページ、注文ページ、Webページの共有URLではありません。すでに登録済みの場合は、比較用に以前の状態を残すため、更新のたびに削除して追加し直すのは避けてください。
-
サブスクリプションを確認する
Homeを開き、更新するサブスクリプショングループを見つけ、自分が利用しているサービスのものか確認します。まだ追加していない場合は、Home右上の「+」から追加画面を開き、TypeでSubscribeを選択します。自分のサブスクリプションURLをURL欄に入力して保存してください。
-
更新前の状態を記録する
対象グループの現在の項目数と、既知のサーバー1件の名前またはポートを記録します。完全なURL、パスワード、認証パラメーターをスクリーンショットに含めないでください。公開用の比較には必要ありません。
-
下に引いて更新する
Homeに戻り、一覧を下に引いてサブスクリプションを更新し、リクエストが完了するまで待ちます。複数のサブスクリプションがある場合は、グループごとに結果を確認してください。1つのグループが成功しても、すべて成功したとは限りません。
-
更新結果を確認する
エラー表示の有無、対象グループに項目が残っているか、サービス提供元が告知した変更が反映されているかを確認します。項目数が変わらなくても、更新に失敗したとは限りません。返された内容では、アドレス、ポート、認証情報だけが変更されている場合もあります。
-
接続を個別に確認する
使用するサーバーを選択してから、接続とアクセスをテストします。更新成功が示すのは、サブスクリプションの取得と解析が完了したことだけです。返されたすべてのサーバーへの接続を保証するものではありません。
以下はサブスクリプションURLの構造を確認するための架空の例です。インポートせず、自分のURLの代わりに使用しないでください。実際のリンクでは、クエリパラメーターが認証に使われることがあります。コピーする際は全体を保持し、空白、改行、日本語の句読点が混入しないようにしてください。
https://example.com/sub?token=xxxx
アプリ起動時の自動更新を有効にする
手動更新が成功したら、Settings → Subscribeを開き、Update On Openを見つけて有効にします。画面の言語やアプリのバージョンによって表示や大文字・小文字が異なる場合があります。現在のサブスクリプション設定画面で「アプリ起動時に更新」に相当する項目を確認してください。
- 有効にする前に:Homeで一度手動更新し、URLが有効で、現在のネットワークからサブスクリプション情報を取得できることを確認します。
- 有効にした後:Shadowrocketを再度開き、サブスクリプションのリクエスト結果を確認してから、Homeの対象グループを確認します。アプリが起動しただけで更新完了と判断しないでください。
- 確認できる範囲:起動時の更新はアプリ起動をきっかけに実行される機能です。アプリを閉じた後も一定間隔で更新し続けるわけではなく、前面に戻るたびに新しいリクエストが行われるとは限りません。
- 失敗した場合:自動更新に失敗したら、Homeに戻って手動更新を一度実行し、エラーを記録します。自動実行では、無効な認証パラメーターやアクセスできないサブスクリプションドメインは修復されません。
リクエストの流れから更新失敗の箇所を特定する
更新には少なくとも以下の手順があります。まずどの段階で失敗したかを特定してから、該当する設定を変更しましょう。DNS、サーバー、構成ファイルを一度に変更するより、原因を確認しやすくなります。
| 確認された状況 | 優先して確認する項目 | 次の手順 |
|---|---|---|
| すぐに401または403が返る | 認証パラメーター、URLの有効性、アクセス制限 | 現在のサブスクリプションURLとアクセス条件をサービス提供元に確認する |
| 待機後にタイムアウトする | 現在のネットワーク、ドメインの名前解決、サーバーの応答 | URLは変更せず、利用可能な別のネットワークに切り替えて再試行する |
| 成功応答が返るが解析できない | 応答がログインページ、認証ページ、または非対応の内容ではないか | クライアントにインポートできるサブスクリプションURLか確認する |
| 更新は完了したが項目に変化がない | サービス提供元が実際に内容を変更したか | 項目数だけでなく、既知の名前、アドレス、ポートを比較する |
| 更新は成功したが接続できない | 選択中のサーバー、認証情報、接続経路 | 接続の問題を調べ、サブスクリプションの更新を繰り返さない |
まとめ:取得の失敗と接続の失敗を区別する
一覧の解析に成功している場合は、選択中のサーバーと接続ログを確認します。サブスクリプションの応答を取得できていない場合は、まずURLとネットワークを確認してください。異なる段階の問題を同じ「更新失敗」として扱わないようにしましょう。
よくあるエラーと対処の順序
以下はネットワークリクエストで表示されることのある原文またはHTTPステータスの表現です。表示内容はシステム言語、サーバー、アプリの画面によって異なる場合があります。「使えない」とだけ記録せず、実際に表示されたエラー全文を残してください。
HTTP 401 Unauthorized
原因:サーバーが今回のリクエストの認証情報を受け付けていません。tokenの有効期限切れ、パラメーターの不足、古いURLのコピーなどが考えられます。
対処法:利用中のサービスのアカウントで有効なサブスクリプションURLを確認し、元のURLを完全に置き換えてから手動更新します。認証パラメーターを推測したり、自分で組み立てたりしないでください。
HTTP 403 Forbidden
原因:サーバーが今回のアクセスを拒否しています。アカウントの状態、接続元ネットワークの制限、サーバー側のアクセス方針などが考えられます。ステータスコードだけでURLの期限切れとは判断できません。
対処法:発生時刻、接続中のネットワークの種類、ステータスコードを記録し、利用中のサービス提供元に制限条件を確認します。短時間に何度も再試行しないでください。
HTTP 404 Not Found
原因:サブスクリプションのパスが存在しません。URLの途中欠落、サブスクリプション提供先の移転、誤ったパスのコピーなどがよくある原因です。
対処法:完全なURLのドメイン、パス、クエリパラメーターを確認します。アカウント画面に現在表示されているURLを使ってから更新してください。
The request timed out.
原因:制限時間内にリクエストが完了しませんでした。接続の確立、ネットワーク通信、サーバーの応答待ちのいずれかで発生する可能性があります。
対処法:まずデバイスがインターネットに接続できることを確認し、Wi-Fiとモバイル通信を一度ずつ比較します。一方のネットワークだけで失敗する場合は、そのネットワークのアクセス条件を優先して確認してください。
URLを開けるのに利用可能なサーバー項目が表示されない
ブラウザーでWebページが表示されても、何らかの応答を取得できたことしか確認できず、内容がサブスクリプションとは限りません。ログインページ、アカウント残高ページ、アクセス認証ページもHTTP 200を返す場合がありますが、サーバー一覧としては使用できません。
- URLの入手元を確認:アカウント内でサブスクリプションとして明示されているリンクをコピーします。ブラウザーのアドレスバーに表示された管理ページのURLではありません。
- 応答内容の種類を確認:HTMLページ、ログイン案内、エラーを示すJSONが返る場合は、まずサーバー側のアクセス問題を解決します。サーバーのポートを変更しても解決しません。
- 形式の対応状況を確認:そのリンクがShadowrocketで読み込めるサブスクリプション形式か、利用中のサービス提供元に確認します。文字コードが正しいことと、プロトコルの項目が揃っていることは別の要件です。
- 置き換え後の状態を確認:URLを変更しても項目が表示されない場合は、問題が特定できるまで元のグループとエラー記録を残してください。既存の情報をすべて削除するのは避けましょう。
Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardはプロトコル名であり、通常のWebページをサブスクリプションに変換するスイッチではありません。ポートは応答内容またはサービス提供元が案内する値を使用してください。サブスクリプションURLで一般的に使われるHTTPSのポートが443でも、含まれるすべてのサーバーが443を使用するとは限りません。
更新後の接続確認と問題の記録
更新後は、Homeで想定したサーバーが選択されていることを確認し、Global Routingも確認します。Proxy、Direct、Config、Sceneはそれぞれ通信の処理方法が異なり、現在の設定がアクセス確認の結果に影響します。これらはサブスクリプション更新ボタンではありません。
- 選択中の項目を確認:サービス提供元によって項目が削除または改名された場合は、現在も存在する項目を選び直します。以前の選択のまま判断しないでください。
- ルーティング設定を確認:本来の用途に合わせてGlobal Routingを確認します。Configを使用している場合は、Configで現在有効な構成ファイルを確認してください。ルールによってテスト通信が選択中のプロキシではなくDIRECTに振り分けられることがあります。
- 実際のアクセスを確認:接続後、普段利用していてアクセスが許可されている宛先にアクセスし、接続ログと合わせて結果を確認します。遅延テストに応答があっても、すべての通信が正常とは限りません。
- 必要最小限の情報を記録:更新時刻、エラーの原文、ネットワークの種類、対象グループの変更有無、接続確認の実施状況を記録します。再現しやすくするため、一度に変更する条件は1つにしてください。