VMessとVLESSの違いは?一般ユーザー向け1分解説と選び方

暗号化方式、通信オーバーヘッド、サーバー要件の3点からVMessとVLESSの違いを解説。購読情報だけで選ぶ方法も紹介します。プロトコルの詳細知識は不要です。

1分で結論:サブスクリプションにあるものを使う

VMessとVLESSで迷った場合、最も確実なのはプロトコルを手動で変更せず、サーバーまたはサブスクリプションが提供する設定をそのまま使うことです。ノードがvmess://で始まる場合はクライアントでVMessとしてインポートし、vless://で始まる場合はVLESSとしてインポートします。プロトコル、ポート、ユーザー識別子、トランスポート方式、セキュリティ層、パスは一体となった設定です。1項目だけ変更しても、通常は接続できません。

同じサービスがVMessとVLESSの両方を提供している場合は、次の順番で判断します。

  1. 現在のクライアントのコアと互換性があり、正常にインポートできるノードを優先します。
  2. VLESSノードにTLSまたはREALITYが設定され、クライアントが対応パラメータをサポートしている場合は、VLESSを優先して試します。
  3. 古い端末、既存の設定、または既存サービスがVMessのみを提供している場合は、そのままVMessを使えば問題ありません。プロトコル名だけを理由に移行する必要はありません。
  4. どちらも接続できる場合は、遅延、連続通信、ネットワーク切り替え後の復旧状況をそれぞれ確認し、実際に安定している方を残します。
比較項目 VMess VLESS
プロトコルの位置づけ 認証とプロトコル層でのデータ保護機能を備える 認証を簡略化し、セキュリティは通常外側のトランスポートに委ねる
一般的なセキュリティ構成 VMessとTCP、WebSocket、gRPC、TLSなどの組み合わせ VLESSとTLS、または対応コアでのREALITY
プロトコルのオーバーヘッド 比較的大きい 比較的小さい
互換性の確認ポイント 時刻、ユーザー識別子、トランスポートパラメータに注意 セキュリティ層、flow、SNI、トランスポートパラメータに注意
一般ユーザーの操作 サブスクリプションをインポートしてそのまま選択 クライアントが全パラメータに対応していることを確認して選択

VMess:プロトコル内に認証とデータ保護機能を備える

VMessはV2Rayエコシステムで早くから広く使われてきたプロトコルです。ユーザー識別子で認証を行い、リクエスト情報とデータ転送をプロトコル層で処理します。クライアントがサーバーへ接続する際は、プロトコル、アドレス、ポート、ユーザー識別子、トランスポート方式、セキュリティ設定がすべて対応していなければなりません。1項目でも一致しないと、接続タイムアウト、ハンドシェイク失敗、接続後にデータが流れないといった症状が現れます。

VMess設定でよく使われるユーザー識別子はUUIDです。接続を許可されたユーザーの識別に使われますが、UUID自体はサーバーアドレスではなく、単独でノードを構成するものでもありません。利用可能なノードには、ポート、トランスポートタイプ、関連パラメータも必要です。たとえばWebSocketでは対応するパス、gRPCではサービス名、TLSでは一致するサーバー名などが必要になります。

VMessのプロトコル層の処理をTLSと混同する人もいますが、両者は同じ層ではありません。VMessは認証とデータ処理の方式を定義し、TLSは外側の安全な通信を担います。サーバーは構成に応じてVMessをTCP、WebSocket、gRPCなどの上に載せ、TLSを有効にするかどうかを決めます。クライアントはこの組み合わせ全体を正しく再現する必要があります。

VMessはシステム時刻の影響を受けやすい傾向があります。端末の時刻が標準時刻から大きくずれていると、認証に失敗することがあります。サーバーアドレスやサブスクリプションに変更がないのにVMessノードが突然すべて使えなくなった場合は、まず端末の自動日付、自動時刻、タイムゾーンを確認してください。1つのノードだけが使えない場合は、ポート、サービス状態、ノードパラメータの変更である可能性が高くなります。

VLESS:プロトコル層の負担を減らし、対応するセキュリティ層に依存

VLESSはプロトコル層を簡素化することを重視して設計されています。ユーザーの識別と接続先の伝達を担い、データの安全性はTLSやREALITYなどの外側の仕組みに大きく委ねます。そのため、VLESS設定でよく見られるencryption=noneは、接続全体が保護されていない状態で通信することを意味しません。VLESSプロトコル層で別の内容暗号化を重ねて行わない、という意味です。実際にセキュリティ層が有効かどうかは、security、サーバー名、公開鍵、ショートIDなどの関連フィールドも確認してください。

ここがVLESSで最も誤解されやすい点です。プロトコル名だけでは、接続全体の構成は判断できません。VLESSノードはTCPとTLSの組み合わせの場合もあれば、gRPCとTLSの場合もあります。Xrayコアが対応する構成ではREALITYを使うこともあります。組み合わせによって必要なクライアント機能は異なり、パラメータを相互に置き換えることはできません。

VLESS設定にはflowフィールドが含まれる場合もあります。このフィールドは特定の通信フローとコアの機能に関係するもので、すべてのVLESSノードに必要なわけではありません。サブスクリプションにない場合は自分で追加せず、記載されている場合も勝手に削除しないでください。クライアントが古く、対応するflow値を認識できないと、インポート後にノードを起動できない、または接続時に直ちに失敗することがあります。

デスクトップでv2rayN、Androidでv2rayNGを使う場合、実際に利用できるプロトコル機能は、クライアントに内蔵または呼び出されるコアのバージョンに左右されます。v2rayNGは通常Xrayコアを使用するため、対応するXrayパラメータを含むVLESSノードのインポートに適しています。v2flyNGはv2flyコアを使用するため、インポート前に、サブスクリプションがそのコアで未対応の拡張フィールドに依存していないか確認してください。画面にVLESSと表示できても、すべてのVLESS構成が同じ互換性を持つとは限りません。

大きな違い1:暗号化方式が属する層が異なる

VMessとVLESSを比較するとき、「一方は暗号化され、もう一方は暗号化されない」と単純化することはできません。より正確には、VMessはプロトコル設計に認証とデータ保護機能を含み、VLESSはプロトコル層を軽量化して、通常は信頼できる外側のセキュリティ方式を必要とします。最終的な通信品質は、プロトコル、トランスポート、セキュリティ層の組み合わせで決まります。

ノード設定は、次の3層に分けて考えると理解しやすくなります。

  • プロトコル層:VMessまたはVLESS。ユーザーの識別と接続先情報を担当します。
  • トランスポート層:TCP、WebSocket、gRPCなど。データをどのように運ぶかを決めます。
  • セキュリティ層:TLSまたは対応コアが提供するその他の安全方式。外側のハンドシェイクと通信保護を担当します。

たとえば、同じVLESSでもVLESS + TCP + TLSVLESS + gRPC + TLSは異なる組み合わせです。前者ではgRPCのサービス名は不要ですが、後者では通常必要です。どれか1つのフィールドを間違えても、「プロトコル暗号化」の項目を切り替えるだけでは修正できません。VMessも同様に、WebSocketのパス、Host、TLSのサーバー名などをサーバー側と一致させる必要があります。

一般ユーザーが共有リンクを確認するときは、いくつかの主要パラメータを見分けられますが、直接編集することはおすすめしません。次の構造はフィールドの関係を説明するためだけのものです。

vless://ユーザー識別子@サーバーアドレス:ポート
?type=トランスポート方式
&security=セキュリティ層
&sni=サーバー名
#ノード名

共有リンクのノード名は、クライアントのリスト表示に使われるだけで、プロトコル接続には関与しません。接続方式を決めるのはサーバーアドレス、ポート、クエリパラメータです。リンクをコピーする際に疑問符以降のパラメータが抜けると、ノードはインポートできても、セキュリティ層やトランスポート設定が不完全なため接続に失敗することがあります。

大きな違い2:VLESSは軽量だが、速度はプロトコルだけで決まらない

VLESSはプロトコル層での重複処理を減らしており、理論上はより軽量なデータ経路になります。プロセッサ性能が限られている環境、接続数が多い環境、ネットワークスループットが高い環境では、この差を測定しやすくなります。ただし、通常のウェブ閲覧、短い動画、日常的なダウンロードで体感速度を左右するのは、サーバー帯域、回線混雑、往復遅延、パケットロス、トランスポート方式であることが多いです。

したがって、VLESSだから必ず速いとは判断できません。回線が安定し負荷の低いVMessノードの方が、混雑した回線のVLESSノードより快適な場合もあります。一方、同じサーバー、同じ経路、近い設定で比較するなら、VLESSはプロトコル処理の軽量化を重視する構成に適しています。

テストでは、他の条件を固定してください。同じネットワークでまずVMessノードを選び、接続遅延、ページを最初に開くまでの時間、継続ダウンロードの状態を記録します。次に同じ地域、同じサーバー条件のVLESSノードへ切り替えて、同じテストを繰り返します。ネットワーク、クライアントのバージョン、ルーティングルールを同時に変更すると、プロトコルの差を判断できません。

Muxもプロトコル速度を決める固定スイッチとして扱うべきではありません。複数の論理接続を少数の下位接続に多重化するため、高遅延環境や短時間の接続が多い場面には適していますが、ネットワークやサービス設定によっては待ち行列が増えたり、長時間接続に影響したりします。VMessとVLESSのどちらも、提供元の推奨と実測結果を基準にしてください。特定のノードが遅いからといって、高度なパラメータを一度にいくつも変更しないでください。

大きな違い3:クライアントとサーバーの双方が対応している必要がある

VMessとVLESSは、クライアント側だけで切り替える表示オプションではありません。サーバーがVMessを待ち受けているなら、クライアントもVMessで接続を開始する必要があります。サーバーがVLESSを待ち受けているなら、クライアントもVLESSを使わなければなりません。2つの設定でサーバーアドレス、ポート、UUIDが同じでも、プロトコルが異なれば相互接続はできません。

サーバー側とクライアント側のコアは、同じトランスポートとセキュリティフィールドにも対応している必要があります。V2Ray、v2fly、Xrayには基本概念の継承関係がありますが、拡張機能や具体的なフィールドは完全には一致しません。特にREALITY、特定のflow、新しいトランスポートパラメータを含むVLESSノードでは、それらの設定を明確にサポートするコアのバージョンを使用してください。古いクライアントはフィールドを無視したり、設定エラーを表示したりすることがあります。

サブスクリプションは、手入力によるミスを減らす主な方法です。更新時には、サーバー側でポート、パス、セキュリティ層、ノード名を同時に変更できます。ユーザーはv2rayN、v2rayNG、v2flyNGのサブスクリプショングループを更新し、新しいノードを選ぶだけです。古いノードを手動でコピーして一部のフィールドだけ上書きすると、すでに無効になったパラメータが残りやすくなります。

v2rayN、v2rayNG、v2flyNGでプロトコルを選ぶ方法

v2rayN(デスクトップ版)

v2rayNはサブスクリプションをインポートすると、ノードの内容からVMessまたはVLESSを自動認識します。一般ユーザーが空の設定を先に作る必要はありません。まずサブスクリプションURLを追加してグループを更新し、サーバー一覧からノードを選びます。ノードには接続できるのにブラウザに通信がない場合は、すぐにプロトコルを変更せず、システムプロキシのモードを確認してください。

サブスクリプションに複数のプロトコルが含まれている場合は、ノード名やタイプで絞り込めます。VLESSの新しい設定を試すときは、クライアントとコアがいずれも現行の利用可能なバージョンであることを確認してください。未対応の設定フィールドが表示されたら、まずクライアントを更新し、サブスクリプションを再更新します。古いノードで項目を一つずつ推測しながら変更するのは避けてください。

v2rayNG(Android版)

v2rayNGでは、サブスクリプションまたは共有リンクからノードをインポートできます。VLESSをインポートしたら、ノード詳細でトランスポート方式、セキュリティタイプ、サーバー名、flowが揃っているか確認してください。接続ボタンで起動できるのにネットワークが使えない場合は、アプリ別プロキシの対象範囲、ルーティングモード、システムのネットワーク切り替えも確認します。

Wi-Fiからモバイルネットワークへ切り替えた後は、既存の接続を再確立する必要がある場合があります。これはVMessやVLESSの設定ミスとは限りません。まず切断して再接続し、それでもノードが継続して使えないかを確認します。すべてのノードが失敗する場合は、端末の時刻、サブスクリプションの更新状況、ローカルネットワークを確認してください。1つのノードだけが失敗する場合は、同じグループの別ノードを優先して試します。

v2flyNG(Android版)

v2flyNGがv2flyコアを使用している場合、そのコアが対応するVMess、VLESS、関連トランスポート設定の利用に適しています。拡張セキュリティパラメータを含むノードをインポートする前に、コアの対応範囲を確認してください。認識できないフィールドがあっても、削除して無理に保存しないでください。削除後に設定を起動できても、サーバーと正しくハンドシェイクできない可能性があります。

サブスクリプションに2種類のプロトコルがある場合の選び方

  1. まずサブスクリプションを更新します。一覧が現在のサブスクリプション内容であることを確認し、長期間残している古いノードのコピーは使いません。
  2. ノードのタイプを確認します。クライアントがVMessまたはVLESSとして認識していることを確認し、ノード名から推測しないでください。
  3. パラメータを確認します。アドレス、ポート、トランスポート方式、セキュリティ層、SNI、パス、サービス名、flowを重点的に確認します。
  4. まず接続をテストします。ノードを選択して接続を開始し、ウェブページ、長時間接続、継続通信が正常か確認します。
  5. 次に実際の性能を比較します。同じネットワークで遅延、パケットロス、速度、ネットワーク切り替え後の復旧状況を確認します。
  6. 予備ノードを残します。メインには実測で安定した方を選び、もう一方のプロトコルは回線やサービス状態が異なる場合の予備として使えます。

2種類のプロトコルが異なるサーバーから提供されている場合、テスト結果は主に回線とサーバーの違いを反映します。そこからプロトコルの優劣を断定することはできません。サーバーの場所、回線、帯域、トランスポート方式、負荷が近い場合に限り、比較結果はより参考になります。

よくある誤解と接続失敗の対処

VMessリンクをそのままVLESSに書き換える

この変更で変わるのはクライアントが送信するプロトコルだけで、サーバーの待ち受け方式は変わりません。アドレス、ポート、ユーザー識別子が同じでも、接続は失敗します。プロトコルを移行するには、サーバー側で対応するインバウンドを先に用意し、完全な新ノードまたは新しいサブスクリプションを発行する必要があります。

VLESSのencryption=noneを見てセキュリティパラメータを削除する

encryption=noneはVLESSプロトコル層の設定を示すもので、TLSやREALITYなど外側のパラメータを削除してよいという意味ではありません。securitysni、公開鍵、ショートIDを削除すると、クライアントはサーバーの要件に沿ってハンドシェイクを完了できなくなります。

インポート後に遅延の数値だけを見る

クライアントの遅延テストは通常、ある時点の接続応答だけを示し、継続通信の品質を表すものではありません。ノードの遅延が低くても、混雑する時間帯にはパケットロスや速度変動が発生することがあります。プロトコルとノードを選ぶ際は、ページの表示、継続ダウンロード、接続維持も合わせてテストしてください。

接続に失敗したらルーティングモードを何度も切り替える

ルーティングの振り分けは、どのリクエストをプロキシのアウトバウンドへ送るかを決めるもので、プロトコルのハンドシェイクエラーは修正できません。ノード自体に接続できない場合は、まずプロトコル、サーバー、ポート、ユーザー識別子、トランスポート、セキュリティパラメータを確認してください。ノードには接続できるものの特定サイトへの出口だけが誤る場合に、ルーティングルールを調べます。

サブスクリプション更新後も古い設定を使い続ける

クライアントによっては、サブスクリプション更新後も手動コピーしたノードが残り、一覧に新旧バージョンが同時に表示されます。サブスクリプショングループ、更新日時、ノードパラメータを確認して、現在選択している項目を特定してください。ノード名が同じでも、ポートやセキュリティパラメータが更新されている可能性があるため、名前だけで判断しないでください。

最終的な選択:互換性を優先し、実測で決める

VMessは、プロトコル内に比較的包括的な認証とデータ処理機能を備え、既存の導入実績とクライアント互換性に関する知見が豊富です。VLESSはプロトコル層がより軽量で、通常はTLSや対応コアが提供するセキュリティ方式と組み合わせて使われ、現代的な設定でよく見られます。どちらも名前だけで速度や安定性を決める単一のスイッチではありません。

一般ユーザーが覚えておくべき点は3つです。第一に、プロトコルはサーバーと一致させること。第二に、サブスクリプションのパラメータは完全にインポートし、手動で組み合わせないこと。第三に、クライアントが対応していることを確認したうえで、実際の回線テストによりメインノードを決めることです。サブスクリプションがVMessのみならVMessを使い、完全なVLESS設定が提供されクライアントも対応しているなら、VLESSを優先して試せます。安定して接続でき、ルーティングが期待どおりで、ネットワーク切り替え後も正常に復旧する設定が、その環境に最も適した選択です。

v2rayNをダウンロード