OpenCode: OpenCode Permission System
最終更新:2026-08-31
--- title: OpenCode権限設定とフォーマッタツール description: きめ細かい権限制御とコードフォーマッタの設定方法を学ぶ order: 15 lang: ja
権限設定はOpenCodeを安全に使用するためのコアであり、フォーマッタツールはコードスタイルの一貫性を確保します。
1. 学習内容
- 3レベルの権限体系
- Bashコマンドのきめ細かい制御
- エージェントレベルの権限上書き
- フォーマッタツールの設定
2. 3レベルの権限体系
| 値 | 説明 | 使用シーン |
|---|---|---|
allow |
直接許可 | 安全な操作、例:git status |
ask |
ユーザーの確認が必要 | リスクのある操作、例:ファイル編集 |
deny |
直接拒否 | 危険な操作、例:rm -rf |
3. グローバル権限設定
JSON
{
"permission": {
"edit": "ask",
"bash": {
"*": "ask",
"git status *": "allow",
"npm test": "allow",
"rm *": "deny",
"sudo *": "deny"
}
}
}
最後にマッチしたルールが優先。*ワイルドカードを前に、具体的なルールを後に配置。
4. エージェントレベルの上書き
JSON
{
"permission": { "edit": "deny" },
"agent": {
"build": { "permission": { "edit": "ask" } },
"review": { "permission": { "edit": "deny" } }
}
}
5. フォーマッタツール
opencode.jsonで設定:
JSON
{
"formatter": {
"command": "prettier",
"args": ["--write"]
}
}
| ツール | 言語 | 設定 |
|---|---|---|
| Prettier | JS/TS/CSS/HTML | "command": "prettier", "args": ["--write"] |
| Black | Python | "command": "black" |
| gofmt | Go | "command": "gofmt", "args": ["-w"] |
| rustfmt | Rust | "command": "rustfmt" |
AIがファイルを修正 → フォーマッタが自動実行 → コードスタイルが統一。
6. セキュリティベストプラクティス
| シーン | 推奨設定 |
|---|---|
| 日常開発 | edit: ask, bash: ask, write: ask |
| コードレビュー | edit: deny, write: deny, bash: git読み取りのみ |
| CI/CD | edit: allow, bash: allow(制限付き) |
| 初心者モード | すべての権限をaskに設定 |
❓ FAQ
Q ask権限は不便すぎますか?
A 最初は不便に感じるが、安全のためのコスト。信頼できる操作はallowに設定して確認を減らすことが可能。
Q フォーマッタの実行が失敗した場合?
A OpenCodeはタスクを継続。フォーマッタの失敗はワークフローをブロックしない。後で手動でフォーマット可能。
📖 まとめ
- 3つの権限レベル:allow、ask、deny
- Bash権限はGlobパターンできめ細かく制御
- エージェントレベルの権限がグローバル設定を上書き
- フォーマッタツールはAI修正後のコードスタイルを統一
- 最低でもeditとwriteをaskに設定することを推奨
📝 練習問題
-
基本問題:グローバル権限を設定し、editとbashをaskにしてください。
-
応用問題:Bash権限にGlobルールを設定し、git操作を許可しつつ危険なコマンドを拒否してください。
-
チャレンジ問題:Prettierをフォーマッタとして設定し、OpenCodeの修正後にコードが自動フォーマットされるようにしてください。