まず、手元にあるものがサブスクリプションURL、単一の共有リンク、コアの実行設定のどれかを見分けてから、適切な方法でインポートしましょう。ノードの移行やサブスクリプション形式のエラーを確認したい方に向けて、Base64エンコードとプロトコルのパラメーターの違い、v2rayNへのサブスクリプションの登録やノードのエクスポート方法を解説します。JSONを共有リンクに変換すると、ルーティング、DNS、複数のアウトバウンド設定を引き継げない点も確認できます。
まず確認:サブスクリプションURL・共有リンク・実行設定の違い
まずはテキストの先頭を確認し、拡張子を変更するのは後にしましょう。https://で始まるURLは、サブスクリプションの取得先の場合もあれば、アカウントページの場合もあります。vmess://またはvless://で始まる文字列は、通常、単一ノードの共有リンクです。波括弧で始まり、inboundsとoutboundsを含むJSONは、コアの実行設定である可能性があります。ファイル名だけで判断せず、内容も確認してください。
サブスクリプションURL
おすすめクライアントがURLにアクセスし、提供元が現在配布しているノード一覧を取得します。ノードの変更後に再取得できますが、返される形式がクライアントに対応している必要があります。
向いている用途:継続的な利用、ノードや設定の更新。
単一ノードの共有リンク
サーバーアドレス、認証情報、通信パラメーターを1つのテキストにまとめたものです。インポートすると独立したノードとして登録され、提供元が設定を変更しても自動では更新されません。
向いている用途:一時的なテスト、少数ノードの移行、パラメーターの個別確認。
ネイティブJSON設定
コアの動作を直接定義する形式です。待ち受けポート、DNS、ルーティング、複数のアウトバウンドなどが含まれる場合があります。対応するコアと設定構文を確認してください。
向いている用途:実行時の動作を一通り保持したい場合、管理者からカスタム設定を受け取った場合。
ここでサブスクリプションURLをおすすめするのは、継続的に更新しながら使う場合です。JSONより高機能という意味ではありません。サブスクリプションは通常ノードの配布に使われ、完全な設定ファイルは動作全体を定義します。用途が異なります。
Base64サブスクリプション:エンコードされるのはノード一覧であり、暗号化トンネルではない
従来のV2Rayサブスクリプションでは、複数の共有リンクを改行で連結し、テキスト全体をBase64でエンコードする形式がよく使われます。デコードすると、VMessとVLESSが混在する場合も、同じプロトコルだけの場合もあります。Base64はバイト列を印字可能な文字列に変換するエンコード方式です。ノードの認証情報を秘匿するものではなく、接続時に使うプロトコルも変わりません。
「サブスクリプションの応答が長い文字列だった」からといって、データが壊れているとは限りません。一方、「ブラウザーでURLを開けた」からといって、形式が正しいとも限りません。サーバーがログインページ、有効期限切れの通知、アクセス認証ページを返している場合、クライアントはノードとして解析できません。
- まずURLの入手元を確認:提供元のクライアント向けサブスクリプションページからコピーしてください。ブラウザーのアドレスバーに表示されたアカウントページのURLは使わないでください。
- 次に応答内容を確認:返された内容をローカルで確認します。
<htmlやログイン案内が含まれている場合は、アカウントとURLを先に確認してください。 - 2段階のエンコードに注意:従来形式ではサブスクリプション全体がBase64でエンコードされている場合があります。また、その中の従来形式のVMess共有リンクも、ペイロードがBase64でエンコードされていることがあります。
- 何度もデコードしない:読める共有リンクになった時点で終了してください。繰り返し処理するとパラメーターが壊れたり、正常なテキストを文字化けと誤認したりするおそれがあります。
VMess・VLESSの共有リンクに含まれる情報
従来形式のVMess共有リンクは、vmess://にBase64エンコードされたJSONを続ける構造が一般的です。JSONにはadd、port、id、netなどのフィールドが含まれます。これは「共有用の接続情報」であり、inboundsやルーティングを含むコアの完全な設定ではありません。共有データ内のvは共有形式のバージョンを表すことが多く、v2rayNのアプリバージョンではありません。
VLESS共有リンクは通常、URI形式です。認証情報はアドレスの前に、通信方式やセキュリティの設定はクエリパラメーターに、注釈は#の後に記載されます。以下は学習用の例で、サンプルドメインとデモ用UUIDを使っています。実際の接続先ではありません。
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=node.example.com&path=%2Fgateway&sni=node.example.com#format-demo
| フィールド | サンプル値 | 確認ポイント |
|---|---|---|
| サーバーとポート | node.example.com:443 | サーバー側の待ち受けアドレスを指定します。ローカルのプロキシポートではありません。 |
| encryption | none | VLESSプロトコル層の暗号化設定を表します。この例では、通信経路の保護にTLSも使用しています。 |
| securityとsni | tls、node.example.com | 通信のセキュリティ方式とTLSのサーバー名を指定します。サーバー側の要件に合わせてください。 |
| typeとpath | ws、%2Fgateway | WebSocketを選択します。パスをデコードすると/gatewayになります。 |
| host | node.example.com | この例でWebSocketに使うHostです。すべての環境でサーバーアドレスとして流用できるわけではありません。 |
サーバー、ポート、UUIDだけをコピーしないでください。SNI、通信パス、Hostが欠けると、ノードのインポートには成功してもハンドシェイクで失敗することがあります。REALITYなどの設定では公開鍵やshort IDなども必要です。元のリンクの値を維持し、選択したコアが対応しているか確認してください。securityの値を変えるだけでは変換できません。
v2rayNでは、データの種類に応じてインポート方法を選ぶ
インポートする前に、元のテキストを保存しておきましょう。以下ではv2rayNの中国語版でよく使われるメニュー名を示します。バージョンによって、コマンドが上部メニューまたは右クリックメニューにある場合があります。表示名が多少異なる場合は、「サブスクリプショングループ」「クリップボードから一括インポート」「カスタム設定」の用途に沿って探し、別々の方法を混同しないでください。
- サブスクリプションURLを登録:「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、グループを追加して、名前とサブスクリプションURLを入力して保存します。次に「サブスクリプショングループ」から「現在のサブスクリプションを更新(プロキシを使用しない)」を実行します。利用可能な既存のプロキシ経由でサーバーにアクセスする必要がある場合は、「現在のサブスクリプションを更新(プロキシを使用)」を選びます。
- 共有リンクをインポート:完全な
vmess://またはvless://の文字列をコピーし、「サーバー」→「クリップボードからURLを一括インポート」を開きます。複数をインポートする場合は1行に1つずつ記載し、チャットの時刻、番号、説明文を混ぜないでください。 - 完全なJSONをインポート:まず設定がXray用かV2Fly用かを確認します。「サーバー」から「カスタム設定サーバーを追加」を選び、設定ファイルを指定してコアの種類を確認してください。サブスクリプションURLの入力欄に完全なJSONを貼り付けないでください。
- インポート結果を確認:まず一覧のノード数を確認し、ノードの編集画面でアドレス、ポート、通信方式、セキュリティ設定を確認します。ノードを1つ選んで有効なサーバーに設定し、ログに設定の解析エラーやハンドシェイクエラーが出ていないか確認してください。
共有リンク・Base64・JSONの変換で引き継げる範囲
まず、残したい情報を確認しましょう。ノード一覧をBase64にする場合は、通常、テキストの外側の表現が変わるだけです。一方、完全なJSONを単一の共有リンクにする場合は、実行設定全体を1つのノードに縮小することになります。この2つの変換を混同しないでください。
| 変換の方向 | 操作方法 | 失われる可能性がある情報 |
|---|---|---|
| 共有リンク → Base64リスト | 完全なリンクを1行ずつ連結し、UTF-8テキストをBase64でエンコードします。 | エンコード自体でフィールドが失われることはありませんが、更新可能なサブスクリプションサービスが自動で作られるわけではありません。 |
| Base64リスト → 共有リンク | 外側のエンコードをローカルでデコードし、各行のプロトコル接頭辞とパラメーターを維持します。 | 手動での改行、切り詰め、文字の置換によってリンクが壊れることがあります。 |
| 共有リンク → コアJSON | クライアントで解析し、ローカルのinbounds、DNS、ルーティングと組み合わせて実行設定を生成します。 | 生成結果はクライアントの設定に左右され、1つに固定されません。 |
| コアJSON → 共有リンク | 共有形式で表現できるプロキシのアウトバウンドを1つ選び、対応する形式に変換します。 | 待ち受け、DNS、ルーティング、複数アウトバウンド間の関連などは、通常すべてを引き継げません。 |
v2rayNからノードをエクスポートして移行する
サーバー一覧で対象ノードを選び、右クリックメニューの「サーバーを共有」から「共有URLをクリップボードにコピー」を選びます。バージョンによっては、共有コマンドが右クリックメニューに直接表示されます。複数を共有した場合は、ローカルのテキストエディターで行数を確認してから、移行先にインポートしてください。カスタム設定のノードは、標準の共有リンクとしてエクスポートできない場合があります。
- まず1件で確認してから一括処理:1件をエクスポートし、テスト用グループに再インポートして、通信方式、SNI、パス、注釈を比較してください。
- ノードとサブスクリプションの関係を区別:共有リンクからインポートしたノードは通常、独立したノードとして登録されます。元のサブスクリプションURLや更新設定は引き継がれません。
- プロトコルの接頭辞を直接書き換えない:
vmess://をvless://に変えてもプロトコル変換にはなりません。サーバー側も対応するプロトコルと認証設定を提供している必要があります。
任意のJSONをそのままvmess://にできない理由
どちらもJSONを使うからといって、フィールド構造まで同じとは限りません。以下はXray設定に含まれるアウトバウンドの一部であり、単体で動作する完全な設定でも、従来形式のVMess共有ペイロードでもありません。Base64でエンコードしてプロトコル接頭辞を付けても、正しい共有フィールドにはなりません。
{
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "node.example.com",
"port": 443,
"users": [
{
"id": "b85a420b-f879-44e5-88eb-7ddc1d26908e",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "node.example.com"
},
"wsSettings": {
"path": "/gateway",
"headers": {
"Host": "node.example.com"
}
}
}
}
]
}
デスクトップとAndroid間の移行:元データを再利用し、対応状況を個別に確認
複数の端末で使う場合は、まず提供元のサブスクリプションURLを保存し、それぞれの端末に登録しましょう。v2rayNはデスクトップ向けクライアントです。Android版のv2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。サブスクリプションを解析できることと、すべてのノードが使用中のコアに対応していることは、別々に確認が必要です。
移行方法:通常のノードとカスタム設定を分けて扱う
通常のサブスクリプションと共有ノード
- 移行先の端末で、元のサブスクリプションURLを再登録します。
- 少数のノードだけを移行する場合は、完全な共有リンクをエクスポートします。
- システムプロキシ、アプリごとのプロキシ、ルーティングを端末ごとに設定します。
完全なJSONとカスタムルーティング
- まず移行先クライアントが対応している設定のインポート方法を確認します。
- コアの種類、ファイルパス、待ち受けポートを確認します。
- VLESSやREALITYなどの機能を使う場合は、コアの対応状況を項目ごとに確認します。
同じサブスクリプションを使っていても、すべての設定が共通になるわけではありません。端末ごとに接続方法、DNS、ルーティングを確認してください。
完全な設定には、デスクトップ上の絶対パスやローカルリソースが指定されている場合もあります。Android端末へ移行するときに、これらのパスをそのまま使うことはできません。両端末で同じコアを使う場合でも、コアのバージョンと設定フィールドの互換性を確認してください。「ファイルを開けた」だけで動作確認済みと判断しないでください。
サブスクリプション形式のよくある質問と対処方法
サブスクリプションの更新は成功したのに、一覧が空なのはなぜ?
該当するサブスクリプショングループに切り替え、一覧のフィルターを解除してから、ログに記録された有効なノード数を確認してください。応答がログインページ、空の内容、または非対応の設定形式であれば、ダウンロードに成功してもインポートできるノードがない場合があります。提供元のページに戻り、現在のクライアントに対応するサブスクリプションURLをコピーし直してください。
長いBase64文字列を受け取った場合、どこに貼り付ければいい?
まずローカルでデコードし、内容を確認します。1行ごとの共有リンクになっている場合は、デコードした一覧をすべてコピーして「サーバー」→「クリップボードからURLを一括インポート」を使います。完全なJSONの場合は、対応するコアのカスタム設定として扱い、プロトコル接頭辞を付けないでください。
リンクに変換した後、インポートはできるのに接続できないのはなぜ?
元ノードと新しいノードの編集画面を開き、セキュリティ方式、SNI、Host、パス、関連するプロトコルパラメーターを1つずつ比較してください。特に、%2Fが%252Fに二重エンコードされていないか、チャットアプリによって&以降のクエリパラメーターが切り捨てられていないか確認しましょう。
サブスクリプションの更新で手動編集したノードは上書きされる?
同じサブスクリプショングループにあるノードは、更新時に置き換えられたり再作成されたりする場合があります。編集内容を長期保存する場合は、共有リンクをエクスポートして独立した手動グループにインポートし、次回の更新後に状態を確認してください。サブスクリプションの項目を、変更されないローカル設定のバックアップとして扱わないでください。
ノード一覧をBase64にすれば自動更新される?
いいえ。Base64で変わるのはテキストの表現だけです。自動更新には、クライアントからアクセスできるサブスクリプションURLと、そのURLから継続的に管理された互換データが返されることが必要です。ローカルのエンコード済みテキストしかない場合は、静的なノード一覧としてインポートしてください。提供元の変更が後から反映されることはありません。
最後に「URLの入手元が正しいか → 応答内容が互換性のある形式か → 必要なフィールドが揃っているか → コアが対応しているか」の順で確認しましょう。まず形式の問題を解決してから接続を確認します。元のサブスクリプションと、個人情報を伏せたエラー記録を残しておくと、変換方法を次々に試すより原因を特定しやすくなります。