v2rayN、v2rayNG、v2flyNGで、起動しても画面が表示されない、すぐ終了する、コアが繰り返し停止する、バックグラウンドに切り替えると切断されるといった場合に対応します。現象の記録、実行環境の確認、設定の切り分け、ポートと権限の確認、最小構成での再テストの順に進めます。この順序なら、ノードやサブスクリプション、システム権限を何度も試す無駄を避けられます。
画面のクラッシュとコアの起動失敗を切り分ける
「クライアントが起動しない」には、2つの層の障害が考えられます。1つ目はGUIプロセス自体が起動していないケースです。たとえばv2rayNをダブルクリックするとタスクマネージャーに一時的にプロセスが表示され、数秒後に消えます。2つ目は画面は使えるものの、Xrayまたはv2flyコアの起動に失敗しているケースです。この場合はトレイアイコンが表示されても、ノードテストやシステムプロキシが機能しません。対処方法は異なるため、まずどちらの層で起きているかを確認すると無駄な操作を減らせます。
調査を始める前に、上書きインストールを繰り返したり、設定フォルダー全体をすぐ削除したりしないでください。クライアント名、OSバージョン、CPUアーキテクチャ、インストーラーの種類、最後に正常動作した時刻に加え、障害前にクライアントやサブスクリプション、ルーティングルールを更新したかを記録します。Windowsでは「タスクマネージャー」→「詳細」を開き、クライアントプロセスが継続しているか確認します。macOSでは「アクティビティモニタ」でプロセス名を検索します。Androidではアプリが前面に残っているか、通知バーのVPN状態が表示されているかを確認します。
- 画面がまったく表示されない:まずランタイム、インストーラーのアーキテクチャ、ファイルアクセス権、システムによるブロック記録を確認します。
- 画面が表示された直後に消える:アプリのログ、古い設定との互換性、設定フォルダーへの書き込み権限を確認します。
- 画面は正常だがコアが停止する:生成された設定、ノードの項目、DNS、ルーティングルール、リスニングポートを確認します。
- 前面では正常だがバックグラウンドで切断される:Androidのバッテリー設定、バックグラウンド動作の権限、VPNの許可状態を確認します。
Windowsのランタイムとインストールフォルダー
Windowsでv2rayNをダブルクリックしても反応しない場合、まず実行環境の不一致を疑います。フレームワーク依存型のインストーラーには対応する.NET Desktop Runtimeが必要です。自己完結型はサイズが大きい代わりにランタイムをプログラムに含みます。「このアプリを実行するには.NETのインストールまたは更新が必要です」と表示されたら、メッセージに示されたアーキテクチャとメジャーバージョンに合わせて対応します。64ビットシステムでは通常x64を選び、ARMデバイスではARM64を選択します。アーキテクチャが合わないと、インストールできても起動しないことがあります。
ランタイムをインストールしたら、まずWindowsを再起動し、解凍済みの固定フォルダーから起動します。圧縮ファイルのプレビュー画面から直接実行したり、特別な書き込み権限が必要なシステムフォルダーに配置したりしないでください。現在のユーザーが読み書きできる場所にフォルダー全体を置き、実行ファイル、コアファイル、設定サブフォルダーがすべて完全に解凍されていることを確認します。パスが長すぎる場合や、フォルダー名に特殊な制御文字が含まれる場合は、短いパスに移して再テストします。
エラー:You must install or update .NET to run this application.
原因と対処:現在のインストーラーが依存する.NET Desktop Runtimeがない、またはメジャーバージョンが合っていません。ダイアログに表示されたframework、version、architectureに対応するランタイムをインストールし、システムを再起動してから実行します。
エラー:VCRUNTIME140.dll was not found
原因と対処:クライアントまたは付属コンポーネントに必要なVisual C++ランタイムが不足しています。システムアーキテクチャに合うMicrosoft Visual C++ 2015—2022 Redistributableをインストールし、クライアントフォルダーをもう一度完全に解凍します。
エラー:Access to the path is denied
原因と対処:設定、ログ、または一時ファイルを書き込めません。クライアントを現在のアカウントで書き込み可能なフォルダーへ移し、ファイルの「プロパティ」で読み取り専用やシステムによるブロック状態を確認します。
Windowsでの確認手順
- 「設定」→「アプリ」→「インストールされているアプリ」を開き、必要なランタイムがインストール済みか確認し、x64、x86、ARM64のアーキテクチャも照合します。
- インストーラーまたは圧縮ファイルを右クリックして「プロパティ」を選びます。下部にブロック解除の項目があれば、ファイルの入手元を確認したうえで解除し、完全に解凍します。
- 古いフォルダーは上書きせず、名前を変更して残します。システムアーキテクチャに合うv2rayNインストーラーを再入手し、新しいフォルダーに解凍します。
- 初回起動ではサブスクリプションをまだインポートせず、システムプロキシも有効にしません。メインウィンドウが30秒以上安定して表示されるかだけを確認します。
- ウィンドウが閉じる場合は、「イベント ビューアー」→「Windowsログ」→「アプリケーション」を開き、障害発生時刻付近の.NET RuntimeまたはApplication Errorの記録を探します。
確認する項目:
アプリケーション名:v2rayN.exe
障害モジュール名:実際に表示されたDLLまたはランタイムモジュールを記録
例外コード:完全なコードを記録
障害発生時刻:ダブルクリックした起動時刻と照合
アプリケーションのパス:圧縮ファイルの一時フォルダーでないことを確認
結論:新しいフォルダーで空の設定なら起動できる場合、問題はランタイムではありません
同じインストーラーが新しいフォルダーで、古い設定をインポートせず安定して起動するなら、GUIの実行環境はおおむね正常です。次はランタイムの再インストールではなく、サブスクリプションとルーティング設定を1つずつ移行します。
設定ファイルの破損とアップデートによる非互換
クライアントの更新後にクラッシュする場合、原因はサブスクリプションURLそのものではなく、旧バージョンが残したGUI設定、データベース、生成設定と新バージョンの項目が合わないことがよくあります。手動でJSONを編集した際にカンマ、引用符、括弧が欠けているケースもあります。コアが設定を読み込んだ直後に終了する場合、v2rayNのメイン画面は残っていても、ログには設定の読み込み失敗が繰り返し記録されます。Androidでは、異常な共有リンクをインポートしたことで特定の設定項目が起動できなくなることもあります。
設定の問題を処理するときは、まずバックアップを取り、その後に切り分けテストを行います。クライアントを終了し、関連プロセスが完全に終了したことを確認してから、元の設定フォルダー名を変更し、新しい空の設定で起動します。空の設定で動作するなら、プログラム本体とランタイムはおおむね正常です。復元時は、まず動作確認済みのVMessまたはVLESSノードを1つだけインポートし、次にサブスクリプション、最後にカスタムDNSとルーティングルールを戻します。古いファイルを一度にすべて上書きしないでください。
エラー:failed to load config files
原因と対処:コアが生成設定を読み込めません。JSON構文の誤りや、現在のコアが受け付けない項目が原因として考えられます。デフォルト設定に戻し、ノードを1つだけ再インポートしてから、DNSとルーティング設定を順に追加します。
エラー:invalid character looking for beginning of value
原因と対処:設定内容が有効なJSONではありません。ファイルが空、途中で切れている、または別のテキストが混入している可能性があります。壊れたファイルを手で修正し続けず、クライアント画面から設定を再生成します。
エラー:failed to parse server address
原因と対処:ノードのアドレス欄にプロトコルの接頭辞、空白、無効な文字が含まれています。ノード編集画面ではサーバーのドメイン名またはIPだけを残し、ポート、ユーザーID、トランスポート層、TLS設定を個別に確認します。
| テスト段階 | 残す内容 | 判定結果 |
|---|---|---|
| 空の設定で起動 | クライアントのデフォルト設定のみ | まだクラッシュする場合はプログラムファイル、ランタイム、権限を確認 |
| 単一ノードで起動 | VMessまたはVLESSの設定を1つ | 失敗した場合はノード項目とコアのログを確認 |
| サブスクリプションの復元 | サブスクリプショングループを1つ | 失敗した場合は問題のある項目を削除し、サブスクリプションを再更新 |
| ルールの復元 | DNS、ルーティング、システムプロキシの設定 | 1項目ずつ有効にし、失敗の引き金になった設定を特定 |
10808、10809ポートの競合
クライアント画面は正常なのに接続するとコアがすぐ停止する、またはシステムプロキシを有効にするとウェブページにまったくアクセスできない場合は、ローカルのリスニングポートを確認します。v2rayNでは10808をSOCKSポート、10809をHTTPポートとして使う設定がよくありますが、実際の値はバージョンと「設定」→「パラメータ設定」のローカルポートにより異なります。古いプロセスが終了していない、別のクライアントが同時に動作している、他のローカルサービスが同じポートを使っていると、コアのバインドに失敗します。
すべてのv2rayNを完全に終了し、タスクマネージャーでv2rayN、Xray、v2fly関連のプロセスが終了したことを確認します。その後、PowerShellでリスニング中のプロセスを調べます。コマンドでプロセスIDが分かったら、まずプロセス名を特定し、正体不明のシステムプロセスを直接終了しないでください。占有者が古いクライアントなら正常終了または再起動で解決できます。必要なサービスが使っている場合は、クライアントのパラメータ設定で空いているポートに変更し、システムプロキシも同じ値に更新します。
Get-NetTCPConnection -LocalPort 10808,10809 -State Listen |
Select-Object LocalAddress,LocalPort,OwningProcess
Get-Process -Id <上一步显示的进程编号>
エラー:failed to listen TCP on 127.0.0.1:10808
原因と対処:10808は別のプロセスが使用しています。古いクライアントを終了するか、「設定」→「パラメータ設定」で空いているポートに変更してからコアを再起動します。
エラー:bind: Only one usage of each socket address is normally permitted
原因と対処:同じアドレスとポートを重複してバインドすることはできません。OwningProcessに対応するアプリを特定し、リスナーを1つだけ残します。クライアントを2つ同時に起動していないかも確認してください。
- ポートを変更したら、まずシステムプロキシを無効にし、コアを再起動してからシステムプロキシを再び有効にします。システムが古いポートを参照し続けるのを防げます。
- ブラウザーや他のアプリでプロキシを手動設定している場合も、SOCKSとHTTPのポートを新しい値に変更します。
- ポートが空いているように見えてもリッスンできない場合は、システムを再起動して再テストし、終了途中の残留プロセスや一時的な占有を切り分けます。
- 競合を避けるためにポートを何度もランダムに変更しないでください。最終的なポート番号を記録しておくと、システムプロキシやルーティングルールを確認しやすくなります。
結論:ポート競合はローカルの待ち受けに影響するだけで、ノードの無効化を意味しません
リモートサーバーへの接続前にログへbindまたはlistenエラーが出ているなら、障害はローカルで発生しています。まずローカルポートの待ち受けを復旧し、その後にノードの遅延をテストします。両方を同じ段階で判断しないでください。
macOSの初回起動とネットワーク権限
macOSで初めてv2rayNを実行すると、システムが確認前のアプリを開くのを阻止する場合があります。アイコンをクリックすると「開発元を確認できない」という表示が出るのが典型で、ランダムにウィンドウがクラッシュするケースとは異なります。まず警告を閉じ、「システム設定」→「プライバシーとセキュリティ」を開き、安全性の項目で直前にブロックされたアプリを探して「このまま開く」を選び、現在のアカウントで認証します。一度確認を完了すれば、「アプリケーション」フォルダーから通常どおり起動できます。
クライアントは開くのにネットワークを制御できない場合は、システムプロキシ変更の許可、ローカルネットワークへのアクセス、VPN関連の確認を続けます。ダイアログで許可を拒否すると、画面上は接続済みでもシステム通信がローカルプロキシを通らないことがあります。クライアントを終了し、「システム設定」→「プライバシーとセキュリティ」で関連権限を確認してから再起動し、必要な要求を許可します。アプリがダウンロードフォルダーや一時マウント先にある場合は、起動場所が変わらないよう「アプリケーション」フォルダーへ移してください。
エラー:開発元を確認できません
原因と対処:システムがアプリの起動をまだ許可していません。「システム設定」→「プライバシーとセキュリティ」で該当するブロック記録を見つけ、「このまま開く」を選んで再起動します。
エラー:Operation not permitted
原因と対処:プロセスが設定フォルダー、ネットワーク設定、または付属コアへアクセスする際にシステム権限でブロックされています。アプリを「アプリケーション」フォルダーへ移し、現在のアカウントにアクセス権があることを確認し、システムの許可要求にもう一度対応します。
エラー:Permission denied
原因と対処:コアファイルに実行権限がないか、アプリのフォルダーへ書き込めません。内部ファイルだけを個別に置き換えず、アプリ一式を再インストールし、配置先の読み書き権限を確認します。
- ダウンロードしたインストーラーがMacのプロセッサアーキテクチャに合っていることを確認し、アプリ全体を「アプリケーション」フォルダーへ移します。
- 初回起動がブロックされたら、「システム設定」→「プライバシーとセキュリティ」を開き、直前に発生した該当記録だけを処理します。
- 起動後はまずシステムプロキシを無効にし、メイン画面とコアが安定して動作することを確認します。
- ノードを1つ選んで遅延をテストし、その後システムプロキシを有効にします。権限の確認が表示されたら、対象範囲を読んで許可します。
- アップデート後に異常が出た場合は、設定をバックアップして新しいアプリのコピーで再テストします。旧プログラムの内部ファイルを新バージョンに混在させないでください。
Androidのバックグラウンド制限とVPN許可
v2rayNGまたはv2flyNGが前面では正常に動作するのに、画面をロックして数分後に切断される場合は、ノードを何度も変更する前にバッテリー最適化とバックグラウンド動作の設定を確認します。Androidは省電力モード、待機状態、メーカー独自のバックグラウンド制御によって、長時間動作するネットワークサービスを制限します。通知バーからVPN状態が消える、アプリに戻ると再接続が必要になる、ネットワーク切り替え後に自動復旧しないといった症状が典型です。
「設定」→「アプリ」→「v2rayNG」または「v2flyNG」→「バッテリー」を開き、バックグラウンド動作を許可するか「制限なし」に変更します。機種によってメニュー名は少し異なります。続いて省電力モードが有効になっていないか確認し、アプリの通知権限も許可します。常時接続の状態表示には通常、フォアグラウンドサービスの通知が必要です。初めてVPN接続を確立するときはシステムの許可ダイアログが表示されます。許可を確認しない限り、クライアントはVPNトンネルを作成できません。
- 前面でもすぐクラッシュする:アプリのキャッシュを削除して端末を再起動します。それでも改善しない場合は必要な設定をバックアップし、プロセッサに対応する正式版を再インストールします。
- 画面ロック後に切断される:バッテリー設定を「制限なし」に変更し、バックグラウンド動作を許可して、このアプリの自動スリープを無効にします。
- 接続をタップしてもVPNアイコンが表示されない:接続をもう一度実行してシステムのVPN許可を確認します。別のVPNセッションがある場合は、先に正常切断してから試してください。
- Wi-Fiとモバイルネットワークの切り替え後に接続できない:一度切断して再接続し、ログでサーバーのドメイン名が再解決されているか確認します。
- インポート後に特定のノードでクラッシュする:その項目を削除し、共有リンクまたはサブスクリプションから再インポートします。不足している項目を手作業で組み立てないでください。
v2rayNGが画面ロックですぐ切断される場合は?
「設定」→「アプリ」→「v2rayNG」→「バッテリー」を開き、「制限なし」またはバックグラウンド動作を許可する設定を選びます。省電力モードがこのアプリを個別に制限していないことも確認し、接続状態の通知を残してください。
再起動後もノード一覧は表示されるのに、接続ボタンが反応しない場合は?
終了していないVPNセッションがないか確認し、正常に切断してからアプリを再起動します。その後ノードを1つ選んで再接続し、システムの許可ダイアログでVPN要求を承認します。
v2flyNGは開くのに、サブスクリプション更新時に終了する場合は?
現在の接続を停止してサブスクリプションURLをバックアップし、問題のあるグループを整理してから、サブスクリプションを1つだけ追加して再テストします。特定のサブスクリプションだけで問題が起きるなら、返された内容が有効か、項目数に異常がないか確認します。
アプリのアップデート後、すべてのノードが起動できない場合は?
まず最小構成を新しく作ってテストし、複雑なルーティングをすぐに戻さないでください。最小構成が正常なら、サブスクリプション、DNS、分流ルールを順番に復元し、互換性のない項目を特定します。
接続して数秒後に自動停止する場合、まずどこを確認すべき?
すぐにアプリのログを開き、停止直前の最後の20行を記録します。DNS、TLS、接続タイムアウトが出ていればノードを確認し、permission、VPN、バックグラウンド終了が出ていればシステム権限を確認します。
ログによる切り分けと最小構成での再テスト
クラッシュの調査では「接続できない」という結果だけを見ないでください。ログの最終行はプロセス終了後のまとめであることが多く、本当の原因は数行前に出ています。起動ボタンを押す前から時刻を記録し、障害発生後30秒以内にログを確認します。「画面のプロセス、コアの起動、ローカル待ち受け、DNS解決、リモート接続」の順に、最初のエラーを探してください。最初のエラーは、後続の連鎖的なエラーより重要です。
修復後は最小構成で再テストします。ノードは1つだけ残し、デフォルトルートを使用し、TUN、カスタムDNS、自動サブスクリプション更新は無効にします。コアが5分間連続稼働し、ローカルポートが待ち受けを続け、ウェブアクセスも正常であることを確認してから、機能を1つずつ戻します。各項目を戻すたびに少なくとも1回テストすれば、再び終了した際に具体的な変更を特定できます。
| ログのキーワード | 障害の層 | 優先して行うこと |
|---|---|---|
.NET Runtime、Application Error |
画面の実行環境 | ランタイムのバージョン、アーキテクチャ、イベント記録を確認 |
failed to load config、invalid character |
設定の解析 | 古い設定を切り離し、最小構成から再構築 |
bind、listen、address in use |
ローカル待ち受け | 10808、10809、または現在設定されているポートを確認 |
permission denied、not permitted |
システム権限 | アプリのフォルダー、実行権限、ネットワーク許可を確認 |
timeout、failed to resolve |
DNSまたはリモート接続 | サーバーアドレス、DNS、現在のネットワークを確認 |
安定性の再テスト項目
- クライアントのメイン画面が少なくとも5分間表示され、自動終了や繰り返し起動が発生しない。
- コアのログに正常な起動記録が1回だけ残り、数秒おきに再起動しない。
- 現在の設定で指定したローカルポートをクライアントプロセスが待ち受け、別の占有者が存在しない。
- システムプロキシを無効にすると通常の直接接続ができ、有効にすると通信が現在のクライアントを通る。
- Windowsでログアウトして再ログイン、macOSでアプリを再起動、またはAndroidを10分間画面ロックした後も、接続状態が想定どおりである。
- サブスクリプションとルーティングルールを復元した後にログを再確認し、新たな設定解析エラーがないことを確認する。
結論:一度に戻す変数は1つだけにする
空の設定、単一ノード、システムプロキシ、サブスクリプション、DNS、ルーティングルールの順に復元します。ある段階から再びクラッシュしたら、その段階を戻して該当するログを確認します。ランタイムから調査し直す必要はありません。
修復後も起動しない場合の切り分け
新しいフォルダー、適合するアーキテクチャ、正しいランタイム、空の設定を使っても起動できない場合は、システムイベント記録とクライアントログを保存し、障害モジュールを重点的に確認します。同じインストーラーが同じバージョンの別のシステムアカウントで動作するなら、現在のアカウントのフォルダー権限、環境変数、セキュリティポリシーも調べます。すべてのアカウントで失敗する場合は、完全なインストーラーを再入手し、OSバージョンがクライアントの現行バージョン要件を満たしているか確認します。
画面は安定しているのにコアが失敗し続ける場合は、問題をコア設定へ切り替えて調べます。VMessとVLESSはノードプロトコルの一部にすぎず、サーバーアドレス、ポート、ユーザーID、トランスポート方式、TLS、セキュリティオプション、パスをすべて一致させる必要があります。サブスクリプションの更新成功は、クライアントが設定内容を取得できたことを示すだけで、すべてのノードが接続できるとは限りません。最初に出たコアのエラーから、DNS、ハンドシェイク、タイムアウト、認証のどれかを切り分けます。
エラー:failed to find an available destination
原因と対処:出力先を解決できないか、利用可能なアドレスがありません。ノードのサーバーアドレスに余分な空白がないか確認し、デフォルトDNSに戻してコアを再起動し、現在のネットワークで再テストします。
エラー:context deadline exceeded
原因と対処:制限時間内に接続が完了しませんでした。ネットワーク、サーバーポート、トランスポートパラメータが関係している可能性があります。まず既知の動作する別ノードをテストし、現在のノードのアドレス、ポート、TLS設定を確認します。
エラー:connection refused
原因と対処:宛先アドレスには到達できますが、対象ポートが接続を拒否しています。ノードのポートに入力ミスがないか確認し、設定提供元にサービス状態を問い合わせます。
- OSバージョン、クライアントバージョン、コアの種類、インストーラーのアーキテクチャ、障害発生時刻を記録します。
- 最初のエラーの前後約20行をログから抜き出し、サブスクリプションURLと認証項目は公開しません。
- 空の設定で起動できるか、単一ノードで起動できるか、ポートが正常に待ち受けているかを説明します。
- アップデート、サブスクリプションのインポート、ルーティングの変更、システム更新のどの後に障害が起きたかを説明します。
- 再現手順を残し、「使えない」とだけ説明して具体的な操作順を省かないでください。