自分で契約したサービスのサブスクリプションを利用し、Homeのサーバー一覧を更新したい方向けです。まず手動更新でリンクが使えることを確認し、その後、アプリ起動時の自動更新を有効にします。更新に失敗した場合は、リンク、応答内容、ネットワーク、端末の時刻を順に確認してください。最後に「サブスクリプションの更新」と「サーバーへの接続」を別々に検証し、混同しないようにしましょう。
1. サブスクリプション更新・Config更新・接続の違い
ShadowrocketはAppleプラットフォーム向けの有料クライアントで、入手先はApp Storeのみです。開発者はShadow Launch Technology Limitedです。主にiPhoneとiPadで利用でき、その他のAppleデバイスとの互換性やシステム要件、購入条件はApp Storeの掲載内容をご確認ください。この記事では、利用者がすでに持っているサブスクリプションをアプリで読み込む方法を説明します。サービスの選び方は扱いません。
HomeのSubscribeには、リモートのサブスクリプションURLが保存されています。更新時にはアプリがURLへリクエストを送り、応答内容を解析して、該当するサーバーグループを更新します。Config内の構成ファイルはルールやポリシーなどを管理するものです。Homeのサブスクリプションを更新しても、Configファイルの再取得やGlobal Routingの変更にはなりません。
判断のポイント:更新対象を確認する
サーバーのアドレスや数が変わった場合は、Homeのサブスクリプションを確認します。Webサイトへの振り分けを調整したい場合は、ConfigとGlobal Routingを確認してください。サブスクリプションのリクエストエラーを直すために、DOMAIN-SUFFIXやFINALのルールを先に変更する必要はありません。
2. 手動更新:Homeから登録済みのサブスクリプションを更新
自動更新を確認する前に、まず手動更新を一度実行し、結果を確認しましょう。サブスクリプションをまだ追加していない場合は、Home右上の「+」からAdd Serverを開き、TypeをSubscribeに設定して、自分のサブスクリプションURLを入力して保存します。登録済みのものを毎回追加し直す必要はありません。重複して追加すると、名前の似たグループが複数でき、どれを使っているのか分かりにくくなります。
-
サブスクリプションを確認
Homeを開き、該当するサブスクリプショングループを探します。URLを確認するには、Subscribeの項目を開いて編集情報を表示し、サービスの管理画面に記載されたURLと一致しているか確認します。アカウントのログインページや説明ページのURLではありません。
-
下に引いて更新
Homeのサーバー一覧を下に引き、サブスクリプションを更新します。複数登録している場合は、どのグループの更新結果か確認してください。エラーが表示されたら内容を記録し、更新アニメーションが終わっただけで成功と判断しないようにしましょう。
-
結果を確認
リクエストが完了したら、該当グループのサーバー名と数を確認します。サービス側の内容に変更がなければ、更新が成功しても表示上の増減がない場合があります。変更されるはずなのに反映されていない場合は、サブスクリプションURLとサービス側の内容を再確認してください。
-
接続を確認
一覧が正常に読み込まれたことを確認したら、自分に利用権限のあるサーバーを選び、接続をテストします。更新成功が示すのは、サブスクリプションの取得と解析ができたことです。すべてのサーバーに接続できることを保証するものではありません。
更新によってグループ内の項目が置き換わる場合があります。以前選択していた項目が削除、改名されたり、パラメーターが変更されたりした場合は、現在の選択内容を確認し直してください。サブスクリプションの項目を手動で変更しても、長期保存用のバックアップにはなりません。次回の更新時に、リモートから取得した内容でローカルの変更が上書きされることがあります。
3. 起動時の自動更新:設定場所と実行タイミング
Settings → Subscribeを開き、Update On Openを有効にすると、アプリ起動時にサブスクリプションが自動更新されます。アプリのバージョンや表示言語によって、大文字・小文字や項目の並びが異なる場合があります。Subscribeの設定内で「起動時に更新」するスイッチを確認してください。On Demandにある設定ではありません。
- 有効にする前:まずHomeから手動更新し、URL、アクセス権限、コンテンツ形式に問題がないことを確認します。
- 有効にした後:次回のアプリ起動時に更新結果を確認します。別の画面からHomeに戻っただけでは、新たに起動したときの更新が実行されたとは限りません。
- サブスクリプションが複数ある場合:各グループの更新結果を個別に確認します。1つのグループが成功しても、ほかのサブスクリプションが更新されたとは限りません。
- エラーが出た場合:Homeに戻って手動で再試行し、表示されるメッセージを確認しましょう。自動更新のスイッチを何度も切り替えるより、原因を特定しやすくなります。
Update On Openは、アプリを閉じた後も一定間隔で継続的にデータを取得する機能ではありません。また、端末がオフラインのときに更新される保証もありません。ネットワークリクエストには、ドメイン名の解決、接続の確立、TLS検証、コンテンツの解析が必要です。どの段階で失敗しても、一覧が古いままになったり、更新エラーが表示されたりすることがあります。
4. リンク切れ・形式不一致:応答内容を確認
サブスクリプションURLには、アクセス権限を識別するためのパラメーターが含まれていることがあります。コピー時にクエリ文字列が欠ける、末尾に空白が入る、改行まで貼り付ける、リセット済みのURLを使い続けるといった場合、更新に失敗することがあります。以下は構造を示す例であり、コンテンツの取得には使えません。
https://example.com/sub?token=xxxx
URLの?以降にあるパラメーターもアドレスの一部です。ドメイン名とパスだけを残さないでください。サブスクリプションURLには認証情報が含まれるため、公開コメントやスクリーンショット、オンライン解析ページに載せないようにしましょう。サポートを求める場合は、tokenを伏せたURLの構造、エラーメッセージ、発生条件だけを伝えてください。
| 確認できた結果 | 意味と次の対応 |
|---|---|
| HTTP 401 または 403 | リクエストが認証されていないか、拒否されています。サービスアカウントの状態、URLがリセットされていないか、アクセス制限を確認してください。ステータスコードだけでは原因を特定できません。 |
| HTTP 404 または 410 | リソースが見つからないか、削除されています。自分のサービス管理画面に戻り、現在のサブスクリプションURLを確認してください。新しいパスを推測して入力しないでください。 |
| HTTP 200だが、応答がHTML | リクエストが成功しても、サブスクリプションが有効とは限りません。ログインページ、認証ページ、エラー説明ページが返されている場合があり、サーバー一覧として解析できません。 |
| 応答が空、またはデータを認識できない | 選択したサブスクリプションの出力形式がShadowrocketに対応しているか確認し、実際に返される内容をサービス提供元に問い合わせてください。 |
アプリに解析できないと表示された場合は、取得したものがサーバーのサブスクリプションであり、別形式の完全な構成ファイルではないことを確認してください。拡張子だけで形式を判断したり、内容を別の拡張子に変更したりしないでください。プロトコルごとに必要なパラメーターは異なります。認証情報や通信設定が不足していると、名前が表示されても接続できないことがあります。
5. 通信タイムアウト・端末の時刻ずれ:エラーメッセージから確認
エラーはアプリから表示される場合も、Appleのネットワークフレームワークから返される場合もあります。以下はよくあるシステムエラーの原文です。実際の表示言語や前後の文言は異なる場合があります。原文またはエラーコードを記録して、項目ごとに確認してください。すべての失敗をサブスクリプションの期限切れと決めつけないようにしましょう。
エラー:The request timed out.
原因:許容時間内にリクエストが完了しませんでした。現在のネットワーク、接続経路、接続先からの応答遅延などが考えられます。
対処法:通常のインターネット接続を確認したうえで、信頼できるWi-Fiとモバイル通信をそれぞれ使い、手動更新を試します。特定のネットワークだけで失敗する場合は、そのネットワークの制限を優先して確認してください。
エラー:A server with the specified hostname could not be found.
原因:サブスクリプションのドメイン名を解決できませんでした。入力ミス、ドメインの失効、現在のDNS名前解決の問題などが考えられます。
対処法:URLのホスト名が正しく入力されているか確認し、利用可能な別のネットワークに切り替えて再試行してください。推測したIPアドレスでHTTPSのドメイン名を置き換えないでください。
エラー:The Internet connection appears to be offline.
原因:システムがインターネットに接続できないと判断したか、アプリから現在のネットワークを利用できませんでした。
対処法:Wi-Fiでネットワークへのログインが必要か確認します。システム設定でShadowrocketのモバイルデータ通信が許可されていることを確認し、Homeに戻って更新してください。
エラー:The certificate for this server is invalid.
原因:TLS証明書の検証に失敗しました。端末の時刻ずれ、証明書の期限切れ、ホスト名の不一致、ネットワークによる通信の妨害などが考えられます。
対処法:まずシステムの日付とタイムゾーンを確認してください。時刻が正しいのにエラーが続く場合は、自分のサービス提供元に問い合わせます。証明書検証を無効にして問題を回避しないでください。
iPhoneまたはiPadのシステム設定でSettings → General → Date & Timeを開き、Set Automaticallyが有効か、日付・時刻・タイムゾーンが正しいか確認します。証明書には有効期間があるため、端末の時計が大きくずれていると、正しい証明書でも未発効または期限切れと判定されることがあります。時刻を修正したら、手動更新をもう一度実行してください。
- ドメイン名の解決エラーは
NSURLErrorDomain -1003、タイムアウトは-1001、オフラインは-1009に対応することがあります。エラーコードは分類の目安であり、根本原因を直接示すものではありません。 - サブスクリプションURLが標準のHTTPSを使う場合、通常の接続ポートは
443です。サブスクリプション内の各サーバーも同じポートを使うという意味ではないため、サーバーのポートを一律に変更しないでください。 - 一度に変更する条件は、ネットワークやシステム時刻など1つだけにしてから再確認します。複数の設定を同時に変更すると、どの変更が有効だったのか判断できなくなります。
6. 更新に成功しても接続できない場合:別々に確認
サブスクリプションの更新と実際の接続では、確認する通信が異なります。サブスクリプションURLにアクセスできても、一覧内のサーバーには接続できない場合があります。サーバーに接続できても、現在のルーティング設定が想定どおり使われていない場合もあります。まず選択中のサーバーを確認し、次にGlobal RoutingとConfigを確認してください。すぐにサブスクリプションをすべて削除する必要はありません。
- Global Routing → Config:現在有効な構成ルールに従って通信を処理します。Configで想定したファイルが選択されていることと、ルールの順序を確認してください。
- Global Routing → Proxy:プロキシ経由のルーティングに使用します。無効になったサブスクリプションの認証情報を補ったり、サーバーのパラメーターを修復したりする機能ではありません。
- Global Routing → Direct:直接接続するルーティングに使用します。この状態でWebサイトにアクセスできても、サブスクリプション内のサーバーが検証済みとは限りません。
- Global Routing → Scene:登録済みのSceneの設定内容に沿って確認します。サブスクリプションの更新スイッチとして扱わないでください。
たとえば、構成にDOMAIN-SUFFIX,example.com,PROXYと末尾のFINAL,DIRECTがある場合、指定したドメインにルールが適用されるかどうかで通信の出口が変わります。サブスクリプションを更新しても、これらのルールは自動では書き換わりません。接続テストではHomeに新しい名前が表示されたかだけでなく、アクセス先に想定したポリシーが適用されているかも確認してください。
まとめ:エラーの記録を残してから再登録を判断
まず更新時のメッセージ、失敗した時刻、使用したネットワーク、影響を受けたグループを記録し、URLと応答内容を確認します。元の項目に誤った情報が保存されている、またはURLの差し替えが必要だと確認できた場合に限り、サブスクリプションを登録し直してください。アプリを再インストールしても、接続先からの拒否、リンク切れ、証明書エラーは通常解決しません。
7. 問い合わせに必要な情報と日常の管理
自分のサービス提供元に問い合わせる際は、「更新できない」とだけ伝えるのではなく、再現可能な状況を説明します。リクエスト段階と接続段階のどちらに問題があるか分かる情報を用意し、サブスクリプションの認証情報は保護してください。問題が特定される前に一覧を消去したり、設定をリセットしたり、構成ファイルを削除したりせず、必要な旧グループの情報を残しておきましょう。
- リクエスト結果:エラーメッセージ全文、エラーコード、またはHTTPステータスコードを記録します。ポップアップのタイトルだけを切り取らないでください。
- 操作した場所:Homeで下に引いて更新した際に失敗したのか、アプリ起動時の自動更新で失敗したのかを記録します。
- 影響範囲:失敗したのが1つのサブスクリプションかすべてか、以前からあるサーバーには接続できるかを確認します。
- 環境の違い:Wi-Fiとモバイル通信で結果に違いがあるか、端末の時刻が正しいかを確認します。
- プライバシー保護:サブスクリプションのtoken、アカウント情報、認証パラメーターを隠し、URL全体を公開しないでください。
普段はUpdate On Openを有効にし、サービス提供元からURLやサーバー情報の変更通知があった際に手動更新を行うとよいでしょう。自動更新は繰り返し操作を減らす機能であり、利用可能性を保証するものではありません。該当グループの更新結果、現在の選択内容、実際の接続テストで最終確認してください。