この記事は、自分のサブスクリプションURLをすでにお持ちのShadowrocketユーザー向けです。まずHomeで手動更新し、URLから有効な内容を取得できることを確認します。その後、Settings → Subscribeで起動時の自動更新を有効にしてください。更新できない場合は、URL、リクエスト経路、応答形式の順に確認します。サブスクリプションの更新とサーバーの接続テストは別の操作です。問題の切り分けには、既存の設定を残しておくと便利です。
1. サブスクリプションの更新と接続エラーを区別する
サブスクリプションの更新では、登録済みのURLにリクエストを送り、応答をサーバー項目として読み込みます。各サーバーへの接続テストや、Config内のルーティングルールの更新とは異なります。Homeにある項目で接続できても、サブスクリプションURLが有効とは限りません。更新に成功しても、現在のネットワークですべての項目が利用できるとは限りません。
操作を始める前に、現在使える項目と設定を残し、エラーの内容を記録してください。一度タイムアウトしただけで、サブスクリプショングループ全体を削除する必要はありません。古い項目がまだ接続できる場合は、サブスクリプションのリクエストに使える通信経路になることがあります。
- Home:登録済みのサブスクリプションとサーバー項目を確認し、更新を実行して項目の変化を確認します。
- Settings → Subscribe:起動時の更新やプロキシ経由の更新など、サブスクリプションの更新動作を設定します。
- Config:設定とルールを管理します。サーバーのサブスクリプションを更新しても、ここにある設定ファイルが同期されるわけではありません。
- Settings → On Demand:条件に応じた接続動作を設定します。サブスクリプションの定期更新を設定する場所ではありません。
ShadowrocketはAppleプラットフォーム向けの有料クライアントで、入手先はApp Storeのみです。クライアントの買い切り購入と接続サービスの契約は別です。この記事では、すでにお持ちのサブスクリプションの管理方法のみを説明します。サブスクリプションや関連サービスの提供・販売・推奨は行っていません。
2. Homeで登録済みのサブスクリプションを手動更新する
まず手動更新を一度実行し、その後で自動更新を有効にします。こうすれば、リクエスト自体の失敗と、自動更新が実行されない問題を切り分けられます。複数の設定を同時に変更する必要もありません。
-
サブスクリプションを確認する
Homeを開き、更新したいサブスクリプショングループを見つけて、名前と保存済みのURLを確認します。複数のグループがある場合は、どのグループでエラーが出たのかを特定してください。別のグループに項目が追加されても、対象のグループの更新が成功したとは限りません。
-
URLを確認する
URLがすべて含まれているか、特に「?」以降のパラメーターを確認します。コピー時に改行や前後の空白が入ったり、tokenの末尾が欠けたりすると、同じドメインでも異なる応答が返ることがあります。
-
下に引いて更新する
Homeのリストを下に引いてサブスクリプションを更新し、リクエストが完了するまで待ちます。複数のサブスクリプションがある場合は、それぞれの結果を確認してください。連続して更新すると、最初のエラーが分かりにくくなるため避けましょう。
-
更新結果を確認する
エラー表示が消えたか、グループに項目が残っているか、名前・地域・件数に想定した変化があるかを確認します。内容に変化がなくても更新が成功している場合があるため、件数が変わらないことだけで失敗と判断しないでください。
まだサブスクリプションを登録していない場合は、Home右上の「+」→ Type → Subscribeを開き、自分のURLを入力して保存します。既存のサブスクリプションの更新に失敗した場合、再登録は第一の対処法ではありません。先に元のURLが有効か確認すれば、同じURLを指すグループが重複するのを防げます。
https://example.com/sub?token=xxxx
以下は説明用に作成した架空のアドレスで、インポートには使えません。実際のサブスクリプションURLに含まれるtokenは、アクセス認証情報として機能する場合があります。URL全体を公開ログやスクリーンショット、サイトのファイルに掲載しないでください。
3. 起動時の自動更新とリクエスト経路を設定する
Settings → Subscribeを開き、Update on Openを有効にします。アプリを開いたときにサブスクリプションを更新する設定であり、バックグラウンドで常時動作したり、一定の分数ごとにポーリングしたりする機能ではありません。アプリを前面で開いたままにしていて更新が再実行されなくても、すぐに不具合と判断しないでください。すぐに内容を取得したい場合は、Homeで手動更新します。
| 設定・操作 | 動作内容 | 確認する場面 |
|---|---|---|
| Homeで下に引いて更新 | サブスクリプションの更新を手動で実行 | URLと現在のリクエスト経路が使えるか確認 |
| Settings → Subscribe → Update on Open | アプリを開いたときに更新を実行 | 手動更新が成功してから、自動更新の動作を確認 |
| Settings → Subscribe → Update via Proxy | サブスクリプションの更新リクエストにプロキシ経路を使用 | 現在の直接接続ではサブスクリプションURLにアクセスできない場合の比較 |
| Settings → On Demand | 設定した条件に応じて接続を確立 | 接続動作の確認に使用。サブスクリプション更新の設定の代わりにはなりません |
結論:先に通信経路を確認し、その後で自動更新を有効にする
手動更新が成功していない状態でUpdate on Openを有効にしても、同じ失敗リクエストが繰り返されるだけです。まず手動更新を一度成功させてから、アプリを開き直したときの動作を確認してください。
Update via Proxyを有効にする場合は、先に現在のプロキシ接続が実際に使えることを確認してから、手動更新を試してください。サブスクリプションの更新にプロキシが必要なのに、そのプロキシに必要な新しい項目も同じサブスクリプションからしか取得できない場合、依存関係が循環します。その際は使える既存の項目を残すか、別のアクセス可能なネットワークで改めて確認してください。
Global RoutingのConfig、Proxy、Direct、Sceneは接続の処理方式であり、サブスクリプションの更新頻度を設定する項目ではありません。一度の更新エラーを解決するために、これらの方式を切り替えたり、ルールを変更したり、設定を作り直したりしないでください。まずUpdate via Proxyが今回のリクエストに与える影響だけを確認すれば、どの部分が変わったのか分かります。
4. エラー別にURL・ネットワーク・応答内容を確認する
以下は、ネットワークリクエストで表示される可能性があるエラー文やHTTPステータスです。アプリの表示にはURLやエラーの種類などが付加される場合があります。実際に表示されたエラー全体を記録してください。毎回、以下と完全に同じ文言が表示されるとは限りません。
エラー:401 Unauthorized
原因と対処:サーバーがリクエストに含まれる認証情報を受け付けていません。URLのパラメーターがすべて含まれているか確認し、利用中のサブスクリプション提供元に認証情報の状態を確認してください。URLがリセットされている場合は、古いURLの更新を繰り返すのではなく、保存済みのURLを差し替えます。
エラー:403 Forbidden
原因と対処:サーバーが現在のリクエストを拒否しています。アクセス方針、認証情報の状態、リクエスト元の制限などが関係している可能性があります。まず、そのサブスクリプションにアクセスする権限があることを確認し、提供元が案内する登録先と要件を確認してください。403だけでアプリの解析エラーと決めつけないでください。
エラー:404 Not Found
原因と対処:リクエスト先のパスが存在しないか、アクセスできないリソースを隠すためにサーバーがこのステータスを返しています。URLのパスとパラメーター、コピー漏れがないか確認し、アカウント管理ページのURLや、すでに無効になった登録先を使っていないか確認してください。
エラー:The request timed out.
原因と対処:許容時間内にリクエストが完了しませんでした。名前解決、接続確立、応答待ちのいずれかで問題が起きている可能性があります。まずWi-Fiとモバイル通信を切り替えて比較し、利用可能な接続があることを確認したうえでUpdate via Proxyを試してください。
HTTPステータスだけでは確認範囲を絞れますが、サブスクリプションの期限切れを証明することはできません。たとえば403は、接続先のサーバーから返される場合も、中間のアクセス制御から返される場合もあります。確認時は、ネットワークの種類、プロキシの使用有無、別のネットワークで同じURLにアクセスした結果をあわせて記録してください。証明書エラーが発生した場合は、端末の日付と時刻、URLが正しいかを確認し、証明書の検証要件を緩めて対処しないでください。
5. URLを開けるのにインポートできないのはなぜ?
「Webページが開ける」ということは、何らかの応答を受け取ったことを示すだけで、サブスクリプションが返されたとは限りません。ブラウザーにログインページ、アクセス確認ページ、エラーの説明が表示される場合があります。HTTPステータスが200でも、本文がHTMLのことがあります。Shadowrocketが必要とするのは、ブラウザーで読めるWebページではなく、認識可能なサブスクリプション内容です。
- ログインページが返される:クライアントへのインポート用URLではなく、アカウント管理ページをコピーしていないか確認してください。ブラウザーでログイン済みでも、アプリのリクエストに同じセッション情報が含まれるとは限りません。
- 認証ページが返される:ページ上の操作を完了した後にブラウザーからアクセスできても、サブスクリプションのリクエストが自動的に認証を通過するとは限りません。利用中のサブスクリプション提供元に、クライアント用の登録先を確認してください。
- 空の内容が返される:アカウントとサブスクリプションの状態、有効な項目があるかを確認し、実際に空の応答なのか、ページの読み込みが完了していないのかを見分けてください。
- 応答形式が一致しない:Shadowrocketで利用できるサブスクリプション内容を取得しているか確認してください。ルーティング設定全体、一般的な説明文、別の用途のデータをSubscribeにそのまま入力しないでください。
プロトコル名とサブスクリプションの形式は別のものです。内容にShadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardなどの名称が含まれていても、応答全体が現在のインポート画面で認識されるとは限りません。実際の応答構造やフィールドが要件に合っているか確認してください。
サブスクリプションURLを固定して、まず2種類のネットワークで比較します。次にネットワークを固定し、Update via Proxyの使用有無を比較します。結果を記録してから次の項目を変更してください。URLの変更、グループの削除、DNSの変更、ルールの書き換えを同時に行うと、どの変更が影響したのか分からなくなります。
6. 自動更新と更新結果に関するよくある質問
手動更新は成功したのに、アプリを開いても変化が見られないのはなぜ?
Settings → SubscribeでUpdate on Openが有効になっていることを確認し、アプリをいったん終了してから開き直して、更新結果を確認してください。サーバーリストに変化がなくても、リクエストが実行されている場合があります。リモートの内容が同じなら、更新後も名前や件数が変わらないことがあります。
サブスクリプションの更新がタイムアウトしたら、先に接続スイッチを入れるべき?
必ずしもそうではありません。URLに直接アクセスできる場合は、まずそのまま更新してください。プロキシ経由が必要な場合に限り、先に使える接続を確立し、Settings → SubscribeでUpdate via Proxyを確認します。接続スイッチがオンでも、選択中の項目が実際に使えるとは限りません。
更新に成功したのに、Webページが開かないのはなぜ?
まずHomeで選択中のサーバーと接続状態を確認し、次にGlobal RoutingとConfigを確認してください。サブスクリプションの更新で行われるのはリストの取得と解析です。Webページへのアクセスは、選択中のサーバー、DNS、ルールにも左右されます。その後の接続エラーをサブスクリプション更新の失敗として扱わないでください。
On Demandを有効にすると、サブスクリプションも定期更新される?
On Demandは接続を開始する条件を処理する機能で、一定間隔でサブスクリプションを更新するものではありません。アプリを開いたときに更新するには、Settings → Subscribe → Update on Openを確認します。すぐに更新したい場合は、Homeに戻って手動更新してください。
確認しても解決しない場合、どの情報を残せばよい?
エラーの全文、発生時刻、Wi-Fiかモバイル通信か、Update via Proxyの状態、古い項目が接続できるかを記録してください。情報を外部に共有する前に、URL全体、token、アカウント名、パスワードを隠してください。リクエストの段階を特定するにはこれらの情報で十分です。アクセス認証情報を公開する必要はありません。
復旧したら、確認済みの更新経路を一つ残しておけば十分です。初回インポートと認証の手順は使い方ガイドをご覧ください。サブスクリプションと設定の管理範囲の違いはサブスクリプションマニュアルで確認できます。サブスクリプションの更新操作によってアプリの購入状態が変わることはありません。システム要件とデバイスの互換性はApp Storeの掲載内容をご確認ください。