コンテンツにスキップ

セキュリティ・レベル Capabilities

《訳注》

文中のセキュリティ関連の用語に関しては以下のような「訳語」を当てていますが、コードの内容等との関連を明確にするために英語表記を優先してあります。
・capabilities 「セキュリティ・レベル」。原意は「…できる能力」。開示するセキュリティのレベルを決定する能力・機能を示すもの。
・Capability files 「(セキュリティ)設定ファイル」。セキュリティ機能の設定を行なうファイル。
・capability system 「(セキュリティ)設定システム」。セキュリティ機能を管理するシステム。
・Permissions 「アクセス権」。原意は「…してよいという許可」。情報にアクセスする「許可」と「拒否」を行なう権限。)

Tauri は、アプリケーションおよびプラグインの開発者に「capabilities system」(セキュリティ設定システム)を提供し、システムが提供する WebView で実行されているアプリケーション・フロントエンドに「コア部」の情報を開示することに関して細かく有効化(許可)/無効化(拒否)の制限を設けています。

「Capabilities」(セキュリティ・レベル)とは、どのウィンドウや Webview に対して、どの Permissions(アクセス権) を付与するのか、あるいは拒否するのか、を定義するものです。

「Capabilities」は複数のウィンドウや Webview にその作用を及ぼすことができ、しかも、そうしたウィンドウや Webview は複数の capabilities から参照されることもあります。

セキュリティ・レベルを記述する「Capability files」(設定ファイル)は、JSON または TOML ファイルとして「src-tauri/capabilities ディレクトリ」内で定義されます。

それぞれ個々にこの設定ファイルを作成して、 tauri.conf.json ファイル内で「識別子 identifier」によってのみ参照するのが適切な方法ですが、それを tauri.conf.json ファイル内の「capabilities フィールド」に直接定義することもできます。

「capabilities ディレクトリ」内のすべての「capabilities」はデフォルトで自動的に有効になります。一旦 tauri.conf.json でそのセキュリティ・レベルが明示的に有効化されると、アプリケーションのビルドではその機能のみが使用されます。

体系的な設定項目の詳細については、Reference(参考情報) の「設定 Configuration」項を参照してください。

次の JSON ファイルの例では、メイン・ウィンドウに対して、コア・プラグインと window.setTitle API のデフォルト機能を利用可能にする「capability」(セキュリティ・レベル)を定義しています。

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default",
"core:window:allow-set-title"
]
}

以下のスニペット(抜粋内容)は、[Tauri 設定ファイル](/ja/develop/configuration-files/#tauri-の設定)ファイルの一部です。

これがおそらく最も一般的な設定方法で、個々の「capabilities」を行内に埋め込み(インライン化)、「permissions」のみが「識別子 identifier」で参照されます。

この設定方法では、capabilities ディレクトリ内に、適切に定義された「capability files」(設定ファイル)が必要です。

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": ["my-capability", "main-capability"]
}
}
}

インライン化された「capabilities」の設定は、事前に定義された「capability」設定との併記が可能です。

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "My application capability used for all windows", // 「設定内容の説明」: "アプリのすべてのウィンドウ用セキュリティ・レベル"
"windows": ["*"],
"permissions": ["fs:default", "allow-home-read-extended"] // 「アクセス権の設定」: "ファイルシステム:デフォルト"、"allow-home..." など
},
"my-second-capability" // "セキュリティ・レベル②の設定"
]
}
}
}

デフォルトでは、(tauri::Builder::invoke_handler 関数を使用して)あなたのアプリに登録したすべてのコマンドは、そのアプリのすべてのウィンドウと WebView で使用できます。これを変更するには、AppManifest::commands の使用を検討してください。

src-tauri/build.rs
fn main() {
tauri_build::try_build(
tauri_build::Attributes::new()
.app_manifest(tauri_build::AppManifest::new().commands(&["your_command"])),
)
.unwrap();
}

「capabilities」(セキュリティ・レベル)は、「platforms 配列」を定義することで、各プラットフォーム毎に設定が可能です。 デフォルトでは、「capability」はすべてのターゲットに適用されますが、ターゲットとする OS (linux・macOS・windows・iOS・android)をサブセットで選択できます。

次の例は、デスクトップ・オペレーティング・システム用の「capability」設定です。 この "platform" 設定では、プラグインがデスクトップでのみ「permissions」(アクセス権)が有効化されることに注目してください:

src-tauri/capabilities/desktop.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:allow-register"]
}

モバイル機器用の「capability」設定の事例は以下のようになります。 この"platform" 設定では、プラグインがモバイル OS でのみ「permissions」が有効化されることに注意してください:

src-tauri/capabilities/mobile.json
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}

デフォルトでは、API は Tauri アプリにバンドルされているコードにのみアクセス可能です。 リモート・ソースが特定の Tauri コマンドにアクセスできるようにするためには、「capability configuration file」(セキュリティ・レベル設定ファイル)で定義する必要があります。

以下の事例では、NFC タグをスキャンし、tauri.app のすべてのサブドメインからバーコード・スキャナーを使用できるようにしています。

src-tauri/capabilities/remote-tags.json
{
"$schema": "../gen/schemas/remote-schema.json",
"identifier": "remote-tag-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.tauri.app"]
},
"platforms": ["iOS", "android"],
"permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"]
}

セキュリティ境界 Security Boundaries

Section titled “セキュリティ境界 Security Boundaries”

どのようなことから保護されるのでしょうか?

「permissions」(アクセス権)と「capabilities」(セキュリティ・レベル)に応じて、次のことが可能になります:

  • フロントエンドでの「セキュリティ侵害」の影響を最小限に抑えます
  • ローカル・システムのインターフェースとデータの(偶発的な)「漏洩」を防止または軽減します
  • フロントエンドからバックエンド/システムへの「権限昇格」を防止または軽減します

どのようなことから保護されないのでしょうか?

  • 悪意のある、または安全でない「Rust コード」
  • 緩すぎる「スコープ」(適用範囲)と「configuration」(設定内容)
  • コマンド実装における不正確な「スコープ・チェック」
  • Rust コードからの「意図的な逸脱」
  • 基本的に、アプリの Rust Core に記述されたもの「すべて」
  • システム WebView 内の「ゼロデイ攻撃」またはパッチ未適用の「ワンデイ攻撃」
  • 「サプライチェーン攻撃」または「不正侵入された開発者システム」

Tauri は、tauri-build を通して、アプリケーションで利用可能なすべての「permissions」(アクセス権)を持つ「JSON スキーマ」を生成しますので、使用している IDE(統合開発環境)で自動補完が行なえるようになります。 スキーマを使用するには、「設定ファイル/configuration file」(.json ファイル または .toml ファイル)内の $schema プロパティを gen/schemas ディレクトリにある各プラットフォームごとに設けられたスキーマのいずれかにセットします。 通常はこれを ../gen/schemas/desktop-schema.json または ../gen/schemas/mobile-schema.json にセットしますが、特定のターゲット・プラットフォーム用の「capability」(セキュリティ・レベル)を定義することもできます。

)

Tauri アプリケーションのディレクトリ構成例(簡略版):

ターミナルウィンドウ
tauri-app
├── index.html
├── package.json
├── src/
├── src-tauri/
│ ├── Cargo.toml
│ ├── capabilities/
│ └── <identifier>.json/toml
│ ├── src/
│ ├── tauri.conf.json

すべての項目を tauri.conf.json にインライン化設定可能ですが、少し高度な設定を行なうと、このファイルが肥大化してしまいます。 この手法の目的は、アクセス権を可能な限り抽象化して理解しやすくすることです。

すべてのコア・アクセス権のリストは、「References(参考情報)」の Core Permissions/コア・アクセス権 ページにあります。

【※ この日本語版は、「Sep 3, 2026 英語版」に基づいています】


© 2026 Tauri Contributors. CC-BY / MIT