拡張機能は manifest の permissions に使う権限を書き、利用者が入れるときに許可したものだけを使えます(一部だけ許可されることもあります。許可されなかった権限は hello の返事の denied に入ります)。
守られる範囲(大事)
隔離(既定): system.unrestricted を許可されていない拡張機能は、Windows の AppContainer の中で動きます。
| 隔離して動かす(既定) | system.unrestricted を許可したとき | |
|---|---|---|
| ファイルを読む | 自分の EXE のフォルダ・Windows や .NET などの公開された場所だけ | 利用者が読めるものすべて |
| ファイルを書く | data_dir・log_dir(一時フォルダ TEMP は data_dir\tmp)だけ | 利用者が書けるものすべて |
| 通信 | network.hosts が空ならできない。書いてあればインターネットへの接続だけ(宛先は絞れない)。LAN・localhost・待ち受けはできない | 制限なし |
| ほかのアプリ | 中身を読む・操作することはできない | 制限なし |
| クリップボード | 読めない(書ける) | 読めない(書ける) |
| メモリ・子プロセス・優先度・画面の操作 | Job Object で上限(両方とも同じ) | 同じ |
| アプリの機能 | 許可された権限の窓口だけ | 同じ |
network.hostsは宣言です。隔離中でも宛先までは止められないので、宣言と違う先へ通信しないのは作者の約束です(審査で確かめます)。- 隔離は Windows の仕組みで、すべての不正な動作を防ぐことを保証するものではありません。署名の取り消しと組み合わせて守ります。
- 利用者向けの説明(入れるときの画面)でも、「隔離して動かす。ただし『隔離せずに動かす』を許可すると制限できない」と表示しています。
権限の段階
権限は 2 つの段階に分かれます。
| 段階 | 意味 | 配り方 |
|---|---|---|
| 標準 | 悪用されても、利用者が画面で戻せる範囲(読む・設定を変える) | サーバーの「登録済み」の署名(審査なし)で、作者が自分で配れます |
| 注意が必要(要審査) ★ | 配信の声・映像・チャット・OBS・PC の負荷に直接影響する | 審査を通った「審査済み」の署名が必要です(全ソースの提出が要ります) |
| 権限 | 段階 | NC Lite | できること |
|---|---|---|---|
state.read | 標準 | ○(マイクの部分) | 今の状態を読む(曲・エフェクト・マイクの設定・エントリーの人数・配信の接続状態) |
meters.read | 標準 | ○ | 音量メーター・処理時間・音切れの数を読む |
chat.read | 標準 | 受信したコメントを読む(視聴者の ID は元に戻せない形) | |
mic.control | 標準 | ○ | ノイズ除去の強さ・マイク音質・声の補正・遅延モードを変える |
recording.control | 標準 | 録音を開始・停止し、録音の設定を変える | |
effects.control | 標準 | エフェクト・プリセット・お気に入りを切り替える | |
editfx.manage | 標準 | Edit FX のテンプレートを読み書きする | |
bgm.control | 標準 | BGM の再生・音量・自動で下げる・次の曲 | |
lyrics.control | 標準 | 歌詞を検索・選択・読み込み・表示切替・補正する | |
entry.control | 標準 | エントリーの受付切替・確定・スキップ | |
dictionary.write | 標準 | 読み方辞書に項目を足す(自分が足した項目だけ変えられる) | |
notify | 標準 | ○ | アプリの画面に通知・提案を出す |
obs.read | 標準 | OBS の状態・統計・設定の一部を読む(ストリームキーは読めない) | |
audio.output | ★ | 仮想マイクの出力音量を変える(0 にすると配信が無音になる) | |
processing.control | ★ | ○ | 音声処理を開始・停止する |
player.control | ★ | 内蔵 YouTube を操作する(再生・一時停止・シーク・キー変更) | |
tts.speak | ★ | 読み上げに文章を渡す(配信の音に乗る) | |
tts.control | ★ | 読み上げを ON/OFF・全停止する | |
overlay.draw | ★ | 統合配信UI の拡張機能用の表示に出す(配信の映像に出る) | |
obs.write | ★ | OBS の設定変更を提案する(適用は利用者が押す) | |
loadtest.run | ★ | 負荷テスト・計測の枠を使う(配信中は使えない) | |
chat.write | ★ | チャットへ投稿する(連携タブで選んだアカウント=配信者本人か Bot の発言として出る) | |
audio.capture | ★ | ○ | マイクの声を受け取る(ノイズ除去などの処理をした後の声だけ。処理前の音は渡さない)。API 1.1 |
audio.mic_route | ★ | ○ | マイクの声を配信に乗せない(拡張機能が動いている間だけ。止まると必ず戻る)。API 1.1 |
audio.inject | ★ | ○ | 拡張機能が作った音・VOICEVOX の声を配信に乗せる。API 1.1 |
system.unrestricted | ★ | 隔離せずに動かす(PC のファイル・ネットワーク・ほかのアプリに制限なくアクセスできる)。localhost のサーバー・ほかのプロセスの情報など、隔離すると動かないときだけ |
- NC Lite で動く拡張機能(
targetsにnclite)は、NC Lite の欄が ○ の権限だけを書けます。 - 版を上げて要審査の権限が増えると、その版は審査が要ります。利用者には、増えた権限だけ改めて許可を求めます。
audio.*の 3 つは manifest のapi_versionが"1.1"以上のときだけ書けます(Studio 0.30.5・NC Lite 1.6.5 から)。- 声を置き換える拡張機能は、
audio.capture・audio.mic_route・audio.injectをまとめて書きます(入れる画面で「声を置き換える拡張機能」と説明されます)。受け取った声を PC の外へ送るなら、network.hostsと説明文にそのことを書いてください。 - 開発者モード(作者本人の PC)では、要審査の権限も含めて全部を試せます。
- 権限ごとに使えるメソッド・イベントは
API_LIST_JA.mdの「3. 権限ごとの表」にあります。