この記事は、Deno Advent Calendar 2025 の15日目の記事です。
2025 年 12 月 11日に deno v2.6がリリースされました。 このリリースに、dx が導入されています。 これはnpm における npx のようなパッケージバイナリの実行ツールです。
こちらを使い、deno 上で textlint を動かすようにしてみました。
参考
導入 dx は、deno 2.6 以降で利用可能です。
dx は、deno x コマンドのエイリアスとして存在します。 以下のように、導入してほしい旨の記載がありますが、弊windows環境では導入がうまくいきませんでした。 後述の操作はすべて deno x コマンドで実行していきます。
1 $ deno x --install-alias
既存 textlint プロジェクトへの導入 既に設定されている textlint で使えるか確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ npx textlint hogehoge/js110.md $ deno x Available (local ) commands: esparse esvalidate js-yaml json5 mkdirp parser prh resolve rimraf semver sentence-splitter textlint deno x textlint hogehoge/js110.md
正常動作します。
完
というわけには行かないので深堀。
textlint は対象のファイルにアクセスして文法なりを調べてくれるツールです。 すなわち、ローカルファイルへの読み込みアクセスがあります。 しかし、先のコマンドでは、deno の権限に関する記述していません。 これは、特別設定されなければ、-A(–allow-all) 権限が付与されるためでした。
そのため、明示的に権限を中途半端に与えて実行すると、以下のように確認して実行がされます。
1 2 3 4 5 6 7 $ deno x -E textlint hogehoge/js110.md deno x -E textlint hogehoge/js110.md ✅ Granted sys access to "osRelease" . ✅ Granted read access to "hogehoge\textlint\node_modules\@textlint\linter-formatter\lib\src\formatters" . ✅ Granted read access to "hogehoge\textlint\node_modules\@textlint\fixer-formatter\lib\src\formatters" . ✅ Granted sys access to "homedir" . ...
もし、明示的に権限を与えながら、確認プロンプトを出さずに実行するには、以下のように記述します。
1 deno x -ERS textlint hogehoge/js110.md
もしくは、deno.json へ以下のように記述を用意して、-P を与えることでも実行できました。
deno.json 1 2 3 4 5 6 7 8 9 10 11 { "permissions" : { "default" : { "read" : true , "write" : true , "net" : false , "env" : true , "sys" : true } } }
1 2 deno x -P textlint hogehoge/js110.md
もし、既存の deno task 運用に乗せるなら、以下のように記述をすればよいです。
deno.json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "tasks" : { "textlint" : "deno x -P textlint" } , "permissions" : { "default" : { "read" : true , "write" : true , "net" : false , "env" : true , "sys" : true } } }
1 2 3 4 5 6 7 8 9 10 11 $ deno task Available tasks: - textlint deno x -P textlint $ deno task textlint hogehoge/js110.md Task textlint deno x -P textlint "hogehoge/js110.md" Warning Permissions in the config file is an experimental feature and may change in the future. hogehoge\js110.md 13:24 error "よう" が連続して2回使われています。 ja-technical-writing/ja-no-successive-word
deno x で textlint を初期構築(失敗) 先のものは、npm で導入したものを deno x で動かしたものでした。 deno x で textlint プロジェクトを初期構築を試みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ deno x textlint --init Install npm:textlint? [Y/n] => y Download ▰▰▰▰▰▰ [00:08] 54/56 == No rules found, textlint hasn’t done anything == Possible reasons: * Your textlint config file has no rules. * You have no config file and you aren’t passing rules via command line. * Your textlint config has a syntax error. => How to set up rules? https://github.com/textlint/textlint/blob/master/docs/configuring.md
正常に導入されました。
設定については、もとから使っていた.textlintrc を移植しますが、ルールを見つけられないようです。
.textlintrc 1 2 3 4 5 6 7 8 9 10 11 12 { "filters" : { "comments" : { "enablingComment" : "textlint-enable" , "disablingComment" : "textlint-disable" } } , "rules" : { "preset-ja-technical-writing" : true , "textlint-rule-preset-japanese" : true } }
一旦ルールに必要なパッケージ群を導入します。
1 $ deno add npm:textlint-filter-rule-comments npm:textlint-rule-preset-ja-technical-writing npm:textlint-rule-preset-japanese
ここで気が付いて、–init があり実行すると、設定ファイルが変更されているということが分かりました。
1 2 $ deno x textlint --init .textlintrc.json is created.
.textlintrcの内容は、.textlintrc.json に移植します。
これでもルールが見つからないようです。 ここで感づいたので、 deno add npm:textlint も実行します。 あくまで、deno x は実行してくれるが、ローカルに展開はしてくれるわけではないので、インストールはしておく必要があった模様です。
deno x で textlint を初期構築(改めて) 改めて、0->1でやり直します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $ deno init $ deno add npm:textlint Add npm:textlint@15.5.0 Dependencies: + npm:textlint 15.5.0 $ deno x Available (local ) commands: textlint $ deno x textlint --init .textlintrc.json is created. $ deno add npm:textlint-filter-rule-comments npm:textlint-rule-preset-ja-technical-writing npm:textlint-rule-preset-japanese Add npm:textlint-filter-rule-comments@1.2.2 Add npm:textlint-rule-preset-ja-technical-writing@12.0.2 Add npm:textlint-rule-preset-japanese@10.0.4 Dependencies: + npm:textlint-filter-rule-comments 1.2.2 + npm:textlint-rule-preset-ja-technical-writing 12.0.2 + npm:textlint-rule-preset-japanese 10.0.4
作成された .textlintrc.json を編集して、実行。
1 2 3 4 $ deno x textlint hogehoge/js110.md hogehoge/js110.md 13:24 error "よう" が連続して2回使われています。 ja-technical-writing/ja-no-successive-word
改めて、deno.jsonにtask 定義と権限定義し、deno task で実行。
1 2 3 4 5 6 $ deno task textlint hogehoge/js110.md Task textlint deno x -P textlint "hogehoge/js110.md" Warning Permissions in the config file is an experimental feature and may change in the future. hogehoge/js110.md 13:24 error "よう" が連続して2回使われています。 ja-technical-writing/ja-no-successive-word
この手順で良いようです。
deno x 及び dx の導入により、パッケージバイナリを実行しやすくなりました。 これにより、Node to Deno へ移行しやすくなることが期待されます。
では。