利用中のサービスとサブスクリプションがある場合は、まずHomeで手動更新し、結果を確認します。必要に応じてSettings → Subscribe → Update on Openを有効にしてください。更新に失敗した場合は、リンクの認証、ネットワークへのリクエスト、内容の解析の順に切り分けます。既存のグループを削除する必要はありません。この記事では、更新方法や自動更新の範囲、現在の設定を残したまま問題を調べる手順を説明します。
サブスクリプションの更新と接続テストの違い
Shadowrocketのサブスクリプション更新では、保存済みのサブスクリプションURLに再度リクエストを送り、返されたサーバー項目をアプリに読み込みます。Shadowrocket本体のアップデートや接続テストとは別の操作です。サーバーに接続できるかどうかは、項目の設定、ネットワーク環境、利用中のサービスの状態にも左右されます。
サブスクリプションURLはリクエスト先、Homeに表示されるサーバー項目は取得結果、Configで選択する設定はルールなどに関わるものです。サーバーのサブスクリプションを更新しても、Configの内容がすべて同期されるわけではありません。また、Global Routingを変更してもサブスクリプションは再取得されません。操作対象を区別すると、問題がどの段階で起きているか判断しやすくなります。
リクエストと解析の両方が完了してから、一覧の変化を確認できます。更新が成功しても名前や件数が変わらない場合、リモート側の内容に変更がなかった可能性があります。古い項目が残っていることだけでは、直前のリクエストが成功したとは判断できません。アプリに表示された更新結果と、利用中のサービスが提供する最新の項目を照らし合わせてください。
Homeでサブスクリプションを手動更新する
最初の切り分けには手動更新がおすすめです。Homeを表示した状態で一連の操作を行い、結果を確認してください。ネットワークの切り替え、ルールの変更、サブスクリプションの更新を何度も交互に行うのは避けましょう。ここでは英語表示の項目名を使って説明します。ボタンの位置やメッセージは、現在のアプリの表示を確認してください。
-
グループを確認する
Homeを開き、利用中のサブスクリプショングループを探します。グループ名と既存の項目を確認し、手動で追加したサーバーをサブスクリプションと取り違えないようにしてください。
-
URLを確認する
対象のサブスクリプションの編集画面を開き、URLを確認します。ドメイン名、パス、クエリパラメータをむやみに書き換えないでください。確認後はHomeに戻ればよく、テストのためにグループを削除する必要はありません。
-
更新を実行する
Homeの一覧の先頭で下に引っ張って指を離すと、サブスクリプションを更新できます。複数のサブスクリプションがある場合は、各グループの結果を個別に確認してください。一つが成功しても、すべて成功したとは限りません。
-
結果を確認する
更新が終わるまで待ち、表示されたメッセージを記録してから、対象グループを開いて項目名と件数を確認します。エラーが表示された場合は、項目と元のメッセージを残したまま、後述の手順で原因を切り分けてください。
-
接続テストは別に行う
更新が完了したら、利用中の有効なサーバーを選んで接続テストを行います。一覧が更新されても接続できない場合は、サーバーの設定、サービスの状態、ネットワーク経路を確認してください。
サブスクリプションをまだ追加していない場合は、Home右上の「+」をタップし、TypeでSubscribeを選択します。自分がすでに利用しているサブスクリプションURLをURL欄に貼り付けて保存してください。新規追加と既存のサブスクリプションの更新は別の操作です。現在の問題を調べるために同じURLを何度も追加する必要はありません。同じ名前のグループが複数できる原因になります。
Update on Openの意味と利用上の注意
Settings → Subscribeを開き、Update on Openを探します。有効にすると、アプリを開いたときにサブスクリプションの更新を試みるため、毎回手動で更新する手間を減らせます。ただし、一定間隔でバックグラウンド更新を行う機能ではありません。また、リモート側の内容が変わるとすぐに一覧へ反映されるわけではありません。
バックグラウンドから戻ったときにリクエストがすぐ実行されるかどうかは、一覧の表示だけでは判断できません。そのときのアプリの実行状態を考慮し、実際の更新結果を確認してください。特定のURLから現時点で取得できるか確認するには、何度もアプリを切り替えるより、Homeで手動更新するほうが結果を確認しやすくなります。
Settings → On Demandでは、オンデマンド接続の動作を設定します。サブスクリプション一覧の取得とは別の機能です。On Demandを有効にしてもUpdate on Openの代わりにはならず、Update on Openを有効にしても接続が自動で確立されるわけではありません。自動更新を調べるときは、まず手動更新が完了することを確認してから、スイッチの状態を確認してください。
- 手動更新に失敗する場合:自動更新のスイッチを何度も切り替えるのではなく、URL、ネットワーク、形式の問題を先に解消してください。
- 手動更新に成功した場合:結果を記録し、次にアプリを開いたときに更新の表示があるか確認してください。
- アプリを開いても一覧が変わらない場合:リモート側の内容に変更があったか確認してください。件数が同じというだけで、自動更新の失敗とは判断できません。
- 同じ問題を再現する必要がある場合:ネットワーク環境と操作の順序を記録し、1回につき変更する条件は一つにしてください。
リンク切れ:URLと認証状態を確認する
サブスクリプションURLには、ユーザーを識別するパラメータが含まれることがあります。コピー漏れ、古いURLの使用、サーバー側での認証情報の再発行などが、取得失敗の原因になります。以下は構造を示す例であり、実際のサービスURLではありません。また、接続には使用できません。
https://example.com/sub?token=xxxx
確認するときは、ドメイン名だけでなくURL全体を照合します。例にある?token=xxxxはクエリパラメータの位置を示すものです。実際のURLではパスやパラメータ名が異なる場合があるため、例に合わせて変更しないでください。コピー時に空白、改行、引用符、チャット文中の句読点などが混入していないか、特に確認しましょう。
| 確認する項目 | 確認できる状態 | 対処方法 |
|---|---|---|
| URL全体 | ドメイン名は正しいが、パスやパラメータが抜けている | 利用中のサブスクリプション管理ページから、URL全体をコピーし直します。 |
| アクセス認証情報 | 古いURLでは失敗し、サーバー側で新しいURLが発行されている | URLを確認したうえで、既存のサブスクリプションのURLを置き換え、手動で更新します。 |
| HTTP 401 | 応答で認証を求められる、または現在の認証情報が拒否される | URLの認証が有効か確認します。認証情報の問題をルールの変更で解決しようとしないでください。 |
| HTTP 403 | サーバーからアクセスを拒否される | 利用中のサービス提供元に、アクセス権限や制限条件を確認します。 |
| HTTP 404 | リクエストしたパスのリソースが見つからない | パスとURLが変更されていないか確認します。すぐにネットワーク障害と判断しないでください。 |
HTTPステータスコードは、メッセージや診断情報に実際に表示された場合に限り、判断材料として使います。「更新に失敗しました」という表示をすべてURLの期限切れと決めつけないでください。ブラウザでウェブサイトのトップページを開けても、サブスクリプションURLが有効とは限りません。トップページとサブスクリプションAPIは別のリソースで、アクセス条件も異なる場合があります。
タイムアウトや接続エラー:リクエストの段階ごとに確認する
ネットワークエラーは、できるだけ原文のまま記録してください。以下はシステムのネットワークエラーに表示されることのある英語の例です。実際の言語や表示形式は、アプリのメッセージを確認してください。毎回同じ文言が表示されるとは限りません。設定を一度に複数変更するより、エラーが発生した段階に沿って確認すると原因を特定しやすくなります。
エラー:The request timed out.
原因と対処:制限時間内にリクエストが完了しませんでした。現在のネットワークまたはリモート側の応答が関係している可能性があります。まずネットワークが利用できることを確認し、別の利用可能なネットワークに切り替えて一度手動更新し、結果を比較してください。
エラー:A server with the specified hostname could not be found.
原因と対処:サブスクリプションのドメイン名を解決できませんでした。まずURL内のドメイン名のつづりを確認し、現在のネットワークで名前解決が正常に行われているか確認してください。宛先のドメイン名を推測したIPアドレスに置き換えないでください。
エラー:Could not connect to the server.
原因と対処:接続先のサーバーへの接続を確立できませんでした。URLのポートと接続先サービスの状態を確認してください。元のURLを保ったまま、利用中のサービス提供元にAPIへアクセスできるか確認します。
たとえば、ポート番号を明示していないHTTPS URLでは、通常443が使われます。URLにポート番号が明記されている場合は、そのポートにリクエストが送られます。ここでのポートはサブスクリプションAPIのもので、サーバー項目の接続ポートと同じとは限りません。サブスクリプション更新を直すために、すべてのサーバーのポートを443へ変更しないでください。
- まず、現在接続しているWi-Fiの認証を完了してください。認証ページしか開けない状態では、サブスクリプションのリクエストが正常に完了しない場合があります。
- Wi-Fiでは失敗してモバイル通信では成功する場合、ネットワーク環境が結果に影響しています。すぐにサブスクリプションを削除せず、元のネットワークを引き続き確認してください。
- 利用可能な2つのネットワークで同じURLへのリクエストが失敗する場合は、エラーの原文と合わせてURLやリモートサービスを確認します。それだけでアプリの不具合とは判断できません。
- 証明書関連のエラーが表示された場合は、端末の日付と時刻を確認し、接続先ドメインの証明書の状態を調べてください。セキュリティチェックを無効にする方法を一般的な解決策として使わないでください。
Global RoutingのProxy、Direct、Config、Sceneはルーティング動作に関わる設定であり、「サブスクリプションを修復する」ボタンではありません。テストのためにルーティングを切り替える必要がある場合は、元の状態を記録し、一度に一つだけ変更して、テスト後に元へ戻してください。サブスクリプションのエラーだけを理由にConfig全体を書き換えると、確認すべき要素が増えてしまいます。
形式不一致・一覧が空の場合:リクエスト成功後に内容を確認する
応答を受信できても、サブスクリプションとして解析できるとは限りません。APIがログインページ、エラー説明、空の内容、または現在のインポート方法に対応しないデータを返す場合があります。ネットワークに接続できても有効な項目が一覧にない場合は、ネットワーク設定をさらに変更するのではなく、応答内容の種類を確認してください。
| 表示内容 | 切り分けるポイント | 次の手順 |
|---|---|---|
| ウェブページの内容が返される | 管理ページのURLをコピーした、またはログインページに転送された | 利用中の管理ページでサブスクリプション用のURLを確認し、管理ページ自体のURLで代用しないでください。 |
| 応答が空 | APIが項目を返していない、または現在の認証状態では利用可能な内容がない | 利用中のサービス提供元に、このURLが現時点で返すべき項目を確認します。 |
| 解析エラーが表示される | 返された形式、項目の設定、プロトコルの内容に互換性がない | そのサブスクリプションがShadowrocketに対応しているか確認し、機密情報を除いたエラーメッセージを記録してください。 |
| 更新後に項目数が減った | リモート側で項目が変更された可能性があり、端末上で消えたとは限らない | 利用中のサービス提供元が現在表示している一覧と照らし合わせ、想定される項目数を確認してください。 |
| 項目は更新されたが接続できない | サブスクリプションを取得できたことと、サーバーが利用可能であることは別の問題 | 選択中の項目の設定、サービスの状態、接続ログを確認してください。 |
返された内容が「エンコードされたテキストのように見える」という理由だけで、手動で切り取ったり、つなぎ合わせたり、再エンコードしたりしないでください。元データが壊れ、その後の調査にも使えなくなる可能性があります。利用中のサービス提供元に問い合わせる場合は、発生時刻、ネットワークの種類、エラーメッセージ、手動で再現するかどうかを伝えれば十分です。サブスクリプションの認証情報全体は、指定された非公開の方法でのみ確認してください。
復旧後の確認:先に更新し、その後接続する
問題を解決した後は、同じ順序で確認します。Homeで手動更新し、グループの項目を確認してから、自分のサーバーを選んで接続テストを行います。最後に必要に応じてUpdate on Openを有効にします。この順序を守ると、サブスクリプションAPIの問題と接続の問題を分けて確認でき、古い一覧を新しい結果と取り違えるのも防げます。
- 更新結果を確認:今回の更新が完了し、新たなエラーが表示されず、対象グループの内容が想定どおりであることを確認します。
- 選択中の項目を確認:リモート側で名前が変更されたり項目が削除されたりする場合があります。以前の選択履歴だけを頼りにせず、現在選択されている項目を確認してください。
- ルール設定を確認:サブスクリプションの更新はConfigの確認に代わるものではありません。接続後の通信動作は、現在の設定も踏まえて判断してください。
- 自動更新を確認:手動更新が安定してから、必要に応じてSettings → Subscribe → Update on Openを有効にするか、そのまま有効にしておきます。
- プライバシー情報を確認:調査用のスクリーンショットを共有する前に、URLのアクセスパラメータやその他の認証情報を隠してください。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの商用アプリです。主にiPhoneとiPadで利用でき、入手先はApp Storeのみです。アプリの購入と、ユーザー自身が利用するサブスクリプションサービスは別々に管理されます。アプリを再購入しても、無効になったサブスクリプションURLは修復できません。システム要件と購入可能な地域はApp Storeのページで確認してください。