iPhoneにClash系クライアントをインストールする方法:App Store入手・サブスクリプションの読み込み・初回接続

iOSでApp Storeからクライアントを入手し、サブスクリプションを読み込み、VPN構成を許可して初回接続するまでを解説。アカウントの地域設定や読み込みエラーの原因も紹介します。

まずiPhoneにインストールするクライアントを確認する

iOSで使うのは通常、ClashやClash Meta(mihomo)の設定形式に対応したサードパーティ製ネットワークツールであり、デスクトップ版Clashそのものではありません。iOSのサンドボックスとNetwork Extensionの制約により、クライアントはシステムのPacket Tunnel Providerを通じて端末内にVPNトンネルを作り、アプリの通信をルールエンジンで処理します。画面の名称やプロキシグループの操作、設定の対応範囲はクライアントごとに異なりますが、アプリの入手、サブスクリプションの読み込み、VPNの許可、ノードの選択、ルールの確認という流れはほぼ共通です。

クライアントを選ぶ際は、App Storeの商品ページで開発者名、最終更新日、対応OS、設定形式の説明を確認してください。アプリ名や似たアイコンだけでは互換性を判断できません。商品ページにClash、Mihomo、YAML、Rule Provider、VLESS、Hysteria2などのキーワードがあっても、開発者のドキュメントを必ず確認しましょう。「サブスクリプション対応」と書かれていても、そのクライアント独自のJSON形式だけを指し、Clash YAMLを読み込めるとは限りません。

確認項目 確認する場所 判断基準
システム要件 App Store → アプリ詳細 → 互換性 現在のiOSメジャーバージョンが最低要件を満たしていることを確認します(例:iOS 17またはiOS 18)。
設定形式 アプリ詳細、開発者サイト、アプリ内ヘルプ Clash YAML、Mihomo、または対応するサブスクリプション形式が明記されている
メンテナンス状況 App Store → バージョン履歴 初回リリース日だけでなく、最終更新日と修正内容を確認する
開発者情報 商品ページの開発者欄 プロジェクトのドキュメントにあるApp Storeリンクと開発者名を照合する

App Storeでクライアントが見つからないときはアカウントの地域を確認する

App Storeに表示される内容は、「メディアと購入」の現在のログインアカウントに設定されたストア地域によって決まり、iPhoneの言語、タイムゾーン、SIMカード、「設定」→「一般」→「言語と地域」だけで決まるわけではありません。同じアプリでも地域によって入手できたり表示されなかったりし、開発者が配信範囲を変更して提供終了になることもあります。そのため、システムの地域を変更するだけでは検索結果に出ない問題は解決しないことがあります。

まずは開発者が案内する商品ページリンクを使う

  1. クライアントのプロジェクトドキュメントまたは開発者サイトからApp Storeの商品ページを開き、最初からキーワード検索に頼らないでください。
  2. 商品ページの開発者名、アプリアイコン、バージョン履歴、システム要件を確認します。
  3. 「このAppは、お住まいの国または地域では現在ご利用いただけません」と表示された場合は、「メディアと購入」アカウントの地域を確認してください。
  4. ページにアプリが削除されたと表示される場合は、名前が似た代替アプリをインストールせず、プロジェクトが現在推奨しているクライアントを改めて確認してください。

iOS 18では、「設定」→「Apple Account」→「メディアと購入」→「アカウントを表示」→「国または地域」から現在のストア地域を確認できます。Face ID、Touch ID、またはデバイスのパスコードによる認証を求められる場合があります。Appleでは、地域変更にアカウント残高、有効なサブスクリプション、ファミリー共有、支払い方法などの条件があります。未完了の項目が表示された場合は、システム言語を何度も切り替えるのではなく、Appleのアカウントルールに従って対応してください。

「メディアと購入」だけからサインアウトする場合は範囲に注意する

「設定」→「Apple Account」→「メディアと購入」からのサインアウトは、App Store、音楽、メディア購入に適用され、画面上部のApple Account全体からサインアウトする操作とは異なります。写真、連絡先、iCloudの同期状態を確認しないまま、Apple Accountページ下部のデバイス全体のサインアウトを実行しないでください。アプリを正常にダウンロードした後も、アップデートは通常、最初に入手した「メディアと購入」アカウントに関連付けられ、更新時に同じアカウントの認証を求められることがあります。

クライアントが認識できるサブスクリプションURLを用意する

サブスクリプションはノード名でも、単独のサーバーアドレスでもありません。通常はHTTPS URLで、クライアントがリクエストするとClash YAML、Mihomo YAML、またはサービス提供者が定めた設定内容が返されます。典型的なURLは次のような構造です。

https://sub.example.net/clash?token=abc123

このURLは構造を説明するための例です。実際のURLはサブスクリプション提供者の管理画面から取得し、ClashまたはMihomoと明記された形式を選んでください。管理画面にBase64汎用サブスクリプション、Sing-box、Surge、Clashが並んでいる場合、iOSのClash系クライアントでは「iOS」と書かれているだけの項目を選ぶのではなく、通常はClash/Mihomoを選択します。

読み込み前に確認する3項目

サブスクリプションサーバーによっては、リクエストのUser-Agentに応じて形式を変えて返します。SafariでURLを開けても、クライアントのリクエストが同じ内容になるとは限りません。逆にSafariで空白に見えても、応答がダウンロードファイルであるためサブスクリプションが無効とは限りません。正確に判断するには、クライアントの更新ログでHTTPステータスコードと解析エラーを確認します。

iOSクライアントにサブスクリプションを読み込む

クライアントによってメニュー名は「設定」「サブスクリプション」「Profiles」「リモート設定」など異なります。基本的な手順は、クライアントを開く → 設定管理を開く → リモート設定を新規作成 → URLを貼り付ける → 名前と更新間隔を設定 → 保存 → 今すぐ更新、です。初回は自動更新を24時間または1440分に設定し、まず手動で更新して形式を読み取れることを確認してからバックグラウンド更新を有効にするのがおすすめです。

方法1:クリップボードからURLを貼り付ける

  1. サブスクリプション管理画面で「Clashサブスクリプションをコピー」をタップし、長押しでクエリパラメータを選択し損なわないようにします。
  2. クライアントの「設定」→「設定を追加」→「URLからダウンロード」、または同等の入口を開きます。
  3. URLを貼り付けたら、先頭が https:// で始まっているか、末尾にピリオドや空白が余分に付いていないか確認します。
  4. 名前には「日常用サブスクリプション」など識別しやすい文字を入力し、tokenを名前にしないでください。
  5. 保存後に更新をタップし、ノード数、プロキシグループ数、または更新時刻が表示されるまで待ちます。

iOSで「ペーストを許可しますか」と表示されたら、コピー元のアプリを確認して「許可」を選びます。これはクリップボードのプライバシー制御であり、VPNの許可ではありません。拒否した場合は入力欄をもう一度タップし、システムの編集メニューから貼り付けます。一部のアプリでは「設定」から貼り付け権限を個別に変更できます。

方法2:ローカルYAMLファイルを読み込む

サブスクリプション提供者から .yaml または .yml ファイルが提供されている場合は、まず「ファイル」アプリに保存し、クライアントで「ファイルから読み込む」を選択します。ファイルはUTF-8テキストで、トップレベルの項目のインデントが揃っている必要があります。以下は構造確認用の簡略例で、接続可能なノードは含みません。

mixed-port: 7890
mode: rule
proxies: []
proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - DIRECT
rules:
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

ローカルファイルはリモートサブスクリプションに合わせて自動更新されません。ノードが変更されたら再ダウンロードして読み込むか、リモート設定URLを使ってください。クライアントに複数の設定が残っている場合は、今読み込んだ設定が選択されていることを確認します。「ダウンロード成功」はファイルが設定一覧に入ったことを示すだけで、現在の実行設定になったとは限りません。

VPN構成を許可して初回接続する

クライアントが初めてトンネルを起動すると、iOSに「VPN構成の追加を求めています」といったシステムダイアログが表示されます。「許可」をタップすると、デバイスのパスコード入力や生体認証を求められることがあります。この操作でiOSがNetwork ExtensionのVPN構成を作成します。許可を完了していない場合、クライアントがサブスクリプションを更新できても、他のアプリの通信を処理することはできません。

  1. クライアントのプロキシグループページで、利用可能なノードまたは自動選択のプロキシグループを選びます。
  2. ホームに戻り、「接続」「起動」「VPN」などのスイッチをオンにします。
  3. システムダイアログで「許可」をタップし、デバイス認証を完了します。
  4. 状態が「接続中」から「接続済み」に変わるまで待ちます。通常は2〜10秒で完了します。
  5. 「設定」→「一般」→「VPNとデバイス管理」→「VPN」を開き、対象の構成が「接続済み」になっていることを確認します。

iOSでは通常、同時に1つのパーソナルVPNトンネルしかアクティブにできません。企業VPN、別のプロキシクライアント、セキュリティソフトのローカルVPNがすでに接続されていると、新しいクライアントの起動時に古い接続が自動切断されたり、「接続中」のまま止まったりすることがあります。調査時はまず他のVPNを切断し、対象のクライアントで再試行してください。

iOSのTUNとシステムプロキシの違い

iPhoneには、デスクトップOSにあるような、クライアントがすべての通信を一括管理するグローバルHTTPプロキシ設定は一般的にありません。Clash系クライアントは通常、Packet Tunnelを使ってTUNに似た仮想ネットワークインターフェースを作り、IPパケットを内蔵コアへ渡します。その後、DOMAIN、DOMAIN-SUFFIX、IP-CIDR、GEOIP、GEOSITE、ルールセットなどに基づいて、直接接続、プロキシ、拒否を判断します。入口をTUNと呼ぶクライアントもあれば、VPNスイッチだけを表示するクライアントもあります。目的は近いものの、実装の詳細は異なる場合があります。

接続後、画面上部のステータスバーにVPNの表示が常に出るとは限りません。特にノッチやDynamic Island搭載モデルでは表示されないことがあります。より確実なのは、コントロールセンターでVPNの状態を確認するか、「設定」→「一般」→「VPNとデバイス管理」を開く方法です。クライアントのログには、ネットワークインターフェースの起動、DNSの初期化、ルールの読み込みも記録されるはずです。

具体的な手順でノード、DNS、ルールを確認する

初回接続ではスイッチの色だけを確認しないでください。トンネル、ノード、ルールの3層を個別に確認するのがおすすめです。まずVPN接続を確認し、次に遅延を測定し、その後、直接接続用ドメインとプロキシ用ドメインでルールのマッチ結果を確認します。リアルタイムログがある場合は、テスト中だけログレベルをInfoにし、完了後はデフォルトに戻して大量のログを長期間残さないようにします。

再現可能な初回テスト

  1. モバイル通信をオフにし、安定したWi-Fiだけを使って、テスト中に出口が切り替わらないようにします。
  2. ノードページで同じノードを3回連続テストし、TCPまたはURL Testの遅延を記録します。
  3. そのノードを選択してVPNを起動し、Safariで異なるルールカテゴリのWebサイトを2つ開きます。
  4. クライアントのログに戻り、対象ドメインがマッチしたプロキシグループと最終ノードを確認します。
  5. 30秒間ロックしてからロックを解除し、再びWebページを開いて、バックグラウンド移行でトンネルが切断されていないことを確認します。

たとえば同じWi-Fiで、あるノードのURL Testが86ms、91ms、88msなら、変動幅は約5msなのでWebテストを続けられます。一方、90ms、680ms、タイムアウトという結果なら、平均遅延より回線の安定性を重視すべきです。遅延はテスト先への接続時間を示すだけで、実際のダウンロード速度とは異なり、すべてのプロトコルが利用できることを証明するものでもありません。

症状 優先して確認する項目 実行する対処
VPNは接続済みだが、すべてのWebページが開けない DNSの初期化、ノードの可用性、設定が選択されているか ノードを切り替え、ログにDNS timeoutまたはconnection refusedがないか確認する
日本国内のサイトまでプロキシ経由になる 動作モードとルールの順序 モードをRuleに変更し、MATCHがルールの末尾にあるか確認する
ブラウザーは使えるが、一部のアプリだけ使えない UDP、IPv6、アプリ独自の接続方式 そのアプリのドメインとIPのログを確認し、REJECTや誤った直接接続になっていないか確認する
ロック画面後に頻繁に切断される オンデマンド接続、低電力モード、クライアントのバックグラウンド状態 低電力モードを一度オフにしてテストし、クライアントがオンデマンド接続に対応しているか確認する

サブスクリプションの読み込みに失敗する主な原因

HTTP 401、403が表示される、またはログインページが返る

401 Unauthorizedは通常、tokenがない、間違っている、またはリセットされたことを示します。403 Forbiddenは、アカウント状態、リクエスト制限、サブスクリプションサーバーのアクセス方針が原因の可能性があります。まずサブスクリプション管理画面に戻り、Clash/MihomoのURLをコピーし直してください。tokenを手動で組み立てないでください。Safariで開いたときにログインページへ移動するなら、クライアントが受け取るのもHTMLである可能性が高く、解析時に「unexpected character <」や「invalid YAML」と表示されることがあります。

タイムアウトまたはサーバーに接続できないと表示される

トンネルを起動する前にサブスクリプションを更新する場合、クライアントは通常、現在のWi-Fiまたはモバイル通信からサブスクリプションのドメインへ直接接続します。まずSafariでそのドメインへのHTTPS接続を確認し、Wi-Fiとモバイル通信を切り替えてそれぞれ試してください。1回の更新が30秒を超えて応答しない場合は中止して再試行できます。タイムアウトが続く場合は、DNS、証明書の時刻、サブスクリプションサーバーの状態を確認し、更新ボタンを連続して押さないでください。

YAMLの解析に失敗する

よくある原因は、インデントにTabを使っている、コロンの後に空白がない、プロキシグループが存在しないノードを参照している、特定のコアだけが対応するルールセット項目を使っている、現在のクライアントが実装していないMihomo拡張を設定に含めている、といったものです。エラーに表示された行番号と項目名を確認してください。サブスクリプション提供者が生成したリモート設定の場合は、エラー全文とクライアントのバージョンを伝えますが、元のサブスクリプションURLは添付しないでください。

読み込み後のノード数が0になる

まず、Clash設定ではなくサブスクリプション変換ページのURLをコピーしていないか確認します。管理画面の「サブスクリプションをコピー」ボタンは、現在の選択に応じて異なる形式を生成することがあります。Base64汎用サブスクリプションはブラウザーで長い文字列に見え、Clashクライアントが自動認識できない場合があります。通信量プランの有効期限も確認し、リモート応答に proxies: または proxy-providers: が実際に含まれているか確認してください。

更新は成功するが、起動直後に切断される

この問題は通常、サブスクリプションのダウンロード段階を越えているため、実行設定を確認します。まず他のVPNを切断し、現在の設定が選択されていることを確認します。次に起動ログで、ポートの競合、DNSリスナーの起動失敗、ルールセットのダウンロード失敗、コアが対応していない項目がないか確認してください。デスクトップ設定の external-controller、LANリスニング、固定NIC名はiOSに適さない場合があります。デスクトップ用設定を丸ごとコピーする場合は、クライアントのドキュメントに従って調整してください。

接続が安定した後の設定

初回接続の確認が終わったら、サブスクリプションの更新間隔を12〜24時間に設定できます。更新頻度が高すぎるとエラー表示が増え、サブスクリプションサーバーのリクエスト制限にかかる可能性もあります。長期間更新しないと、ノードアドレスやルールセットの変更を見逃します。リモート設定を更新した後、一部のクライアントでは設定の再読み込みやトンネルの再起動が必要です。設定ページの更新時刻が変わっても、実行中のコアにすぐ反映されるとは限りません。

成功と判断するには、App Storeで入手したクライアントの情報を確認でき、サブスクリプションが更新されてノードとプロキシグループが生成され、システムのVPN構成が許可され、接続後のルールログに想定したマッチ結果が表示され、ロック画面やネットワーク切り替え後も復帰できることが必要です。どこかで失敗した場合は、「ストアアカウント → サブスクリプション応答 → 設定解析 → VPN許可 → ノード接続 → ルールマッチ」の順に切り分けると、DNS、ノード、動作モードを同時に変更するより原因を見つけやすくなります。

Clash をダウンロード プラットフォーム別にクライアントを選択