> For AI agents: the complete documentation index is available at https://renmori.mewbaka.cn/ja/llms.txt, the full documentation bundle is available at https://renmori.mewbaka.cn/ja/llms-full.txt.

# 設定ファイル renmori.toml

`renmori protect` は設定なしで実行できます。チーム内で保護パラメータを固定したい場合や、CI で同じ設定を再利用したい場合は、TOML 形式の設定ファイル `renmori.toml` を使用できます。設定ファイルのキーはすべて任意であり、設定されていないキーにはデフォルト値が使用されます。

## 検索順序

1. `-c, --config FILE` で指定したファイル（ファイルが存在しない場合、コマンドは終了コード 2 で失敗）
2. ビルドルートの `renmori.toml`、すなわち `<game-dir>/renmori.toml`
3. カレントディレクトリの `renmori.toml`

最初に見つかったファイルが使用され、使用したパスが stderr に表示されます。3 か所のいずれにも存在しない場合は、すべてデフォルト値が使用されます。

:::tip
ビルドルートに置いた `renmori.toml` は `game/` の外にあるためアーカイブされませんが、ビルドディレクトリ内に残ります。設定ファイルを配布用ビルドに含めたくない場合は、カレントディレクトリに置くか、`-c` で別の場所を指定してください。
:::

設定ファイルの読み込みには Python 3.11 以降が必要です。Python 3.9 または 3.10 では `tomli` を追加でインストールする必要があり、インストールされていない場合、コマンドは終了コード 2 で失敗します。

## マージルール

| 設定                          | ルール                                                                                |
| --------------------------- | ---------------------------------------------------------------------------------- |
| 一般的な設定                      | コマンドラインオプション > 設定ファイル > デフォルト値                                                     |
| 除外リスト                       | 上書きせず、`steam_appid.txt`（組み込み）、`keep_on_disk`、`exclude`、コマンドラインの `--exclude` の順にマージ |
| `lockdown`                  | 設定ファイルで `true` または `false` を設定可能。コマンドラインの `--no-lockdown` が優先され、強制的に無効化            |
| `keep_plaintext`、`launcher` | 設定ファイルとコマンドラインのどちらか一方で有効にすれば有効                                                     |

## `[protect]` セクション

| キー               | 型      | デフォルト値    | 対応するオプション          | 説明                                                              |
| ---------------- | ------ | --------- | ------------------ | --------------------------------------------------------------- |
| `strength`       | 文字列    | 未設定（フル保護） | `--strength`       | 保護強度。値は `baseline`、`auto`、またはプラグインが宣言する強度                       |
| `lockdown`       | ブール値   | `true`    | `--no-lockdown`    | 保護済みビルドで開発者モード、開発者コンソールとデータエクスポート用サブコマンドを無効化                    |
| `chunk_size`     | 整数     | `65536`   | `--chunk-size`     | コンテナのチャンクサイズ（単位はバイト）                                            |
| `keep_plaintext` | ブール値   | `false`   | `--keep-plaintext` | 保護後も平文の元ファイルを保持。問題の調査専用                                         |
| `exclude`        | 文字列の配列 | `[]`      | `--exclude`        | 暗号化せずディスク上に保持するファイルのパターン                                        |
| `keep_on_disk`   | 文字列の配列 | `[]`      | —                  | エンジン以外のプログラムが読み込み、平文のまま保持すべきファイルのパターン。`steam_appid.txt` は常に含まれる |
| `platforms`      | 文字列の配列 | 自動検出      | `--platforms`      | プラグインのみ：対象プラットフォームのリスト                                          |
| `launcher`       | ブール値   | `false`   | `--launcher`       | プラグインのみ：鍵をネイティブランチャーに紐付けてビルドと共に配布                               |

### `strength`

| 値            | 動作                                     |
| ------------ | -------------------------------------- |
| 未設定          | フル保護。クローズドプラグインが必要で、プラグインが利用できない場合は失敗  |
| `"baseline"` | オープンソースのベースライン形式。プラグインは使用しない           |
| `"auto"`     | プラグインが利用可能ならフル保護、そうでなければベースラインを使用      |
| プラグインが宣言する値  | 例えばポリモーフィック強度 `"poly"` など。プラグインに処理を委ねる |

詳細な違いは[保護強度とクローズドプラグイン](https://renmori.mewbaka.cn/ja/cli/plugin.md)を参照してください。

### `lockdown`

有効にすると、実行時に `config.developer` と `config.console` が `False` に設定され、Ren'Py のコマンドラインサブコマンド `compile`、`dialogue`、`translate`、`add_from`、`merge_strings` の実行が拒否されます。これらのサブコマンドはスクリプトやテキストデータをディスクにエクスポートできるため、リリース版では無効にしておく必要があります。`false` に設定するのは、社内テスト用ビルドで開発者コンソールを使用する必要がある場合のみにしてください。

### `chunk_size`

各チャンクは個別に暗号化され、16 バイトの認証タグが付加されます。デフォルト値の 65536 バイトでは、サイズのオーバーヘッドは約 0.024% です。大きなチャンクは大容量の CG や動画のシーケンシャルな読み込みに有利であり、小さなチャンクは多数の小さなファイルによる追加オーバーヘッドを抑えます。フル保護のチャンクパラメータはプラグインがビルドごとに決定します。

### `exclude` と `keep_on_disk`

どちらも一致したファイルを暗号化せずディスク上に保持しますが、用途が異なります。`keep_on_disk` はエンジン以外のプログラムが読み込むファイルを宣言するためのもので、`exclude` はそれ以外で平文のまま保持する必要がある場合に使用します。パターンはゲーム相対パスに対して照合され、Python の `fnmatch` のセマンティクスを使用します。`*` はディレクトリ区切りもまたぎ、Windows では大文字と小文字を区別しません。

```toml
[protect]
keep_on_disk = ["steam_appid.txt", "thirdparty/sdk_config.json"]
exclude = ["licenses/*"]
```

:::danger
スクリプトファイルを除外しないでください。ランタイムのローダーは、`game/` 内でディスク上にある `.rpy`、`.rpyc`、`.rpym`、`.rpymc` などのスクリプト系ファイルを開くことを拒否するため、除外したスクリプトは読み込めなくなります。
:::

### `platforms`

プラグインでのみ有効です。設定しない場合は、プラグインがビルド内の `lib/py3-*` ディレクトリから検出します。使用できる値はプラグインによって決まります。例：

```toml
platforms = ["win-x64", "linux-x64", "mac-universal"]
```

### `launcher`

プラグインでのみ有効です。有効にすると、鍵がネイティブランチャーに紐付けられてビルドと共に配布され、そのランチャーからゲームを起動した場合にのみ鍵が再構築されます。

## `[keys]` セクション

`[keys]` はベースライン保護でのみ有効で、コンテナ鍵とスクリプト鍵の取得元を指定します。フル保護ではプラグインが鍵を自ら導出し、このセクションは無視されます。

| キー           | 説明                   |
| ------------ | -------------------- |
| `master_env` | コンテナのマスター鍵を保持する環境変数名 |
| `script_env` | スクリプト鍵を保持する環境変数名     |

ルール：

- 環境変数の値は 64 文字の 16 進数、すなわち 32 バイトの鍵である必要があり、形式が誤っている場合、コマンドは終了コード 2 で失敗する
- `master_env` または `script_env` が設定されていない場合は、今回のビルド用にランダムな鍵を生成
- キー名が設定されていても環境変数が存在しないか空の場合は、stderr にその旨を表示し、同じくランダムな鍵を生成
- 概要パネルには鍵の取得元が表示される（例：`master=env:RENMORI_MASTER_KEY · script=random`）。CLI の出力言語は中国語または英語のみであり、ここでは英語出力の表記を示す

```toml
[keys]
master_env = "RENMORI_MASTER_KEY"
script_env = "RENMORI_SCRIPT_KEY"
```

鍵を生成する方法の一例：

```bash
python -c "import os; print(os.urandom(32).hex())"
```

CI での鍵の保管方法は[CI との連携](https://renmori.mewbaka.cn/ja/integration/ci.md)を参照してください。

:::warning
ベースライン形式では、鍵がゲームと共に配布されるローダー拡張に平文で書き込まれます。鍵を固定しても保証されるのは複数のビルド間の一貫性のみであり、ベースラインの安全性は向上しません。ベースラインの位置付けは[保護強度とクローズドプラグイン](https://renmori.mewbaka.cn/ja/cli/plugin.md)を参照してください。
:::

## 完全な例

```toml
# renmori.toml

[protect]
# strength を設定しない場合はフル保護を使用。"auto" はプラグインが利用できない場合にベースラインへフォールバック
strength = "auto"

# リリース版では有効のままにする
lockdown = true

# ベースラインでのみ有効。フル保護ではプラグインがチャンクパラメータを決定
chunk_size = 65536

# リリース版では決して有効にしない
keep_plaintext = false

# 平文のまま保持するファイル
exclude = []
keep_on_disk = ["steam_appid.txt"]

# プラグインのみ
# platforms = ["win-x64", "linux-x64", "mac-universal"]
launcher = false

[keys]
# ベースラインのみ
# master_env = "RENMORI_MASTER_KEY"
# script_env = "RENMORI_SCRIPT_KEY"
```

リポジトリのサンプルファイル：[examples/renmori.toml](https://github.com/MewBaka/RenMori/blob/main/examples/renmori.toml)。
