-- Views
September 25, 25
スライド概要
Fresh2 の実行時にみられる権限状況について、Deno 2.5で追加された機能を用いて調査、対策する。
虎の穴ラボ株式会社は、主にとらのあな関連サービスのシステム開発を専門に担う、エンジニアの会社です。
Fresh 2 ちょっと注意した方が良さそうなこと toranoana.deno #22 虎の穴ラボ オクタニ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
自己紹介 奥谷 一陽 所属:虎の穴ラボ株式会社 仕事:Fantiaの開発 Ruby on Rails、 React 興味:Deno、TypeScript 最近購入:人狼機ウィンガルガ X:@okutann88 github:Octo8080X toranoana.deno 運営の1人 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
首 をながーくして 待 っていた Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
首 をながーくして 待 っていた Fresh 2 がついに 出 ました Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
https://github.com/denoland/fresh/releases/tag/2.0.0 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
Fresh 2 - 現在 2.1.1 - バグのFiXや、ドキュメントの内容が更新されています。 確認していく中でちょっと気になる挙動が見られたので、共有しておきたい。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
その前に前提になる Deno 2.5の機能について Permissions audit log - DENO_AUDIT_PERMISSIONS=./permission.log deno run -A main.ts のように起動することで、 監査ログの出力先パスを指定できるようになった。 例えば、以下のようなソースを用意し const mdText = Deno.readTextFileSync("./memo.md"); console.log(mdText); 次のように起動すると $ DENO_TRACE_PERMISSIONS=1 DENO_AUDIT_PERMISSIONS=./permission.log deno run permission_test.ts Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
その前に前提になる Deno 2.5の機能について
./permission.logに以下のログが記述される
{"v":1,"datetime":"2025-09-24T03:09:30Z","permission":"read","value":"./memo.md
","stack":["Object.readTextFileSync
(ext:deno_fs/30_fs.js:770:10)","file:///hoge/fuga/hoge/deno-test/permission_test.t
s:1:21"]}
どのように権限を求めたのか?参照できる。
Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
改めて Fresh2 に戻り、 freshのセットアップ
DENO_AUDIT_PERMISSIONS を有効にして fresh2を起動
$ deno run -Ar jsr:@fresh/init
$ DENO_TRACE_PERMISSIONS=1 DENO_AUDIT_PERMISSIONS=./permission.log deno task dev
タスクは次のように定義されている。
// deno.json
{
"nodeModulesDir": "auto",
"tasks": {
"check": "deno fmt --check . && deno lint . && deno check",
"dev": "vite",
"build": "vite build",
"start": "deno serve -A _fresh/server.js",
"update": "deno run -A -r jsr:@fresh/update ."
},
Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
改めて Fresh2 に戻り、 freshのセットアップ 「身に覚えのない」権限許可履歴がたくさん出てくる Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
よくわからなかったので、質問した。 趣旨 deno task で “dev”: “vite” にように定義されたタスクは、 “dev”: “deno run -A vite” のように動くがこれは想定した動作か? https://github.com/denoland/deno/issues/30822 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
よくわからなかったので、質問した。回答 趣旨 想定動作である。 権限を制限するには、明示的に deno 経由で実行の必要がある。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
対策 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
Fresh2権限修正版の起動方法
タスク定義を修正して起動。
// deno.json
{
"nodeModulesDir": "auto",
"tasks": {
"check": "deno fmt --check . && deno lint . && deno check",
"dev": "deno run node_modules/.bin/vite", // <= 修正
"build": "vite build",
"start": "deno serve -A _fresh/server.js",
"update": "deno run -A -r jsr:@fresh/update ."
},
権限要求プロンプトが出てくるようになった。
しかし、全部 y していくわけにもいかないので、
Permission sets in configを使う
Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
Permission sets in config とは? Deno2.5 で登場 deno.jsonにパーミッション設定を グループとして記述できる機能 -P および、 -P=[グループの名前 ] をオプションに渡して使用できる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
Fresh2権限修正版の起動方法
タスク定義に permissionsを追記して起動。
// deno.json
{
"nodeModulesDir": "auto",
"tasks": {
"check": "deno fmt --check . && deno lint . && deno check",
"dev": "deno run -P node_modules/.bin/vite",
"build": "vite build",
"start": "deno serve -A _fresh/server.js",
"update": "deno run -A -r jsr:@fresh/update ."
},
"permissions": { // <= 追記
"default": {
"read": true,
"write": true,
"net": true,
"env": true,
"sys": true,
"ffi": true,
"run": true
}
},
Denoの管理上で明示的にアクセス権限管理を行い、 Fresh2を起動できる。
上記は甘い設定 (ほぼ -A)なので内容の見直しは必要。
Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
まとめ - DENO_AUDIT_PERMISSIONSを使うことで権限の許可状況が把握しやすく なった。 - Fresh2 の deno taskの記述は権限管理が甘めになっている。 - DENO_AUDIT_PERMISSIONS を使うと状況が把握しやすい。 - 気にする人は、明示的に deno経由で起動すること - deno.json にパーミッション設定を記述できるようになった - 複雑なものほど便利に使用できるように感じられる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ありがとうございました Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.