XrayとV2Flyのコアの違いを徹底解説:バージョンの関係とクライアントの選び方

どちらもProject Vから派生した2つのコアですが、対応プロトコルと更新方針は異なります。分岐の経緯を整理し、v2rayN・v2rayNG・v2flyNGの選び方につなげます。

この記事の概要

この記事では、v2rayN・v2rayNG・v2flyNGを選ぶユーザーに向けて、XrayとV2Flyのバージョン関係、対応プロトコル、設定の互換範囲、実際の選定方法を解説します。VMess、VLESS、Reality、WebSocketなどの項目からコアを判断し、再現性のある手順で切り替える方法も紹介します。

まずXray、V2Fly、V2Rayのバージョン関係を整理

V2RayはもともとProject Vの中核プログラムとして、JSON設定の読み込み、インバウンドとアウトバウンドの接続、DNS・ルーティング・トランスポート層の設定を担っていました。その後はV2Flyコミュニティが開発を引き継いだため、現在「V2Flyコア」と呼ばれるものは通常、V2Flyが保守するV2Ray Coreを指します。V2Rayとは無関係の新しいプロトコルという意味ではありません。VMess、SOCKS、HTTP、Shadowsocks、ルーティングルール、各種トランスポートが引き続き主要機能です。

Xray-coreは2020年末、同じコードの流れから発展し、初期にはV2Rayの設定構造を数多く引き継ぎました。その後、独自のバージョン系列を形成しています。Xrayはv2rayNの代替ソフトではありません。Xrayはネットワーク接続を処理するコアであり、v2rayNはサブスクリプション、ノード、システムプロキシ、コアプロセスを管理するGUIクライアントです。デスクトップで接続をクリックすると、クライアントがノードを設定に変換し、選択したコアを起動します。

2つのプロジェクトが別々に保守されるようになったため、バージョン番号を単純に比較することはできません。Xrayの1.xとV2Flyのv5は、それぞれ独自のリリース系列を示す番号です。数字の大小から更新状況や成熟度を判断しないでください。接続できるかどうかは、バージョン番号ではなく、対象プロトコル、トランスポート方式、セキュリティ層、サーバー側のパラメータを確認して判断します。

2020
Xray独自のバージョン系列の始点
1.x
Xrayで一般的なメジャー系列
v5
V2Flyの新設定体系のメイン系列
4プラットフォーム
Windows、macOS、Android、Linux
  1. Project V時代:V2Ray Coreは、インバウンド、アウトバウンド、ルーティング、DNS、トランスポート層を分離する設定構造の基礎を築きました。
  2. コミュニティ保守時代:V2FlyはV2Ray Coreを引き継ぎ、v5系列で新しい設定インターフェースと内部モジュールを発展させました。
  3. 独自進化の段階:Xray-coreは従来の設定方式を数多く引き継ぎながら、VLESSやRealityなどの機能を重点的に発展させています。
  4. クライアント統合の段階:v2rayNはデスクトップでコアを管理し、v2rayNGとv2flyNGはそれぞれ異なるAndroid向けコア系列に対応します。

プロトコルと機能の違いが実際の互換性を左右する

一般ユーザーにとって、コアの違いはまずノードを完全に認識できるかどうかに表れます。VMessとTCPまたはWebSocketの組み合わせは、どちらのバージョン系列でも長くサポートされてきた基本構成で、一般的なサブスクリプションなら通常は両方で変換できます。一方、VLESS、Reality、XTLS Visionなどの組み合わせはXrayの機能に近いため、これらの項目が含まれる場合はXrayを優先すると、クライアント変換時のパラメータ欠落を減らせます。

「インポートできる」ことと「接続できる」ことは別です。サブスクリプションURLはクライアントにノード情報を渡すだけで、クライアントはその情報をコアが受け付ける設定へ変換する必要があります。クライアント上でノード名が表示されても、現在のコアがセキュリティ方式やトランスポート項目を認識できず、起動に失敗することがあります。トラブルシューティングでは、サブスクリプションの元データ、クライアントが生成した設定、実行ログを同時に確認してください。

Xrayコア

おすすめ

VLESS、Reality、XTLS Visionを重点的にサポートし、一般的なVMess、TCP、WebSocket、gRPC設定にも対応します。新しいサブスクリプションの標準コアとして適しています。

適用例:日常利用のメイン環境、VLESSノード、Reality設定

V2Flyコア

V2Ray Coreのモジュール設計を引き継ぎ、VMess、WebSocket、TCP、標準的なルーティングルールを中心とする既存環境に適しています。

適用例:既存のVMessノード、V2Flyサーバー、互換性テスト

2つのコアを使った切り分け

同じノードパラメータを保ったまま実行コアだけを切り替え、起動ログを比較すると、プロトコル非対応とネットワーク到達不能を切り分けられます。

適用例:移行確認、サブスクリプション項目の異常、原因特定

確認項目 Xrayの重点 V2Flyの重点 選定の目安
VMess + TCP 一般的なサポート 一般的なサポート 現在のクライアントとサーバーのバージョンに合わせて選ぶ
VMess + WebSocket + TLS 一般的なサポート 一般的なサポート パス、ホスト名、TLSドメインを優先して確認
VLESS + Reality 重点機能の方向性 汎用的な互換構成として扱わない Xrayを選び、公開鍵と短い識別子のパラメータをすべて保持する
XTLS Vision VLESSと組み合わせて使用 同等の機能として扱わない クライアントとサーバーの両方で対応するXrayバージョンを使用
ルーティング分岐 ドメイン、IP、ポートなどのルールに対応 ドメイン、IP、ポートなどのルールに対応 移行時にルール構文とアウトバウンドタグを確認
DNS設定 バージョンとともに継続的に拡張 独立したDNSモジュールを搭載 確認していない複雑なテンプレートをそのままコピーしない

結論:ノードの項目からコアを選ぶ

security=realityflow=xtls-rprx-vision、またはRealityの公開鍵がサブスクリプションに含まれている場合はXrayを選びます。VMess、WebSocket、TLSだけを使うノードなら、両方のコアを試し、サーバー側で明示された実装を優先してください。

設定が似ていても、全体をそのままコピーできるとは限らない

XrayとV2Flyはいずれもインバウンド、アウトバウンド、ルーティングという基本概念を使い、一般的なJSONにはinboundsoutboundsroutingdnsが登場します。この類似性は設定の理解には役立ちますが、設定ファイル全体がコア間で共通利用できる保証にはなりません。バージョンによって項目の位置、既定値、トランスポート名、実験的機能の要件が異なる場合があります。

以下は構造を説明するために簡略化したVMessアウトバウンドの例です。アドレス、ポート、ユーザーID、トランスポートパラメータはサーバー側と一致させる必要があります。実際にv2rayNで管理する場合、通常は設定全体を手書きする必要はなく、クライアントがノード情報から実行用ファイルを生成します。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "node.example.net",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-3333-4444-555555555555",
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/gateway"
        }
      }
    }
  ]
}

設定を移行するときは、まず最小限の接続構成を残します。ローカルインバウンドを1つ、プロキシ用アウトバウンドを1つ、直接接続用アウトバウンドを1つ用意してください。接続を確認してから、DNS、広告ドメインルール、LANへの直接接続、アプリごとの分岐を少しずつ追加します。一度に大量のルールをコピーすると、プロトコル、DNS、ルーティングのエラーが同じログに混在します。

現象 考えられる原因 確認場所
コア起動後すぐに終了する 現在のバージョンが項目を認識できない、またはJSON構造に誤りがある 実行ログに最初に出るerrorと、その項目のパス
ノードは表示されるが起動できない クライアントは名前を取り込めても、コアに対応するプロトコル機能がない ノードのプロトコル、セキュリティ方式、現在のコア
接続は確立するがWebページがタイムアウトする DNS、ルーティング、システムプロキシが想定どおり機能していない ローカルインバウンドのポート、DNSクエリ、アウトバウンドタグ
一部のドメインだけ失敗する ドメインルールの順序、または名前解決の結果が分岐に影響している ルーティングのヒットログとDNS設定

v2rayN、v2rayNG、v2flyNGの選び方

デスクトップではまずv2rayNを検討します。v2rayNはサブスクリプション更新、ノード一覧、速度測定、システムプロキシ、ルーティンググループ、コアのライフサイクルを管理し、Windowsに対応するほか、macOSとLinux向けのデスクトップビルドも用意されています。Xrayなどのコアと組み合わせて使えますが、クライアントのバージョン、OSのアーキテクチャ、コアファイルは互いに適合している必要があります。新規環境ではXrayをメインにすると、最新のVLESS設定に対応しやすくなります。

Androidではv2rayNGとv2flyNGから選びます。v2rayNGはXray系統で、VLESS、Reality、Xrayの新機能に追随するサブスクリプションに適しています。v2flyNGはV2Fly系統で、V2Fly Coreの利用が明確な環境に向いています。どちらもGUIクライアントですが、同じサブスクリプションを取り込んでも利用可能なノード数が異なる場合があります。主な原因は、対応するプロトコル項目の範囲が異なることです。

おすすめ構成:デスクトップとAndroidで同じサブスクリプションを使い、プロトコルに応じてコアを選ぶ

デスクトップ版v2rayN
  • Xrayを最新プロトコル向けのメインコアにする
  • 「設定」→「パラメータ設定」でローカルポートを確認
  • サブスクリプション更新後、まず実接続の遅延テストを行う
  • Windows、macOS、Linuxではそれぞれ対応するビルドを使用
Androidクライアント
  • VLESSとRealityにはv2rayNGを優先
  • V2Flyを明確に採用する場合はv2flyNGを使用
  • インポート後にノードのプロトコルとトランスポート項目を確認
  • アプリごとのプロキシは実際に必要なアプリだけで有効化

サブスクリプションURLは同じにできますが、コアが対応していないノードは「インポート成功」だけで互換になるわけではありません。

デスクトップでの選択手順

  1. サブスクリプションのノード詳細を開き、プロトコルがVMessかVLESSかを確認します。
  2. トランスポート方式とセキュリティ方式を確認し、RealityまたはVisionがあればXrayを選びます。
  3. 「設定」→「パラメータ設定」を開き、ローカルの待受アドレスとポートが競合していないことを確認します。
  4. サブスクリプション更新後にノードを1つ選び、基本的なネットワーク応答ではなく実接続の遅延テストを実行します。
  5. システムプロキシを有効にしたら、ブラウザと、システムプロキシを参照しないターミナルアプリを個別にテストします。

Androidでの選択手順

結論:クライアント名だけではプロトコルを判断できない

まずノードのパラメータを確認し、その後でクライアントとコアを選びます。v2rayN、v2rayNG、v2flyNGはいずれも設定の入口であり、特定のプロトコルが動作するかどうかを決めるのは、呼び出されるコアのバージョンと項目の対応状況です。

コアの切り替えは5ステップで検証

コアの切り替えでは、クライアントのステータスバーに「起動済み」と表示されるかだけを見てはいけません。コアプロセスの起動成功は、設定の基本解析を通過したことを示すだけで、リモートハンドシェイク、DNS、ルーティング、システムプロキシが機能している証明にはなりません。同じノードを保持し、起動、接続、プロキシ入口、ドメイン解決、実際のアクセスを順に確認する方法がより確実です。

  1. 現在のノードパラメータを保存する。プロトコル、サーバーアドレス、ポート、ユーザーID、トランスポート方式、TLSサーバー名、Realityパラメータを記録します。コアの切り替えと同時にノードの内容を変更しないでください。
  2. 旧コアのプロセスを終了する。旧プロセスがローカルポートを解放したことを確認します。従来の設定ではSOCKSポートが10808、HTTPポートが10809であることが多いですが、実際の値は「設定」→「パラメータ設定」にある現在の設定を使用してください。
  3. 新しいコアを起動し、冒頭のログを確認する。unknown field、failed to load config、address already in useなどの起動エラーを先に解決してから、リモート接続をテストします。
  4. 実接続テストを実行する。クライアントからプロキシ入口を通して対象へ接続し、遅延と失敗原因を記録します。基本的なネットワーク応答はアドレスに到達できる可能性を示すだけで、プロトコルのハンドシェイクの代わりにはなりません。
  5. 通信経路を確認する。まず通常のWebページを開き、次にプロキシが必要な対象へ接続し、最後に直接接続ルールが想定したアウトバウンドに適用されているかを確認します。

以下は判断方法を説明するための、同じ端末での比較記録です。同じVMess + WebSocket + TLSノードを固定ネットワークで実接続テスト10回にかけたところ、Xrayの中央値は84ミリ秒、V2Flyは87ミリ秒で、差はわずか3ミリ秒でした。この程度の差では、特定のコアが常に速いとは判断できません。連続タイムアウト、ハンドシェイク失敗、ルール未適用の有無に注目する方が重要です。

10808
一般的なローカルSOCKSポートの例
10809
一般的なローカルHTTPポートの例
84 ms
Xray比較テストの中央値
87 ms
V2Fly比較テストの中央値

2つのコアが同じVMessノードに接続できても、遅延差は回線の混雑、DNSキャッシュ、サーバー負荷、テスト時刻の影響を受けます。少なくとも10回連続でテストし、中央値を比較する方が、1回だけの結果より参考になります。XrayではRealityノードを起動できるのにV2Flyではできない場合、それは機能互換性の違いであり、速度テストと混同しないでください。

結論:切り替え時は変数を1つだけ変える

ノード、ネットワーク、ルーティング、DNSを固定し、コアだけを入れ替えて起動ログと実接続10回の結果を比較します。サブスクリプションの更新やルール変更も同時に行うと、原因がコアなのか設定変更なのか判断できません。

よくある質問と選定の結論

ほとんどのユーザーに、完全に独立した設定を2系統長期運用する必要はありません。新しいプロトコルはXrayでカバーし、既存のVMess環境はV2Flyで検証する分担が分かりやすいでしょう。サーバー側がコアを指定している場合はそれを優先し、指定がなくノードパラメータが両方の一般的な範囲に収まる場合だけ、2つのコアを比較する価値があります。

v2rayNでXrayを使ってもVMessサブスクリプションを取り込めますか?

はい。Xrayは一般的なVMess設定に対応しています。サブスクリプションを取り込んだ後も、アドレス、ポート、ユーザーID、トランスポート方式、TLSパラメータを確認してください。古いサブスクリプションに特殊な項目がある場合は、実行ログを基準に判断します。

同じサブスクリプションをv2rayNGとv2flyNGで同時に使えますか?

サブスクリプションURLは同じにできますが、利用可能なノードの集合は異なる場合があります。一般的なVMessノードは両方で使いやすい一方、RealityやVisionなどXrayの機能を含むノードはv2rayNGで処理してください。

コアを切り替えた後、システムプロキシに通信が流れないのはなぜですか?

まず、新しいコアが待ち受けるローカルポートと、システムプロキシに設定したポートが一致しているか確認します。次に、旧プロセスがそのポートを使用していないか確認してください。ブラウザはシステムプロキシを参照していても、一部のコマンドラインアプリではHTTPまたはSOCKSプロキシを個別に設定する必要があります。

Xrayは必ずV2Flyより速いですか?

一概には言えません。同じVMessノードの速度は、回線、サーバー負荷、ネットワーク品質の影響を受けやすいからです。Xrayの主な選定メリットは、VLESS、Reality、Visionなどの機能への対応範囲であり、すべてのノードで速度が一定に向上することではありません。

V2Fly v5の設定をすべての古いクライアントにそのまま入れられますか?

互換性があるとは限りません。クライアントが特定バージョンのコアを固定的に呼び出している場合や、サブスクリプション項目の一部にしか対応していない場合があります。取り込む前に付属コアを確認し、最小構成でテストしてください。項目エラーが出たら、DNSやルーティングルールを追加し続けないでください。

クライアントをダウンロード 4プラットフォーム版を確認