VMessはプロトコル層で暗号化と認証を行い、VLESSはTLSやREALITYなど外側の仕組みに暗号化を任せます。ノードを選ぶ際は、プロトコル名だけで速度を判断せず、クライアントの互換性、通信方式、サーバー設定が揃っているかを確認しましょう。
1分でわかる:暗号化を担当する場所が違う
VMessとVLESSはいずれも、クライアントとサーバー間でプロキシ通信を転送するために使われ、UUIDでユーザーを識別します。最も重要な違いは「Webサイトにアクセスできるか」ではなく、プロトコル自体がどこまで処理を担うかです。VMessはプロトコル内部で認証とデータ暗号化を行うため、正しいパラメータのVMessノードをクライアントに追加すれば、これらの安全処理をプロトコル層で実行できます。
VLESSはより軽量な設計です。認証と転送を担いますが、アプリケーションデータをVLESSプロトコル層で重ねて暗号化せず、通常はTLSやREALITYと組み合わせます。つまり、VLESSがユーザー識別とデータ転送を担当し、TLSやREALITYが外側の安全な接続を担当する分業です。ここでいう「軽量」は役割が少ないという意味であり、どのネットワークでも明らかに高速になるわけではありません。
VMess
プロトコル層に認証と暗号化を含み、既存ノードや早期導入環境での対応範囲が広く、VMess over TCP、WebSocket、HTTP/2などの組み合わせが一般的です。
向いているケース:パラメータが揃い、安定して動作している既存のVMessノードを使い続ける場合
VLESS
おすすめプロトコル自体がよりシンプルで、通常はTLSやREALITYと組み合わせます。現在一般的なXrayの構成を導入しやすい方式です。
向いているケース:新しい設定を作成し、Xrayコアと現代的なトランスポートセキュリティを組み合わせる場合
認証・トランスポート・セキュリティ層の役割
プロキシ設定は通常、1層だけではありません。最も内側にVMessやVLESSなどのプロキシプロトコルがあり、その外側にTCP、WebSocket、gRPCなどのトランスポート方式が重なり、さらにTLSやREALITYが加わる場合があります。ノードが接続できるかどうかは、各層のパラメータがサーバー側と一つずつ一致しているかで決まります。アドレスとポートが同じでも、2つのノードでプロトコルを入れ替えられるとは限りません。
VMessの一般的な共有リンクはvmess://で始まり、通常はサーバーアドレス、ポート、UUID、通信方式、Host、パス、TLSの状態などがエンコードされています。VLESSのリンクはvless://で始まり、パラメータがURIに直接記載されます。REALITYを使う場合は、公開鍵、Short ID、サーバー名、クライアントフィンガープリントなどの項目が含まれることもあります。
| 比較項目 | VMess | VLESS |
|---|---|---|
| ユーザー識別 | 通常は36文字の標準UUIDを使用 | 通常は36文字の標準UUIDを使用 |
| プロトコル層の暗号化 | 認証と暗号化の仕組みを含む | アプリケーションデータの暗号化は担当しない |
| 一般的なセキュリティ構成 | 単独でも使えるほか、TLSと組み合わせることも多い | 通常はTLSまたはREALITYと組み合わせる |
| 一般的なトランスポート | TCP、WebSocket、HTTP/2 | TCP、WebSocket、gRPC |
| 追加後に重点的に確認する項目 | UUID、通信方式、パス、TLS | フロー制御、通信方式、セキュリティ方式、公開鍵、サーバー名 |
結論:プロトコル名は設定の一部にすぎない
VLESSだからといって自動的にREALITYとは限らず、VMessだからTLSがないとも限りません。クライアントでノードを編集し、「トランスポートプロトコル」と「トランスポート層のセキュリティ」の項目を一つずつ確認してください。
VLESSは必ずVMessより速い?
サーバー、回線、外側のトランスポートが完全に同じなら、VLESSはプロトコル内部で行う暗号化が1層少ないため、理論上の処理負荷は低くなります。ただし、一般的なWeb閲覧、メッセージ通信、動画視聴では、回線遅延、パケットロス、サーバー負荷、TLSハンドシェイク、通信方式の影響のほうが大きいことが多いです。プロトコル層で減るわずかな処理が、目でわかるページ読み込み速度の差になるとは限りません。
たとえば、同じ回線の遅延が40ミリ秒から180ミリ秒に上がれば、操作感は明らかに変わります。一方、端末がプロトコルデータを処理する際の数ミリ秒の差は、通常それだけで体感するのは困難です。WebSocketのパス設定ミス、サーバー名の不一致、REALITYの公開鍵不足は接続失敗に直結するため、理論上の性能差よりもはるかに重要です。
速度を比較するなら、少なくとも次の条件を揃える
- 同じサーバー、同じ通信事業者の回線、近い時間帯で測定する。
- 2つのノードで同じTCP、WebSocket、またはgRPC方式を使う。
- 少なくとも3回連続でテストし、遅延、ダウンロード速度、通信切断の有無をそれぞれ記録する。
- ルーティングルールを揃え、一方だけプロキシ、もう一方だけ直接接続にならないようにする。
- サーバー側の速度制限と、端末の無線ネットワークの揺らぎを除外してから、プロトコルの処理負荷を比較する。
ノード追加時に確認すべき項目
v2rayNでは、まず共有リンク全体をコピーし、「サーバー」→「クリップボードから一括URLインポート」を選びます。追加後すぐに接続せず、サーバー一覧の項目をダブルクリックして編集画面を開き、アドレス、ポート、ユーザーID、トランスポートプロトコル、トランスポート層のセキュリティを確認してください。ローカルプロキシの設定を変更する場合、通常は「設定」→「パラメータ設定」から開きます。画面のバージョンによって項目のグループ分けは多少異なりますが、パラメータの意味は変わりません。
v2rayNGでは、右上のプラスボタンをタップして「クリップボードからインポート」を選ぶと共有リンクを読み込めます。サービス提供元のQRコードをスキャンすることも可能です。AndroidでXrayコアを使う場合、一般的なVMess、VLESS、TLS、REALITY設定に対応できます。追加後はノード名だけで判断せず、詳細画面でポートとセキュリティ方式を確認してください。
VMessでよく見られる識別形式
vmess://エンコード済み設定内容
VLESSでよく見られる識別形式
vless://ユーザーID@サーバーアドレス:443?type=tcp&security=tls#ノード名
VMessノードで重点的に確認する項目
- UUID:サーバー設定と完全に一致している必要があります。コピー時に余分なスペースを入れないでください。
- 通信方式:TCP、WebSocket、HTTP/2は相互に置き換えられません。
- パスとHost:WebSocketノードではパスとホストの項目が必要なことが多く、1文字違うだけでも接続に失敗する場合があります。
- TLSの状態:サーバー側でTLSが有効な場合、クライアント側でも有効にし、正しいサーバー名を入力してください。
- 追加ID:現在のVMess AEAD設定では通常
alterId=0を使います。古い手順にあるゼロ以外の値をそのまま使わないでください。
VLESSノードで重点的に確認する項目
- UUID:ユーザーを識別するためのもので、Webサイトへのログインに使うアカウントやパスワードではありません。
- セキュリティ方式:none、TLS、REALITYのどれを使うか確認してください。経験だけでこの項目を変更してはいけません。
- フロー制御:サーバーから明確に指定された場合だけ入力します。たとえば、一部のTCPとREALITYの組み合わせではVisionフロー制御を使います。
- サーバー名:TLSやREALITYの設定では、正しいSNIまたはserverNameが必要になることが多いです。
- REALITYパラメータ:公開鍵、Short ID、フィンガープリントはノード提供元から渡されたものを使います。欠けている項目をクライアント側で推測することはできません。
結論:追加に成功しても、設定が使えるとは限らない
クライアントが共有リンクを認識できるのは、形式を解析できたという意味にすぎません。接続前に30秒ほどかけてポート、セキュリティ方式、通信方式を確認したほうが、システムプロキシを何度も切り替えるより早く原因を見つけられることが多いです。
一般ユーザーはVMessとVLESSのどちらを選ぶべき?
すでに安定したVMessノードを使っているなら、VLESSのほうが新しい設計だからという理由だけで急いで乗り換える必要はありません。クライアントはVMessを継続してサポートしており、正常なVMess AEAD設定は今でも日常的な通信に使えます。プロトコルの移行には通常サーバー側の変更も必要で、クライアントだけを書き換えると認証やハンドシェイクに失敗します。
新しい設定を追加する段階で、サーバーがVLESSとTLSまたはREALITYのパラメータを明確に提供しているなら、VLESSを優先してよいでしょう。現在一般的なXrayの構成と直接組み合わせやすく、プロトコル層が暗号化を重複して担うことも抑えられます。ただし、ここでいう「優先」はサービス提供元の正式な設定が前提であり、公開鍵、フロー制御、サーバー名を手作業で推測してはいけません。
- 既存のVMessが安定稼働している:そのまま使い、定期的にサブスクリプションを更新する。
- サブスクリプションに2種類のプロトコルがある:安定性を個別にテストし、パラメータが揃っていてログにも問題がないほうを優先する。
- 新しいXray設定を作成する:VLESSとTLSまたはREALITYの組み合わせを重点的に検討する。
- 性能の低い端末:VLESSのシンプルな設計はプロトコル処理の削減に役立ちますが、実際の改善幅は回線や通信方式にも左右されます。
- 複数端末で同期したい:同じサブスクリプションURLでノードを管理し、端末ごとにプロトコルパラメータを手作業で書き換えない。
よくある問題と対処法
プロトコルの問題は、システムプロキシ、DNS、サブスクリプション更新の問題と混同されがちです。障害を切り分けるときは、まずノードのパラメータが揃っているかを確認し、次にコアログの最初のエラーを確認してください。「テストがタイムアウトした」という結果だけでは、サーバーに到達できないのか、TLS名が間違っているのか、ローカルプロキシが有効でないのかを判断しにくいものです。
VLESSの追加後に公開鍵がないと表示されたら?
ノードの編集画面を開き、セキュリティ方式がREALITYになっているか確認してください。REALITYの場合は、元のサブスクリプションからpublicKeyを再インポートし、自分で入力しないでください。サブスクリプション自体に項目がない場合は、完全な設定を取得する必要があります。
VMessは接続できるのに、速度テストが常にタイムアウトするときは?
まずv2rayNのシステムプロキシの状態を確認し、次にコアログでアドレス解決、TLSハンドシェイク、ポート使用状況の情報を確認します。ローカル混合ポートが10808の場合は、ほかのプログラムが同じポートを使用していないことも確認してください。
同じUUIDを2種類のプロトコルで同時に使える?
UUIDの文字列は同じにできますが、サーバー側ではVMessまたはVLESSに対応するインバウンドをそれぞれ設定する必要があります。UUIDが同じというだけで、2つのプロトコルが自動的に互換になるわけではありません。
VLESSノードにTLSがなくても使える?
技術的にはサーバー側の構成によりますが、VLESS自体はアプリケーションデータを暗号化しません。サーバー提供元が指定したセキュリティ方式に厳密に従い、公開環境の設定で既存のTLSやREALITYを勝手に無効化しないでください。
サブスクリプション更新後にプロトコルが変わった。ルーティングを再設定する必要はある?
通常は必要ありません。ルーティングの振り分けは主にドメイン、IP、ポート、プロセスによって判定され、出力ノードがVMessかVLESSかとは直接関係しません。ただし、ルールが最終的に指す新しいノードやグループが存在することを確認してください。
ログに「connection refused」と表示されたら、まずサーバーアドレスとポートを確認します。証明書名に関するエラーが出た場合はTLSのserverNameを確認し、REALITYのハンドシェイクに失敗した場合は公開鍵、Short ID、フィンガープリント、サーバー名を重点的に確認してください。切り分けでは一度に1項目だけ変更し、変更のたびに設定を再適用します。複数項目を同時に変えると原因を特定できません。