Shadowrocketのサブスクリプション一覧が空の場合は、まず保存したURLが完全なものか確認し、次にサービス側から解析可能な内容が返されているか、最後に更新が正常に完了したかを確認します。この記事では、ご自身がサービスとサブスクリプションを利用していることを前提に、URLの誤り、リクエストの失敗、応答内容の異常、表示上の問題を切り分けます。既存の項目は残し、確認のたびに条件を一つだけ変更して、取得エラーと接続エラーを混同しないようにしましょう。
まず失敗した段階を切り分ける
サブスクリプションの更新には、保存したURLの読み込み、そのURLへのリクエスト、応答内容の項目への解析という3つの段階があります。一覧が空でも、現在利用可能な項目が表示されていないことしか分からず、プロトコルに対応していない、あるいは接続設定がすべて無効だとは限りません。まずHomeにサブスクリプショングループが残っているか、以前の項目が表示されているか、更新時にどのようなメッセージが出たかを確認します。
要点:接続設定を変える前に応答内容を確認
サブスクリプションから項目が生成されていない場合は、まずURL、リクエスト結果、応答形式を確認します。この段階で個別項目のポート、パスワード、プロトコルを変更しても、サーバーからログインページや空の内容が返される問題は解決できません。
以前の項目が残っているのに更新に失敗する場合は、既存のサブスクリプションを残し、まずエラーメッセージを記録します。項目は表示されているものの接続できない場合は、接続設定とネットワーク経路を確認します。確認すべき対象は異なるため、判断の代わりにサブスクリプションを何度も削除して追加し直すのは避けてください。
サブスクリプションURL全体を確認
ご自身のサービスアカウントページから、Shadowrocket専用のサブスクリプションURLをコピーします。アカウントのトップページ、ヘルプページ、サブスクリプションURLは同じドメインでも、返される内容が異なる場合があります。URLが https:// で始まっていても、必ずしもサブスクリプションとは限りません。パス、クエリパラメーター、サービス側が示す用途を確認してください。
https://example.com/sub?token=xxxx
上記は構造を示す例であり、インポートには使えません。example.com は例示用ドメイン、xxxx は仮の値です。実際のURLに含まれる token は認証に使われることが多いため、サービス側から提供された値を省略せずに使用してください。パラメーター名は異なる場合もあるので、例の名称や内容を自分のURLに置き換えて使わないでください。
-
URL全体をコピー
ご自身のサービスアカウントページにあるサブスクリプションURLのコピー機能を使い、チャットのプレビューやスクリーンショットからの書き写しは避けてください。URLの先頭や末尾に空白、改行、日本語の句読点、説明文が付いていないか確認します。
-
インポートの種類を確認
Home → 右上の「+」→ Type → Subscribe の順に進みます。ここで追加するのはサブスクリプションURLです。Config は設定ファイル用なので、2つの入口を取り違えないでください。
-
URLを確認
URL欄に完全なURLを貼り付け、
?、&、=と各パラメーターの値が保持されているか確認します。URLにパーセントエンコードが含まれる場合は、コピーしたままの状態で使用し、手動でデコードしたり書き換えたりしないでください。 -
保存して更新
保存したらHomeに戻り、対象のサブスクリプションを更新して結果が出るまで待ちます。Homeを下に引いて更新する方法もあります。具体的な更新方法はアプリ内の表示に従ってください。メッセージと項目の変化を記録し、続けて何度も更新するのは避けましょう。
WebページのソースやリッチテキストからコピーしたURLには特に注意してください。パラメーターの区切り文字が & という文字列になっていることがありますが、実際のURLでは通常 & を使います。見た目だけで判断せず、サービスアカウントページのコピー機能を使い直し、アプリに保存されたURLと一文字ずつ照合するのが確実です。
サービス側の応答を確認
URLが正しくても、リクエストに失敗することがあります。ご自身のサービスアカウントページにログインし、サブスクリプションの利用権限、有効期限、URLがリセットされていないかを確認してください。サービス側でURLを再発行した場合、古いURLは無効になっている可能性があります。アプリに保存されたURLは自動で新しいものに切り替わらないため、アカウントページに表示されている現在のURLと照合してください。
以下の英語はHTTPステータスの原文で、サーバー応答の識別に使います。Shadowrocketに同じ文言が必ず表示されるという意味ではありません。実際のメッセージ、応答記録、またはサービス側からの回答で該当ステータスを確認できた場合に限り、その項目に沿って対処してください。ステータスを取得できない場合は、「一覧が空」というだけで具体的なステータスコードを推測しないでください。
エラー:401 Unauthorized
原因と対処:リクエストの認証に失敗しています。パラメーターが不足しているか、認証情報が無効になっている可能性があります。有効なサブスクリプションURLをコピーし直して認証パラメーターを確認し、サブスクリプションの利用権限についてサービス提供元に問い合わせてください。
エラー:403 Forbidden
原因と対処:サーバーがリクエストを拒否しています。理由はサーバー側のアクセス方針によって異なります。発生時刻と使用したネットワークを記録し、制限条件をサービス提供元に確認してください。プロトコルの設定変更で対処しようとしないでください。
エラー:404 Not Found
原因と対処:リクエストしたパスに対応するリソースがサーバーに見つかりません。URLが途中で切れていないか、パスが変更されていないか確認し、サービスアカウントページから完全なURLをコピーし直してください。
エラー:429 Too Many Requests
原因と対処:サーバーがリクエスト頻度を制限しています。連続更新をやめてください。応答に Retry-After が含まれている場合は指定された時間待ち、記載がない場合は更新可能な間隔をサービス提供元に確認します。
HTTPリクエストが成功しても、解析に成功したとは限りません。たとえばサーバーが 200 OK を返しても、本文がログインページ、アカウント案内ページ、メンテナンスページであれば、アプリはサブスクリプションの項目として読み取れません。サブスクリプション用のインターフェースが実際にどのような内容を返しているか、サービス提供元に確認してください。ブラウザーでページが開けることだけを、サブスクリプションが使える証拠と考えないでください。
形式の問題と空の応答を区別
サブスクリプション内容の形式と、各項目が使用するプロトコルは別のものです。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardはプロトコル名であり、それだけでサブスクリプションの応答をインポートできるとは判断できません。アプリが該当プロトコルに対応していても、応答がアプリで認識可能なサブスクリプション形式で、有効な項目を含んでいる必要があります。
| 実際に確認できたこと | 優先して確認する点 | 次に行うこと |
|---|---|---|
| 応答がHTMLのログインページ | アカウントページのURLを誤ってコピーしていないか、ログインページへリダイレクトされていないか | 専用のサブスクリプションURLを取得し直し、ブラウザーでのログイン状態がなくてもインターフェースを利用できるかサービス提供元に確認 |
| 応答本文が空 | アカウントに返却可能な項目があるか、インターフェースに異常がないか | そのアカウントのサブスクリプション内容をサービス提供元に確認し、既存の項目は残す |
| 本文はあるが解析できない | エクスポート形式、エンコード、内容の完全性 | Shadowrocketに適した形式が選択されているか確認 |
| 更新後に一部の項目だけ表示される | サーバーから返された項目数とアプリ内の絞り込み条件 | 検索条件をクリアしてグループを展開し、サービス提供元が返す予定の内容と照合 |
サブスクリプション本文をむやみに再エンコード・デコードしたり、不要に見える改行や区切り文字をすべて削除したりしないでください。元の形式が変わり、サーバー側の問題に加えて新たな解析エラーが発生するおそれがあります。まず編集されていないサブスクリプションURLを取得し直し、サービス提供元に元の応答を確認してもらいましょう。
ルールファイルもノードのサブスクリプションとは異なります。DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINAL はルールの照合とポリシーの選択に使用します。これらのキーワードを含む設定内容でも、Home の Subscribe グループに接続項目が追加されるとは限りません。形式を取り違えている場合は、サービス提供元がサブスクリプションと設定ファイルのどちらを提供しているか確認してください。
更新タイミングを確認
サービス提供元がアカウント権限を変更したり、URLをリセットしたり、サブスクリプション内容を更新したりした場合、新しい結果を取得するにはアプリから再度リクエストする必要があります。URLの保存、更新の開始、解析の完了はそれぞれ別の操作です。完了メッセージと項目の変化を基準に判断してください。一覧に変化がなくても、サーバーから同じ内容が返されている可能性があり、必ずしも失敗とは限りません。
- 保存後に一度確認:URLが保存されたことを確かめてから、対象のサブスクリプションを更新します。リクエストが完了する前に再更新すると、どのリクエストに対するメッセージか分かりにくくなるため、待ってから操作してください。
- 権限変更後に確認:変更が反映されたことをサービス提供元に確認してから更新します。URLもリセットされた場合は先に差し替えてください。古いURLを更新し直すだけでは解決しません。
- ネットワーク切り替え後に再確認:同じURLを使い、利用可能なWi-Fiとモバイル通信でそれぞれ更新して、どちらで完了するか記録します。各回で変更するのはネットワークだけにし、URLやプロトコルは同時に変更しないでください。
- 制限されたら再試行を停止:リクエスト頻度の制限が発生した場合は、サーバーの指示に従って待ちます。すべてのサブスクリプションに共通する固定の更新間隔はありません。連続してタップしても解決にはなりません。
接続時の状態も記録してください。Home → Global Routing の Proxy、Direct、Config、Scene はルーティングの選択に関係します。Settings → On Demand は条件に応じた接続に関係しますが、いずれもサブスクリプション内容の解析機能ではありません。On Demand はテスト時の接続状態に影響することがあるため、実際の状態を確認してから結果を比較してください。サブスクリプションの定期更新スイッチと誤解しないようにしましょう。
要点:同じURLで条件を一つずつ比較
同じサブスクリプションが一方のネットワークでは更新でき、もう一方では失敗する場合は、失敗するネットワークからサブスクリプションのドメインへのアクセス経路を確認します。どちらのネットワークでも応答を取得できるのに解析できない場合は、サービス提供元に出力内容と形式を確認してもらいましょう。
一覧が空に見える場合の表示確認
更新時に明確なエラーが出ていないのにHomeに項目が表示されない場合は、まず表示範囲の問題を除外し、本当に一覧が空なのか確認します。検索欄に文字が残っていないか、サブスクリプショングループが折りたたまれていないか、今表示しているのが更新したグループかを確認してください。名前が似たサブスクリプションが複数あると、別のグループの更新結果と一覧を取り違えやすくなります。
- Homeの検索条件を消して対象のサブスクリプショングループを展開し、名前に一致した結果だけを表示していないか確認します。
- 対象グループに保存されているURLが、先ほどコピーしたものか確認します。確認中に機密パラメーターが写ったスクリーンショットを公開しないでください。
- 更新前後の項目数と表示されたメッセージを記録します。更新時刻が表示されない場合、端末の現在時刻をアプリが報告した更新完了時刻とみなさないでください。
- 今回そのアカウントから返される予定の項目をサービス提供元に確認します。サーバーから空の応答が返されている場合、アプリで更新しても内容が追加されることはありません。
項目が表示されているのに特定の項目だけ接続できない場合は、プロトコル、サーバーアドレス、ポート、認証情報を別途確認します。サブスクリプション取得に使うHTTPSポートは通常443ですが、URLで別のポートを明示することもできます。このポートとサブスクリプション内の各サーバーの接続ポートには必然的な関連はないため、すべての項目を一律に443へ変更しないでください。
問い合わせ前に記録を残す
ここまで確認しても原因を特定できない場合は、再確認できるように情報をまとめてください。問い合わせでは、リクエストがサーバーに届いたか、認証に成功したか、その時点でどのような内容が返されたかをサービス提供元に確認してもらいます。「使えない」とだけ伝えるのではなく、正確な時刻、症状、再現手順を添えることで、同じ質問の繰り返しを減らし、接続の問題をサブスクリプションの問題と取り違えるのを防げます。
- 発生箇所:Home → Subscribe でのサブスクリプション更新か、Config への設定ファイルのインポートかを記録します。両者は分けて説明してください。
- 表示されたメッセージ:実際に表示されたエラーを一字一句記録し、推測したHTTPステータスをアプリの表示内容として扱わないでください。
- 発生日時:サービス提供元がリクエスト記録を照合できるよう、日付、時刻、タイムゾーンを記載します。ここで記録するのは問題の発生時刻であり、アプリの更新日ではありません。
- 比較条件:Wi-Fiかモバイル通信か、実際の接続状態、URLをリセットした直後かどうか、各回で変更した唯一の項目を記録します。
- 結果の変化:更新前後に項目があったか、以前の項目が残ったか、検索条件をクリアしたか、サービス提供元が返すと案内している内容を記録します。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの商用アプリで、主にiPhone/iPadで使用します。入手先はApp Storeのみです。システム要件と購入対象はApp Storeの製品ページに記載された内容をご確認ください。アプリの提供元を確認する際は、デベロッパ名のShadow Launch Technology Limited、公式アプリアイコン、アプリID 932747118を確認してから、サブスクリプションの問題に対処してください。