構文
Mihomo は設定ファイル形式として YAML を使用しています。ここでは設定を書く際に使用する構文ルールを、コメント、オブジェクト/配列、アンカー参照、ドメインワイルドカード、ポート範囲の書き方を中心にまとめています。
基本ルール
YAML は大文字小文字を区別し、インデントで階層関係を表します。インデントにはスペースのみを使用し、タブは使用できません。インデントのスペース数自体は重要ではなく、同じ階層の要素が左端で揃っていれば問題ありません。
エディタで「インデントが揃っていないのに揃って見える」というエラーが出た場合、多くはタブ文字が誤って混入していることが原因です。インデントの方式を確認してください。
コメント
# から行末までがコメントになります。# の前は行頭またはスペースである必要があります。そうでない場合はコメントとして認識されません(例えば URL 内の # は影響を受けません)。
port: 7890 # http プロキシポート socks-port: 7891 # socks プロキシポート
オブジェクトと配列
オブジェクトは key: value で表し、コロンの後にスペースを1つ入れます。YAML は JSON のスーパーセットなので、JSON スタイルの構文も直接使用できます。以下の4種類の書き方はすべて等価です:
tun: enable: true stack: system auto-route: true auto-detect-interface: true
tun: { enable: true, stack: system, auto-route: true, auto-detect-interface: true }
配列は - で始まる行で表します。同様に1行の JSON 形式 a: [b, c, d] にも対応しており、複数行の配列と等価です:
a: - b - c - d
アンカーと参照
& は設定の一部にアンカーを付けるために使用し、* はそのアンカーを参照するために使用します。<< はアンカーの内容を現在のオブジェクトにマージすることを表します。複数のプロキシプロバイダーやルールプロバイダーを記述する際、共通のフィールドを1回だけ記述してアンカーで再利用することで、多くの重複コードを省けます。
p: &p type: http interval: 3600 health-check: enable: true url: https://www.gstatic.com/generate_204 interval: 300 proxy-providers: provider1: <<: *p url: "" path: ./proxy_providers/provider1.yaml provider2: <<: *p type: file path: ./proxy_providers/provider2.yaml
上記は p アンカーの内容をそれぞれ provider1 と provider2 にコピーすることと同等です。マージ時にフィールドが重複した場合(例えば provider2 で type を再度記述した場合)は、自分で記述した値が優先され、アンカーによって上書きされることはありません。また p というキー名自体は mihomo における正当なフィールドではなく、単にアンカーを保持するために使われており、解析時には無視されます。
ドメインワイルドカード
ここで説明するワイルドカードは fake-ip-filter、nameserver-policy などのフィールド専用のもので、ルーティングルールの DOMAIN-WILDCARD とは別のもので、構文は共通していません。
| ワイルドカード | マッチする範囲 | 例 |
|---|---|---|
* | 1階層のサブドメインのみにマッチ | *.baidu.com は tieba.baidu.com にマッチしますが、123.tieba.baidu.com や baidu.com にはマッチしません |
+ | 任意の階層数にマッチ(前方一致、DOMAIN-SUFFIX に類似) | +.baidu.com は baidu.com、tieba.baidu.com、123.tieba.baidu.com のすべてにマッチします |
. | 任意の階層数にマッチしますが、裸のドメイン自体は含みません | .baidu.com は tieba.baidu.com にマッチしますが、baidu.com にはマッチしません |
ワイルドカードを使用する際は、YAML に別の型として解析されないよう引用符で囲むことを推奨します:
fake-ip-filter: - ".lan" - "xbox.*.microsoft.com" - "+.xboxlive.com" - localhost.ptlogin2.qq.com
ドメインリストの読み込み
一部のフィールド(fake-ip-filter など)は rule-set や geosite のセットを直接読み込むことに対応しており、書式は タイプ:セット名 です:
ここでの rule-set は behavior が domain / classical のルールプロバイダーのみ対応しています。
fake-ip-filter: - "rule-set:xxx" - "geosite:xxx"
ポート範囲
- でポート範囲を表し、/ または , で複数のポート/ポート範囲を区切ります。混在させることもできます:
# 114-514、810-1919 の2つの範囲と、単独の 65530 ポートにマッチ 114-514/810-1919,65530