V2FlyとXrayは共通の技術基盤から発展した2つのコア系統で、v2rayN・v2rayNG・v2flyNGは設定、サブスクリプション、システムプロキシを扱うクライアントです。これらの名前を見ても階層が分かりにくい方に向けて、実行中のコア、サブスクリプションの互換性、アップデート時に確認すべきポイントを解説します。
まずは混同しやすい4つの概念を分ける
結論から言うと、Project Vはエコシステムの背景、V2FlyとXrayはコア系統、VMessとVLESSはプロトコルまたは設定機能、v2rayN・v2rayNG・v2flyNGは日常的に操作するクライアントです。同じ階層ではないため、単純に横並びで比較することはできません。
コアは実際のデータ処理を担当します。インバウンド、アウトバウンド、DNS、ルーティング、トランスポートの設定を読み込み、ローカルポートを待ち受け、ルールに従って通信先を決めます。たとえばクライアントでローカルのSOCKS入口を 127.0.0.1:10808 に設定した場合、接続の受け付け、ドメインルールとの照合、リモート接続の確立を行うのはボタンのある画面ではなくコアです。
クライアント画面は複雑な設定を操作しやすいメニューに変換します。サブスクリプションの追加、ノードの選択、システムプロキシの切り替え、ログの確認、コア設定の生成などは、通常クライアントが担当します。画面を閉じた後も接続が続くかどうかは、クライアントの動作方式とコアプロセスが稼働し続けているかによって決まります。
名称が属する階層
- Project V:プロキシコア、プロトコル、設定形式、関連ツールを中心に形成されたオープンソース技術エコシステムです。
- V2Fly:コミュニティがメンテナンスするコア系統で、主要プロジェクトは一般にv2ray-coreと呼ばれ、V2Rayのモジュール構造を受け継いでいます。
- Xray:近いコード基盤から発展した独立したコア系統で、主要プロジェクトは一般にXray-coreと呼ばれます。
- VMess、VLESS:ノード設定で使われるプロトコルです。プロトコル名だけではクライアント名は分からず、すべてのトランスポートパラメータに互換性があるとも限りません。
- v2rayN、v2rayNG、v2flyNG:デスクトップまたはAndroid向けのクライアントで、サブスクリプション管理、ノード編集、コアの呼び出しを担当します。
結論:まず階層を確認してから問題を切り分ける
インポートに失敗したら、まずクライアントがサブスクリプションを認識できるか確認します。起動に失敗したらコアのログを確認し、Webサイトへの振り分けが想定と違う場合はルーティングとDNSを調べます。3つの問題を混同すると、設定ミスを特定できないまま再インストールを繰り返しがちです。
Project VがV2FlyとXrayの2路線に分かれた経緯
Project Vの初期はV2Rayを中心名称とし、インバウンド、アウトバウンド、ルーティング、DNS、基盤トランスポートを組み合わせ可能なモジュールへ分割することに重点を置いていました。ユーザーが目にする inbounds、outbounds、routing.rules などの設定構造は、まさにこの設計思想を反映しています。
2020年前後から、従来のコミュニティにおけるメンテナンス体制と貢献方法が変化しました。V2Flyコミュニティはv2ray-coreのメンテナンスを続け、互換性、モジュール保守、既存設定の発展を重視してきました。一方、Xray-coreは共通の技術基盤から独立して発展し、独自のリリースサイクル、拡張機能、実装方針を形成しています。
「共通の出自」が「現在も完全に同じ」を意味するわけではありません。インバウンド、アウトバウンド、ルーティングルール、VMess、VLESS、SOCKS、HTTPのローカル入口など、多くの概念は今も共通していますが、具体的なフィールド、初期値、トランスポート拡張、新機能の対応時期は異なる場合があります。設定をコピーする際は、コアが起動したからといって、すべてのフィールドが意図どおり有効になるとは限りません。
| 比較項目 | V2Fly系 | Xray系 |
|---|---|---|
| 代表的なコア名 | v2ray-core | Xray-core |
| バージョンの見分け方 | 現在は5.x系が一般的 | 現在は1.x系が一般的 |
| 主なライセンス | MIT | MPL-2.0 |
| 設定の基盤 | JSON設定とモジュール式のインバウンド、アウトバウンド | JSON設定とモジュール式のインバウンド、アウトバウンド |
| 互換性の判断 | プロトコル、トランスポート、セキュリティパラメータ、バージョンを確認 | プロトコル、トランスポート、セキュリティパラメータ、バージョンを確認 |
| 推奨される対応 | 検証済みのV2Fly設定を使う場合は、同じコア系統を維持する | サブスクリプションでXrayの機能が明示的に必要な場合は、要件に合わせて使う |
ライセンスの違いが意味すること
MITとMPL-2.0はいずれもコードの公開利用、研究、再配布を認めていますが、二次開発時に必要な表示やソースコード公開の義務は同じではありません。一般ユーザーがクライアントをインストールする際、これだけを理由に選択する必要は通常ありません。コアを自作プログラムに組み込む、ソースコードを変更する、再配布するといった場合に、付属するライセンス文書を項目ごとに確認します。
クライアントにも独自のライセンスがあります。v2rayN、v2rayNG、v2flyNGは、現在一般的な配布コードでGPL-3.0を採用しています。クライアントのライセンスとコアのライセンスは分けて考える必要があります。画面側のライセンスによって、呼び出している独立したコアが自動的に同じライセンスへ変わるわけではありません。
結論:互換性は系統の知名度ではなく設定機能で判断する
既存ノードが安定して動作しているなら、別路線に新機能が追加されたからといって、すぐ切り替える必要はありません。サブスクリプションが特定のトランスポートフィールドを明示的に要求している、現在のコアが設定を認識しない、ログに機能不足が示される、といった場合に限って、コアの切り替えを検討する根拠があります。
v2rayN、v2rayNG、v2flyNGが採用するコア
v2rayNはデスクトップクライアントで、Windows、macOS、Linuxに対応しています。プロトコルでも単一コアの別名でもありません。7.x系では、サブスクリプション、ルーティング、システムプロキシ、TUN、コア管理などの画面機能を提供します。一般的な設定はXray-coreで動作しますが、対応する設定ではV2Flyコアを選択することもできます。
v2rayNGはAndroidクライアントで、主にXray-coreを呼び出します。共有リンク、サブスクリプションのグループ、ルーティング設定、VPNサービスの入口をモバイル画面にまとめています。v2flyNGもAndroid向けですが、コア路線はV2Flyに対応します。画面が似ていても、コアの出自や機能の対応時期まで同じとは限りません。
サブスクリプションサービスが提供するのはノードデータであり、特定のクライアントが端末にインストールされるわけではありません。標準的なVMessまたはVLESSの共有リンクは複数のクライアントで認識できる場合がありますが、特定のトランスポート拡張を使う場合はコアの対応状況を確認する必要があります。ノード名が表示されるのはリンクの解析に成功したことを示すだけで、接続パラメータが完全にサポートされたことを意味しません。
| クライアント | プラットフォーム | 主なコアとの関係 | 適した用途 |
|---|---|---|---|
| v2rayN | Windows、macOS、Linux | デスクトップで対応コアを管理でき、Xray-coreの利用が一般的 | デスクトップでのサブスクリプション管理、システムプロキシ、ルーティング、TUN |
| v2rayNG | Android | Xray-core | サブスクリプションがXrayに明確に対応している場合、または関連機能が必要な場合 |
| v2flyNG | Android | v2ray-core | V2Fly路線を使い、コア系統をそろえる場合 |
現在実行中のコアを確認する方法
バージョンを確認
v2rayN 7.xで「ヘルプ」→「バージョン情報」を開き、まずクライアントのバージョンを記録します。クライアントのバージョンとコアのバージョンは別の数字なので、混同しないでください。
種類を確認
「設定」→「パラメータ設定」→「Coreタイプ」を開き、現在のノード設定に対応するコアの選択を確認します。マイナーバージョンによって項目の位置は変わる場合がありますが、名称には通常Coreまたはコアが含まれます。
ログを読む
ノードを起動したら実行ログを開きます。冒頭には通常
Xray 1.xまたはV2Ray 5.xと表示されます。クライアントのアイコンから推測するより確実です。モバイル側を確認
v2rayNGまたはv2flyNGで「設定」→「バージョン情報」を開き、クライアントのバージョンを記録します。その後、起動ログに表示されるコア名とバージョン番号を確認します。
入口をテスト
ログにローカル入口の待ち受けが表示されていることを確認します。SOCKSの一般的な例は
127.0.0.1:10808です。ポートが使用中と表示された場合は、ポートを変更するか、使用中の古いプロセスを終了します。
サブスクリプション、プロトコル、コアの互換性を判断する方法
サブスクリプションは通常、複数のノード項目で構成されています。クライアントは更新後にVMess、VLESSなどの共有内容を解析し、コアが読み取れる設定を生成します。この流れには2つの条件があります。クライアントがサブスクリプション形式を認識できること、そしてコアが変換後のプロトコルとトランスポートパラメータをサポートしていることです。
VLESSを例にすると、vless:// で始まっているだけでは不十分です。サーバーアドレス、ポート、ユーザー識別子、暗号化フィールド、トランスポート方式、サーバー名、セキュリティ層のパラメータも確認します。重要なフィールドが欠けていると、接続タイムアウト、ハンドシェイク失敗、設定エラーとしてログに現れることがあります。
VMessも「V2Rayに対応していれば必ず接続できる」というわけではありません。システム時刻のずれ、ユーザー識別子の誤り、トランスポート経路の不一致、TLSサーバー名の誤りなどが失敗の原因になります。切り分けるときはログの最初のエラーから確認し、DNS、ルーティング、プロトコルのパラメータを同時に変更しないでください。
{
"inbounds": [{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks"
}],
"routing": {
"domainStrategy": "AsIs",
"rules": [{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}]
}
}
互換性を確認する4ステップ
- まず解析を確認:サブスクリプション更新後にノードが表示されるか、ノードのアドレスとポートがそろっているかを確認します。ノードが表示されない場合は、サブスクリプションURL、内容の形式、更新処理に問題があることが多いです。
- 次に起動を確認:ノードを選択してコアのログを見ます。対応していない設定フィールドがあると、接続の確立前にログへエラーが出ることが一般的です。
- 続いてハンドシェイクを確認:コアが正常に起動しているのに接続できない場合は、プロトコル、セキュリティ層、トランスポート方式、サーバー名、システム時刻を確認します。
- 最後に振り分けを確認:ノードは接続済みなのに一部のWebサイトで問題がある場合は、DNS、ルーティングルール、システムプロキシ、TUNを確認します。サブスクリプション形式を何度も変更するのは避けてください。
結論:ノード表示、コア起動、接続成功は別々の状態
ノードが一覧に表示されるのは、クライアントが解析を完了したことを示すだけです。ログに待ち受けポートが表示されるのは、コアが起動したことを示すだけです。接続先から正常な応答が返って初めて、プロトコル、トランスポート、DNS、ルーティングが正常に連携していると判断できます。
一般ユーザーが選択・メンテナンスする方法
デスクトップではまずv2rayNを使い、コアの選択は検証済みの設定とサブスクリプションの要件に合わせます。Androidでは、サブスクリプションの説明がXrayの機能を前提としているならv2rayNGを、既存設定がV2Flyベースで長期安定しているならv2flyNGを使うと、移行時の変数を減らせます。
アップデート時は、まずクライアントの更新とコアの更新を分けて考えます。クライアント更新ではメニュー、サブスクリプションの保存方法、システムプロキシの動作が変わる場合があります。コア更新では設定検証、プロトコル実装、ルーティング機能が変わる可能性があります。一度に1つの層だけ更新すると、変化の原因をログから判断しやすくなります。
移行前に、クライアントのバージョン、コアのバージョン、ローカル待ち受けポート、現在のルーティングモード、DNS設定を記録します。デスクトップなら、少なくともSOCKSポートが 10808 かどうか、システムプロキシがグローバルかルールか、TUNが有効かを控えておきます。サブスクリプションURLだけでは、これらのローカル設定を完全には復元できません。
- 安定性を優先:既存のノード、DNS、ルーティングが正常なら、一定の周期で更新し、コア系統を頻繁に切り替える必要はありません。
- 要件を優先:特定のプロトコル拡張が必要な場合は、まずサーバーとサブスクリプションの説明を確認し、その機能を実装するコアを選びます。
- ログを優先:接続に失敗したら、起動ログと最初のエラーを保存し、複数のパラメータを続けて変更しないようにします。
- 設定を優先:同名のノードでも、クライアントによって生成される設定が異なる場合があります。ノード名だけでなく、実際のフィールドを確認してください。
- 階層ごとに更新:クライアント、コア、サブスクリプションを分けて更新し、更新のたびに接続と振り分けをテストします。
v2rayNはV2Flyコアと同じですか?
同じではありません。v2rayNはデスクトップクライアントで、7.x系ではコアと設定を管理できます。「設定」→「パラメータ設定」→「Coreタイプ」を開き、起動ログで実際にXray-coreとv2ray-coreのどちらが動作しているか確認してください。
1つのサブスクリプションを3種類のクライアントにインポートできますか?
標準的なVMess、VLESSの項目は複数のクライアントで解析できることが多いですが、特定のトランスポートフィールドは互換性がない場合があります。インポート後はまずノード数を確認し、1つずつ起動してログを読みます。「表示できた」ことを「完全対応」とみなさないでください。
コアを変更したら元の設定で起動できなくなったのはなぜですか?
まずログにあるunknown field、invalid value、unsupportedなどのエラーを探し、トランスポート、セキュリティ層、ルーティングのフィールドを確認します。元のコアに戻すと動作するなら、問題はサブスクリプションアカウントよりも設定の差異にある可能性が高いです。
ポート10808が使用中の場合はどうすればよいですか?
まず、バックグラウンドで動作している古いクライアントまたはコアプロセスを終了します。並行して動かす必要がある場合は、ローカル待ち受け設定を未使用のポートへ変更し、ブラウザやシステムプロキシの接続先も同じポートに変更します。
v2rayNGとv2flyNGを同時にインストールする必要はありますか?
通常は必要ありません。サブスクリプションが必要とするコアに応じて、どちらか一方を選びます。互換性を比較するために個別にテストすることはできますが、2つのクライアントでAndroidのネットワーク接続を同時に制御しないでください。
要するに、Project Vは個別にインストールするソフトウェアではなく、技術的な関係図です。V2FlyとXrayがコアを実装し、3種類のクライアントがサブスクリプション、ノード、ルーティング、システムネットワークの入口を操作画面にまとめます。問題が起きたら、クライアント、コア、プロトコル、トランスポート、DNS、ルーティングの順に確認すると、単にソフトウェアを入れ替えるよりも明確に切り分けられます。