2026年8月6日 · ルールと振り分け · 約8分

Shadowrocketのルール優先順位と設定方法|上から順に照合する仕組みとFINALの使い方

Shadowrocketのルールは上から順に照合され、最初に一致した時点で処理が決まります。FINALを末尾に置く理由と、PROXY・DIRECT・REJECTの使い分けを解説します。

この記事の概要

この記事は、Shadowrocketで接続を設定済みで、振り分けルールを編集する方を対象にしています。まずGlobal RoutingでConfigを選び、「具体的な例外、範囲ルール、最後にFINAL」の順に整理します。その後、1件のリクエスト記録で実際に適用されたルールを確認します。接続情報やサブスクリプションはサービス提供元から入手してください。この記事ではルールの並べ方、確認方法、元に戻す方法を説明します。

まずConfigを確認:ルール順が反映される条件

ルールを変更する前に、Home → Global Routingで現在のモードを確認します。この記事で扱うのは、Configを選択した状態で、現在の設定にある[Rule]リストを上から照合する仕組みです。ファイルだけ編集してGlobal RoutingがProxyまたはDirectのままでは、ルールが想定どおり適用されるか確認できません。

Global Routingのモード名と、ルール行にあるポリシー名は別の設定です。たとえば、Proxyはルーティングモード、PROXYはルール行の処理先です。表記は似ていますが、「Proxyを選択したらPROXYルールだけが有効になる」という意味ではありません。

Config

おすすめ

現在の設定に従って通信を振り分けます。リクエストは個別のルールで処理される場合も、FINALに到達する場合もあります。最終的な経路は、一致したルールのポリシーによって決まります。

用途:ルールの編集、一致順の確認、設定に基づく日常的な振り分け。

Proxy

通信をProxyモードで処理し、この記事のルールリストに沿った振り分けは行いません。Proxy接続自体の動作確認には使えますが、ルールが正しいことの確認にはなりません。

用途:一時的に接続の可否を確認し、Proxy接続の問題とルール選択の誤りを切り分ける。

Direct

通信をDirectモードで処理します。この状態でアクセスに成功または失敗しても、変更したPROXYルールやREJECTルールが原因とは限りません。

用途:ローカルネットワークからの直接接続を確認し、比較後にConfigへ戻す。

確認のポイント:モードを固定してからルールを1つ変更

Global RoutingをConfigに固定し、選択中の接続はそのままにします。1回の確認で変更するのは、ルール1つまたは配置1か所だけにしてください。これにより、リクエスト経路の変化を今回の変更と結び付けて確認できます。

上から順に照合:具体的なルールが自動的に優先されるわけではない

通常のルールリストでは、Shadowrocketはルールを上から順に確認します。ルールに一致して処理ポリシーが決まると、下にある「より細かく見える」ルールは確認されません。優先順位を決めるのは主に配置位置であり、ドメイン名の長さやDIRECT・PROXY・REJECTという名前ではありません。

以下では、予約済みのサンプルドメインを使ってルールの競合を説明します。実際にアクセスできるテストサービスを示すものではありません。example.com全体をPROXYにし、そのうちapi.example.comだけをDIRECTにする場合、例外ルールを範囲ルールより前に置きます。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

2行目を1行目より前に移動すると、api.example.comは先にDOMAIN-SUFFIXに一致し、後ろにあるDIRECTの例外ルールは適用されません。同様に、範囲ルールの後ろに置いたREJECTも、自動的に優先されることはありません。

ドメイン1件
DOMAINは指定したドメインに完全一致し、すべてのサブドメインは対象にしません。
範囲ルール2件
DOMAIN-SUFFIXはドメイン本体とそのサブドメインを対象にします。
FINALのフォールバック1件
この例ではFINALを1つだけ残し、ルールリストの末尾に置きます。

DOMAIN-SUFFIX,example.com,PROXYは、URL内の任意の文字列を検索するルールではありません。アドレスのパスにexample.comが含まれていても一致しません。ルールのパラメーターにはドメインを指定し、https://、ページのパス、クエリパラメーターは含めません。ホスト名1つだけを対象にする場合は、例外ルールにDOMAINを使います。

FINALの設定:他のルールに一致しないリクエストの処理先を決める

FINALは、ドメインやIPの条件を指定しない最終フォールバックルールです。一般的な書き方はFINAL,DIRECTまたはFINAL,PROXYです。「認識できないサイトだけ」に一致するのではなく、前のルールで処理されず、この行まで到達したすべてのリクエストを処理します。

FINALは設定ファイル全体の末尾ではなく、[Rule]リストの末尾に置きます。設定ファイルには別のセクションが含まれる場合もあります。FINALを移動するために、別のセクションへ移さないでください。FINALを途中に置くと、その後の通常ルールに一致する機会がなくなります。

設定例一致しない場合の処理確認するポイント
FINAL,DIRECTそれ以外のリクエストは直接接続します。Proxyが必要なドメインが、前のルールですでに対象になっていないか。
FINAL,PROXYそれ以外のリクエストをPROXYに渡します。ローカルネットワークや直接接続が必要な宛先に、明示的な例外ルールがあるか。
FINAL,REJECTそれ以外のリクエストを拒否します。厳格な許可リストを意図しており、ルール漏れによるアクセス失敗を許容できるか。

以下は、ドメインルール、IPルール、FINALの位置を示す簡易構成例です。日常利用向けの完全な設定ではなく、プライベートアドレス範囲も1つしか記載していません。ローカルネットワークのすべてのケースを網羅するものではありません。既存設定のコピーに必要な行を追加してください。[Rule]セクションを2つ作らないでください。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

IP-CIDRはアドレス範囲を確認します。GEOIPはIPの位置情報データベースに基づいて分類するもので、Webサイトの言語や運営者の所在地を判定するものではありません。例のno-resolveは、このIPルールのためだけにドメインを積極的に名前解決しない指定です。設定全体でDNS問い合わせを行わないという意味ではありません。IPルールが一致するかどうかは、そのリクエストで宛先アドレス情報を利用できるかにも左右されます。

PROXY・DIRECT・REJECT:一致条件と処理方法を分けて考える

ルール行の前半は「何に一致するか」、末尾のポリシーは「一致後にどう処理するか」を示します。同じDOMAIN-SUFFIXに異なるポリシーを指定できます。ポリシー自体は一致範囲を変えず、ルールの優先順位を上げることもありません。

PROXY
リクエストをProxy経由の経路に渡します。実際に使われる接続は、現在の選択内容や設定内のポリシーにも左右されます。PROXYに一致しても、サーバーへの接続、認証、宛先へのアクセスが成功するとは限りません。
DIRECT
ローカルネットワークから宛先へ直接接続します。直接接続が必要だと確認済みのドメインやアドレス範囲に適しています。DIRECTを指定しても、DNSエラー、ローカルネットワークの遮断、宛先サービスの障害は解消されません。
REJECT
一致したリクエストを拒否します。明確に遮断する必要がある単独のドメインやアドレスに適しています。ログイン、認証、ページ表示に必要なリソースまで遮断しないよう、対象範囲を先に確認してください。

たとえばDOMAIN,metrics.example.com,REJECTは、このサンプルホスト名の処理を指定します。通常のコンテンツと遮断したいリクエストが同じドメインを共有している場合、DOMAINやDOMAIN-SUFFIXではWebページのパスに基づいて両者を分けられません。ドメイン全体をREJECTにすると、画像が表示されない、ボタンが動作しない、ページの読み込みが中断するといった問題が起きる場合があります。

ルールは通信先を決め、プロトコルはProxy接続の確立方法を決めます。PROXYに対応する接続を別のプロトコルに変えても、DOMAIN-SUFFIXの一致範囲は変わりません。まず「正しい経路を通っているか」を確認し、その後で経路上の接続が正常に確立できるかを調べます。

変更と確認:コピーを保存し、一致したルールを1つずつ確認

以下の手順は、利用可能な接続と既存の設定があることを前提にしています。サブスクリプションと設定ファイルは別のものです。Homeでサブスクリプションを更新しても、現在のConfigのルールが希望どおりの順序に自動調整されるわけではありません。編集前に、実際に選択されているファイルを確認し、復元できるコピーを保存してください。

  1. コピーを保存

    Configで現在選択されているファイルを確認し、元のファイルを複製するかバックアップをエクスポートします。リモート更新されるファイルの場合は、更新で編集内容が上書きされないよう、別のローカルコピーを編集します。

  2. モードを固定

    Home → Global Routing → Configを開き、現在選択している接続はそのままにします。1回の検証でルーティングモード、接続、ルールファイルを同時に切り替えないでください。

  3. ルールを編集

    Config → 現在のファイル右側のⓘ → Edit Plain Textを開き、[Rule]セクションを探します。具体的な例外を範囲ルールより前に移動し、FINALがリスト末尾に1つだけあることを確認して保存します。

  4. リクエストを作り直す

    変更後の設定が選択されていることを確認し、接続を確立し直してからテスト対象のページを開き直します。長時間接続は以前のセッションを使い続ける場合があります。古い接続が再利用されているページを更新しただけで判断しないでください。

  5. 記録を確認

    今回のリクエストの接続記録を開き、宛先のドメインまたはIP、一致したルール、処理ポリシーを確認します。経路が違う場合はルールの順序を調整します。経路が正しいのにアクセスできない場合は、接続自体や宛先サービスを確認してください。

少なくとも3つの対象でテストします。具体的な例外に一致するドメイン、範囲ルールに一致するドメイン、FINALに到達する宛先です。実際にアクセスする権限があり、想定経路を把握している対象を使ってください。この記事のexample.com系の名前は構文の説明用であり、接続テストの結果を示すものではありません。

確認:ドメイン、ルール、ポリシーを照合

Webページが開いても、想定したルールに一致した証拠にはなりません。「実際の宛先 → 一致したルール → 処理ポリシー」の3点を記録し、すべて一致してから変更範囲を広げます。

よくある質問:ルールが反映されないときの確認箇所

DIRECTを追加したのに、なぜPROXY経由のままですか?

まずHome → Global RoutingがConfigになっているかを確認し、次にConfigで実際に選択されているファイルを確認します。その後、DIRECTより前に、同じドメインを対象とするDOMAIN-SUFFIXなどの範囲ルールや、途中にあるFINALがないか調べます。具体的な例外を最初に対象範囲が重なるルールより前に移し、新しいリクエストで確認してください。

FINALを先頭に置いたら、下のルールも試されますか?

いいえ。リクエストがFINALに到達すると、そのフォールバックポリシーで処理されます。下のルールを検索して戻ることはありません。設定の[Rule]セクションを開き、FINALをルールリストの末尾に移動して重複分を削除します。保存後、変更したファイルが現在選択されていることを再確認してください。

PROXYに一致したのに、ページが開かないのはなぜですか?

一致記録が示すのは、ルーティングの判断が完了したことだけです。ルールは変えずに、Homeで選択中の接続が利用可能か確認し、同じ宛先で比較します。接続、認証、宛先サービスに問題がある場合は、それぞれの問題に対処してください。同じDOMAINルールを追加し続けても、こうした障害は解決しません。

更新後にルールが元に戻りました。編集内容をどう保存すればよいですか?

更新したのがHomeのサブスクリプションか、Configのリモート設定ファイルかを確認します。リモート設定の更新でローカル編集が上書きされた場合は、バックアップを復元し、カスタムルールを独立したローカルコピーに統合して、そのファイルを選択します。次回以降は更新前に差分を確認して手動で統合し、使用可能な唯一のコピーを直接上書きしないでください。

記録にある宛先が想定したドメインと異なる場合は、ページのリダイレクト、リソースのドメイン、今回の接続で実際に使われたアドレスを確認します。1つのページでも通常は複数のリクエストが発生します。入口のドメインにDIRECTを追加しても、ページ内のすべてのリソースが同じルールに一致するとは限りません。DOMAIN-SUFFIXの範囲を繰り返し広げるより、記録を見ながら個別に確認するほうが影響を抑えられます。

App Storeで正規アプリを確認する方法と利用案内

ShadowrocketはAppleプラットフォーム向けのクローズドソースの商用アプリで、App Storeから買い切りで入手できます。App ID 932747118とデベロッパ名Shadow Launch Technology Limitedをご確認ください。価格、システム要件、互換性はApp Storeページの表示に従ってください。クライアントの購入と接続サービスは別々に管理されます。サブスクリプションはサービス提供元から入手してください。

正規アプリの確認ページへ 使い方を見る
App Storeで正規アプリを確認