Project V・V2Fly・Xrayの違いとは?V2Rayのオープンソースエコシステムとクライアントの系譜

Project Vの成り立ち、V2Flyコミュニティによる開発継続、Xrayの派生経緯を整理し、v2rayN・v2rayNG・v2flyNGがそれぞれどのコアを使うのかを解説します。

この記事の要点

Project Vはプロジェクト体系の名称で、V2Rayはその中核ツールです。V2FlyはV2Rayの開発を引き継ぐコミュニティ、XrayはV2Rayから派生したコアです。クライアントを選ぶ際は、画面・コア・ノードのプロトコルを区別し、サーバー側の設定も確認しましょう。デスクトップやAndroid向けのクライアントを選んでいる方、VLESSとREALITYの互換性に困っている方、既存のサブスクリプションを移行する方に役立つ内容です。

1. プロジェクト・コア・クライアント・プロトコルの違い

「V2Rayをインストールした」という表現は、GUIクライアントを入れた場合にも、サーバー用のコアを導入した場合にも使われますが、この2つは別物です。GUIクライアントはサブスクリプションの読み込み、ノードの選択、システムプロキシの設定を担当します。コアは設定の読み込み、ルーティング、接続の確立を担います。プロトコルは通信方式を定めるもので、単独で起動するアプリではありません。

階層名称の例役割
プロジェクト体系Project Vネットワーク通信ツールをまとめるプロジェクトの枠組み。V2Rayはその中核ツールです。
開発コミュニティV2FlyV2Rayコアの開発を引き継ぎ、関連コードやドキュメントを保守します。
接続コアV2Ray、Xray-coreインバウンド、アウトバウンド、プロトコルのハンドシェイク、DNS、ルーティングルールを処理します。
GUIクライアントv2rayN、v2rayNG、v2flyNG設定を管理する画面を提供し、コアを起動または呼び出します。
プロキシプロトコルVMess、VLESSクライアントとサーバー間の認証方法やプロキシリクエストの転送方式を定めます。

クライアント名に「v2ray」が含まれていても、V2Rayコアが動作しているとは限りません。v2rayNGがXrayコアを使うのはその一例です。互換性を確認するには、アプリ名ではなく実際のコアとノードの設定値を見てください。

2. Project VからV2Flyへ:引き継がれた開発の流れ

Project Vは当初、モジュール型のネットワークプロキシツール群として登場し、V2Rayはその中核を担っていました。V2Rayはインバウンド、アウトバウンド、トランスポート、ルーティング、DNSなどを組み合わせて利用できます。ローカルでアプリの通信を受け付けることも、サーバーに導入してリモート接続を受け付けることも可能です。後に「V2Ray」はプロキシ環境全体を指す言葉としても使われるようになり、名称が混同されやすくなりました。

元のプロジェクトの開発ペースが変わった後、V2FlyコミュニティがV2Rayの開発を引き継ぎました。V2Flyはコミュニティの名称であり、V2Rayと一緒にインストールする別のソフトウェアではありません。「V2Flyコア」と呼ばれる場合は、通常、V2Flyコミュニティが保守するV2Rayコアを指します。

  1. 古い解説を読むとき:文中のV2Rayがコアプログラムを指すのか、プロキシ設定一式を指すのかを確認しましょう。画面上のメニューは通常、クライアント側の機能です。
  2. 実行中のプログラムを確認するとき:v2rayとxrayを区別し、起動ログに表示されるコア名とバージョンを確認しましょう。
  3. 設定を移行するとき:設定形式とコアのバージョンをあわせて確認してください。JSONファイルを読み込めても、すべての項目が現在のコアでサポートされるとは限りません。

V2RayとVMessは同じものではありません。VMessはV2Rayが対応するプロトコルの1つで、ルーティング、DNS、ローカルプロキシへの接続もコアの重要な機能です。逆に、ノードがVMessを使っているからといって、サーバーでV2Rayが動作しているとは限りません。XrayもVMessを処理できます。

3. Xrayは派生コア。すべての設定をそのまま置き換えられるわけではない

Xrayは2020年にV2Rayから派生し、その後、独立したコアとして開発が進みました。共通する技術基盤はありますが、機能、設定項目、開発ペースには違いがあります。VLESS、XTLS Vision、REALITYは、現在のXray設定でよく目にする用語です。3つを同じ階層のプロトコル名として扱わないようにしましょう。

たとえば、ノードがVLESS、REALITY、xtls-rprx-visionを明示的に要求する場合、その機能に対応したクライアントとコアが必要です。「VLESS対応」と書かれているだけで使えると判断したり、非対応の項目を回避するためにノードのセキュリティ方式をTLSに変更したりしないでください。

4. v2rayN・v2rayNG・v2flyNGとコアの対応関係

まず利用するプラットフォームを決め、次にノードの機能に対応したクライアントを選びます。以下では、ノードがXrayの機能を明示的に要求するケースを想定しており、すべてのノードを一律に評価するものではありません。v2rayNで選べるコアは配布パッケージやバージョンによって異なるため、使用中のパッケージと起動ログを確認してください。

Xrayを使う場合:v2rayN / v2rayNG

おすすめ

デスクトップでは、v2rayNが対象ノードで実際にXrayを呼び出しているか確認します。Androidでは、Xrayをコアに採用するv2rayNGを使います。REALITYやVisionが必要なノードでは、コアの対応状況とノード設定の不足がないかを重点的に確認しましょう。

おすすめのユーザー:VLESS + REALITYのノードを利用していて、対応するXray機能が必要な方。

V2Flyを使う場合:v2flyNG / 対応するデスクトップコアの設定

Android版のv2flyNGは、V2Flyが保守するV2Rayコアを使用します。デスクトップでも同じコアを使う場合は、v2rayNの現在の配布パッケージが対応しているか確認してください。バージョンごとに選べるコアが同じだとは限りません。

おすすめのユーザー:設定がV2Flyを前提としており、必要なプロトコルとトランスポートが対応済みだと確認できている方。

v2rayNはデスクトップ用クライアントです。サブスクリプショングループ、ノード一覧、システムプロキシの切り替えはクライアント側の機能です。v2rayNGとv2flyNGはAndroid用クライアントで、通常はAndroidのVpnServiceを通じて端末の通信を取り込みます。システムにVPN接続中と表示されても、ローカルの接続サービスが確立したことを示すだけで、リモートノードの認証成功を意味しません。

結論:ノードの要件を1行にまとめてからコアを選ぶ

まず「プロトコル + トランスポート + セキュリティ方式 + flow」を記録します。たとえば「VLESS + TCP + REALITY + xtls-rprx-vision」のように整理し、クライアントの対応状況と照らし合わせましょう。名前だけで選んだり、何度も再インストールしたりするより確実です。

5. 4ステップで実行中のコアと接続経路を確認

トラブルシューティングでは、画面のバージョン、コアのバージョン、ノードの設定を分けて記録します。クライアントの更新でコアも入れ替わる場合と、画面だけが更新される場合があります。サブスクリプションの更新で主に変わるのはノード設定です。これらは別々の作業です。以下ではローカルのSOCKSポート10808を例にします。実際のポートはクライアントの設定を確認してください。

  1. まず起動ログを確認します。ノードを1つ起動し、クライアントのログまたは情報画面でコア名とバージョンを確認します。設定の解析エラーが出た場合は、ネットワークの問題と決めつけず、まず設定項目とコアの互換性を確認してください。
  2. 次にノードの編集画面を確認します。アドレス、リモートポート、UUID、トランスポート、セキュリティ方式を確認してください。サーバーのポートが443でも、通常のTLSを使っているとは限らず、ブラウザーで直接アクセスできるとも限りません。
  3. ローカルの待ち受けを確認します。設定画面のSOCKSインバウンドが127.0.0.1:10808なら、テストするアプリもこのアドレスに接続する必要があります。ポートが使用中の場合は、重複して起動しているクライアントを終了するか、ローカルポートを変更してアプリ側の設定も更新してください。
  4. 最後に通信の取り込みを確認します。デスクトップではシステムプロキシまたはアプリのプロキシ設定が正しい接続先を指しているか確認します。Androidでは接続サービスが起動していることと、対象アプリがアプリ別ルールで除外されていないことを確認してください。複雑なルーティングを追加する前に、まず通常の接続をテストします。

PCにcurlがインストールされ、クライアントが上記のSOCKSポートで実際に待ち受けている場合は、次のコマンドで単発リクエストを実行できます。--socks5-hostnameを使うと、接続先のドメイン名がSOCKSプロキシ側に渡されます。ローカルで直接名前解決した場合との差を切り分けるのに役立ちますが、コアがDNSとルーティングをどう処理したかはログも確認してください。

curl --socks5-hostname 127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com

接続タイムアウト10秒、全体のタイムアウト20秒はテスト上の制限であり、ネットワーク性能を評価する値ではありません。ローカルポートに接続できない場合は、まずクライアントが起動しているか確認します。コアのログにリモート側のハンドシェイク失敗が記録されている場合は、ノードの認証情報とセキュリティ設定を確認してください。ローカルの接続口の問題とリモート認証の問題を混同しないようにしましょう。

6. 端末間の移行:サブスクリプションを再利用し、設定一式はそのまま移さない

サブスクリプションには通常ノード情報が含まれます。一方、設定一式にはローカルポート、DNS、ルーティング、ファイルパス、インバウンド設定なども含まれる場合があります。デスクトップから書き出した設定全体をAndroidクライアントに渡すと、設定項目やパス、接続方式の違いで問題が起きることがあります。まず同じ提供元のサブスクリプションを読み込み、その後、端末ごとにルールを設定する方法が確実です。

移行方法:ノード設定は共通にし、端末側の設定は個別に行う

デスクトップ:v2rayN
  • サブスクリプションを読み込み、選択したノードが実際に使うコアを確認します。
  • ローカルプロキシのポートを控え、他のプロセスとの競合を避けます。
  • 必要に応じてシステムプロキシを設定し、ルーティングルールを1つずつ追加します。
Android:v2rayNG または v2flyNG
  • 名称だけで選ばず、ノードの機能に対応したクライアントを選びます。
  • 同じサブスクリプションを読み込み、セキュリティ方式とflowを確認します。
  • アプリ別プロキシとバックグラウンド実行の権限を個別に設定します。

同じサブスクリプションを使っても、両方の端末にまったく同じ内容が表示されるとは限りません。解析機能、フィルタールール、更新時刻によって結果が変わることがあるため、移行後はそれぞれで接続をテストしてください。

ルーティングも個別に確認しましょう。geosite:cnはドメインのリスト、geoip:cnはIPアドレスのリストに基づいて照合するもので、プロトコル名ではありません。どちらのコアでも同じ表記が使えても、対応するデータファイル、正しいタグ、ルールの順序が必要です。コアを変更した後、一部のサイトだけで問題が起きる場合は、すべてのノードをすぐに変更せず、適用されたアウトバウンドとDNSの結果を先に確認してください。

7. クライアント選びと互換性に関するよくある質問

v2rayNをインストールした後、Xrayのウィンドウも別に開く必要がありますか?

通常、コアのプロセスはクライアントが起動・管理するため、手動で別のプロセスを起動する必要はありません。まずノードに接続してログを確認してください。コアファイルが見つからないと表示された場合は、使用中の配布パッケージの案内に従って必要なコンポーネントを追加します。別のコアプロセスを起動すると同じローカルポートを使用する可能性があり、かえってクライアントが起動できなくなることがあります。

v2rayNGとv2flyNGは自由に入れ替えられますか?

まずノードの機能を確認してください。両方が対応するプロトコルとトランスポートだけを使っている場合は、それぞれに読み込んでテストできます。ノードがREALITYや特定のflowに依存している場合、V2Fly系でも同じ実装が使えるとは限りません。移行前に元の設定を保存し、まず1つのノードを検証してから他の設定を移してください。

Xrayに替えれば必ず速くなりますか?

それだけでは判断できません。同じノード、同じネットワーク、同じテスト先を使い、接続成功率と通信速度を比較してください。サーバー側の回線、トランスポート設定、ルーティング結果などでも変化します。コアの名称だけでは速度は保証されません。

サブスクリプションの更新に成功したのに、プロトコル非対応と表示されるのはなぜですか?

サブスクリプションのダウンロードとコアの起動は別の段階です。接続できないノードの編集画面で、プロトコル、セキュリティ方式、flowを確認し、起動ログに非対応の設定項目が出ていないか調べてください。クライアントがそのパラメーターを認識できない場合は、対応するクライアントとコアに更新します。サブスクリプションを繰り返し更新するだけでは解決しません。

古いVMessノードはVLESSに移行しなければなりませんか?

名称が変わったという理由だけで移行する必要はありません。まず、現在のノードで要件を満たせるか確認してください。プロトコルの移行にはサーバー側にも対応する設定が必要です。クライアントでVMessをVLESSに書き換えるだけでは変換できません。サービス提供元から新しいノード設定を入手して読み込み、個別に接続を確認してください。

選択の順序は、プラットフォームを確認し、ノードの要件を整理し、実際に使うコアを確認してから、ローカルの接続口とルーティングを調べるとよいでしょう。具体的な設定手順はクライアントのインストールと接続ガイドをご覧ください。DNSやルーティングルールを整理する場合は、応用設定をご確認ください。まず必要最小限の構成で接続できる状態にし、機能を少しずつ追加すると、問題の切り分けが容易になります。

v2rayN をダウンロード