2026年8月21日 · プロトコル解説 · 約10分

ss://・vmess://・vless://・trojan://の読み方|Shadowrocketの共有リンクとサブスクリプションURLの違い

ss://・vmess://・vless://・trojan://の構造と項目を解説。Shadowrocketで共有リンクとサブスクリプションURLを読み込む方法、更新方法の違いを紹介します。

この記事の要点

まず「接続パラメータ」と「リストを取得するURL」を区別しましょう。ss://、vmess://、vless://、trojan://は通常、1つの接続に必要な情報を含みます。一方、サブスクリプションURLはリストの取得や更新に使います。ここでは、すでにご自身のサービス設定をお持ちの方向けに、項目やエンコード方式、Shadowrocketでの読み込み先、更新できる範囲を解説します。例は実際の接続には使用できないサンプルデータであり、サービスを提供するものではありません。

まず接頭辞を確認:プロトコルリンクとサブスクリプションURLは別物

Shadowrocketでリンクを受け取ったら、接続そのものを記述したものか、リモートから内容を取得する方法を示すものかを確認します。プロトコルリンクには通常、サーバーアドレス、ポート、認証情報、通信オプションが1つのテキストに含まれます。サブスクリプションURLは通常HTTPSで、アプリがURLにアクセスしてから項目のリストを取得します。どちらもQRコードやクリップボードで共有できるため、スキャンして取得したというだけでは種類を判断できません。

4種類
この記事で扱う接頭辞:ss / vmess / vless / trojan
8388
以下のShadowsocksのポート番号は例であり、固定値ではありません
443
以下のTLSのポート番号は例であり、プロトコルの判別には使えません

サブスクリプションURLは、次のような形式です。tokenはクエリパラメータ名で、アクセス認証に使われる場合があります。実際のURLのパスやパラメータは、お使いのサービスによって異なります。HTTPSで始まっていても、単なるWebページの場合があります。アプリが対応する形式の内容が返されて初めて、サブスクリプションとして解析できます。

https://example.com/sub?token=xxxx

ss://:暗号化方式を確認してから、パスワードとアドレスを確認

ss://はShadowsocksを示します。一般的なSIP002形式では、「暗号化方式:パスワード」をエンコードして@の前に置き、その後にサーバーアドレスとポートを記述します。次のサンプルリンクでは、認証情報の部分をデコードするとaes-128-gcm:passwordとなり、サーバーはサンプル用ドメイン、ポートは8388です。

ss://[email protected]:8388#SS-demo
位置意味確認方法
ss://Shadowsocks共有形式の識別子読み込み後にTypeを確認
@より前暗号化方式とパスワードのエンコード済みデータ方式とパスワードがサーバー側の設定と一致していること
edge.example.com:8388サーバーアドレスとポートポートをアドレス欄に入力しない
#SS-demo表示名表示名を変更しても、通常は接続パラメータに影響しません

過去の形式には、さらに多くの内容をまとめてBase64エンコードするものもあります。明文の@があるかどうかだけで判別しないでください。プラグインを使うリンクには、pluginクエリパラメータが含まれる場合もあります。コピー時にパラメータが欠けると、サーバー、ポート、パスワードが揃っていても接続情報は完全とは限りません。

vmess://:一般的なペイロードはエンコード済みJSON

vmess://はVMessを示します。一般的な共有形式では、接頭辞の後にBase64エンコードされたJSONが続き、「ユーザー名@ホスト」の形式にはなりません。そのため、サーバーアドレスが平文で見えなくても、リンクが空とは限りません。以下はデコード後のサンプルペイロードで、読み込みに使える完全なリンクではありません。

{
  "v": "2",
  "ps": "VMess-demo",
  "add": "edge.example.com",
  "port": "443",
  "id": "00000000-0000-4000-8000-000000000000",
  "aid": "0",
  "scy": "auto",
  "net": "ws",
  "type": "none",
  "host": "edge.example.com",
  "path": "/demo",
  "tls": "tls",
  "sni": "edge.example.com"
}

読み込みに成功したことが示すのは、アプリがデータを認識したということだけです。ネットワークに接続できること、認証情報が有効であること、TLSパラメータが一致していることを意味しません。「リストには項目があるのに接続できない」場合は、同じリンクを何度も読み込まず、項目の編集画面で各設定を確認してください。

vless://とtrojan://:似た形式でも認証項目は異なる

どちらのリンクも「認証情報@サーバー:ポート」という形式が一般的で、クエリパラメータで通信設定を指定します。VLESSの認証情報は通常UUID、Trojanではパスワードです。以下の2つの例は構造の確認用で、サンプルのUUID、パスワード、ドメインはいずれも実際のサービスには対応していません。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=edge.example.com&path=%2Fdemo&sni=edge.example.com#VLESS-demo

trojan://[email protected]:443?security=tls&sni=edge.example.com#Trojan-demo
項目VLESSTrojan
@より前通常はUUIDパスワード
security=tlsTLSを使用することを示す一般的なパラメータ一般的な共有形式で使われるTLSパラメータ
type=ws例ではWebSocketを使用追加の通信方式を使うかどうかは、実際のリンクで確認
sniTLSで使用するサーバー名TLSで使用するサーバー名
#より後表示名表示名

encryption=noneを「接続全体に保護がない」と解釈しないでください。これはVLESS自体の項目に関するもので、外側でTLSを使用するかどうかはセキュリティ設定を別途確認します。反対に、ポートが443だからといってTLSが正しく有効になっているとは限りません。ポートは接続先の一要素にすぎません。

クエリパラメータの%2Fは、スラッシュをパーセントエンコードしたものです。パスワード、表示名、パスに含まれる特殊文字もエンコードされる場合があります。リンク全体を何度もデコードしてからコピーしないでください。パスワードに含まれる@、#、&が、構造を区切る文字として誤認されるおそれがあります。拡張パラメータの仕様は共有形式によって異なるため、読み込み後もアプリに保存された項目を確認してください。

Shadowrocketで読み込み先と更新方法を選ぶ

まず手元のデータの種類を確認してから、読み込み先を選びます。Homeはサーバーやサブスクリプション項目の管理、Configは設定ファイル、Settingsはアプリの設定に使います。HTTPSのURLだからといってConfigにルール設定として入力したり、単一のプロトコルリンクを自動更新できるサブスクリプションURLとして扱ったりしないでください。

Subscribe:既存のサブスクリプションを管理

リスト更新

リストを継続的に同期する既存のサブスクリプションは、Homeで「+」をタップしてAdd Serverを開き、TypeをSubscribeに設定します。サブスクリプションURLをすべて入力して保存してください。以降はサブスクリプションを更新すると、リモートからリストを再取得できます。

適しているケース:サブスクリプションURLをすでに持っていて、リストの変更を同期したい

クリップボードまたはQRコード:単一のパラメータを読み込む

完全なプロトコルリンクをコピーしてアプリに戻ると、クリップボードの内容を認識する案内から追加できます。HomeのQRコード読み取り機能も利用できます。システムからペーストの許可を求められた場合は、今回の読み取りを許可してください。読み込み後はTypeとサーバー項目を確認します。

適しているケース:完全な共有リンク、または対応するQRコードを持っている

Add Server:項目を手動で入力

Homeで「+」をタップしてAdd Serverを開き、該当するTypeを選択します。手元のパラメータに従ってアドレス、ポート、認証情報を入力し、必要なTLSと通信オプションを設定してください。手動で追加しても、リモートのサブスクリプションとは自動で連携されません。

適しているケース:項目の一覧だけがある、または読み込み時に不足したパラメータを確認したい

結論:リストを更新するには、サブスクリプション連携を維持

単一のプロトコルリンクを使う場合、パラメータが変更されたら通常はリンクを再読み込みするか、項目を編集します。サブスクリプションURLを使う場合は、該当するサブスクリプションを更新してください。古いリンクを貼り直しても、リモートから新しいパラメータは取得できません。

  1. 読み込み前:ご自身がすでに利用している設定であることを確認し、復元できるよう元の記録を保管します。まだ使える項目は先に削除しないでください。
  2. 保存後:Type、サーバー、ポート、表示名を確認します。名前だけで正しく読み込めたと判断しないでください。
  3. テスト前:TLS、SNI、Host、Pathなど必要な項目を確認します。表示項目はプロトコルによって異なり、すべての接続で全項目を入力する必要はありません。
  4. 更新後:サブスクリプショングループ内の項目が変わったか確認します。リモート更新で手動変更した項目が置き換わる場合があるため、重要な変更は別途記録してください。

よくある質問:認識・更新・接続を個別に確認

トラブルシューティングでは、問題を3段階に分けて確認します。テキストを解析できるか、サブスクリプションから内容を取得できるか、保存後の接続が使えるかです。Global Routingはトラフィックのルーティング方法を決めるもので、不完全な共有テキストを修復する機能ではありません。ProxyやConfigを切り替えても、パスワードが欠けたリンクが完全になるわけではありません。

リンクをコピーしても、追加の案内が表示されないのはなぜですか?

テキストがss://、vmess://、vless://、trojan://のいずれかで始まっているか確認します。チャットアプリが付けた説明文やコードフェンスを取り除き、リンク全体をコピーし直してください。今回のペーストをShadowrocketが読み取れるよう、システムの許可も確認します。項目の一覧しかない場合は、Home →「+」→ Add Serverから手動で入力してください。

HTTPSのURLをブラウザで開けるのに、サブスクリプションとして使えないのはなぜですか?

ログイン画面、説明ページ、エラーページが表示されても、リストを取得できたことにはなりません。URLが完全か、特に「?」以降のtokenパラメータが含まれているか確認し、URLの用途はご自身が利用しているサービスの提供元に問い合わせてください。認証情報を含むURLを第三者のWebサイトで検査しないでください。

サブスクリプションを更新したのに、手動で追加した項目が変わらないのはなぜですか?

手動で追加した項目は、該当するサブスクリプションに含まれているとは限りません。Homeに戻り、項目のグループと取得元を確認してから、該当するサブスクリプションを更新してください。単一のプロトコルリンクから追加した項目は、新しいリンクを取得して再度読み込むか、新しいパラメータに合わせて編集する必要があります。

ポートが443なのに接続できないのはなぜですか?

項目の編集画面で、アドレス、ポート、認証情報に加えて、TLS、SNI、通信パラメータを確認してください。443はポート番号にすぎず、これらの設定を自動で補うものではありません。証明書に問題がある場合は、サーバー名と証明書の設定を確認してください。一般的な対処法として証明書検証を無効にしないでください。

トラブルシューティング用のスクリーンショットを共有するとき、何を隠せばよいですか?

パスワード、UUID、完全なサブスクリプションURL、token、QRコードを隠し、ほかの認証情報も見えないようにしてください。判断に必要なType、ポート、通信方式、エラーメッセージは残せます。認証情報をすでに公開してしまった場合は、利用中のサービスの手順に従って該当する情報を変更してください。

項目を確認した後は、サーバーへの接続性とルールの動作を分けて確認します。接続パラメータは接続方法を決め、Config内のルールはリクエストごとにどのポリシーを適用するかを決めます。サブスクリプションの更新成功、接続テストの成功、リクエストの意図した振り分けは、それぞれ個別に確認が必要です。

App Storeで正規品を確認