概要
denoとは現代のJavaScript, TypeScriptランタイムである!
どんなところが現代的かというと、node.jsと比べて以下のような特徴があります。
- デフォルトでセキュリティが保護されている。明示的に有効にしない限りはファイルやネットワーク、実験的機能にアクセスできない。
- TypeScriptをサポート。
- コードフォーマッターやテストランナーといった組み込みユーティリティ。
- 動作保証された標準ライブラリ。
※こちらの記事が非常に詳しく説明してくれているのでオススメです
denoはもう「使える」ツールだ
ここからが本編です。
denoは歴史が浅く、なんとなく「まだ実用的ではないかな」「nodeでいいかな」とお思いではないですか?
確かにライブラリがまだ揃っていなかったりでこれは一定正しいかもしれません。しかしその一方、場合によってはdenoは非常に有用なツールとして使うことができます。
ではどういった場面でdenoが輝くか?それは小規模のWebサーバ、CLIツール、バッチなどです。
なぜ小規模開発でDenoを使うのか?
Denoはいわゆる箱から出した状態ですぐにコーディングを始めることができるからです。
CLIツールをサクッとnode.jsで書きたい時に、以下のように面倒なことが多々あるのではないかと思います。一方Denoはモダンなプログラミング環境が最初から整えられているので、設定なしですぐにコードを書き始めることができます。
-
.ts
ファイルを直接実行できない。コンパイルするかts-node
等のライブラリを入れる必要がある。- → TypeScriptサポートのランタイム。設定なしで直接実行することができる。
- TypeScript, Linter, Test Runner, Code Formatterをイチからセットアップする必要がある。
- →最初から全部入り。
deno <command>
でLinting, テスト実行, フォーマットができる。
- →最初から全部入り。
- ファイルR/W、HTTPリクエストといった一般的な操作もライブラリを入れる必要がある。
- →汎用的な標準ライブラリを完備。
- fs, io, http, crypt, hash, log, path ...などなど
- →汎用的な標準ライブラリを完備。
もちろんnodeでも設定する時間をかければ実現できますが、本質的なプログラミングに集中できる点は現時点でのdeno最大の利点かなと思います。
denoだと困るあれこれは?
オプションが長すぎる問題
前述の通り、denoはデフォルトでセキュリティが保護されています。
その一方で操作の許可をするためには毎回--allow-net
のようにオプションをつける必要があり、いちいち入力が面倒だという問題があります。
そこでdenoにpackage.json
のスクリプトランナーと同等の機能をもたらしてくれるVelociraptorというツールを紹介します。
$ deno install -qAn vr https://deno.land/x/velociraptor@1.1.0/cli.ts
Velociraptorはyml/yaml
, json
, ts
拡張子の設定ファイルをサポートしています。トップレベルにallow
プロパティを定義することで、全体に対してdenoのallowオプションを適用することができます。
また、配列形式にすることで&&
に繋がなくても一連のコマンドを定義することもできます。
allow:
- read
- write
scripts:
start: deno run server.ts
test:
cmd:
- deno fmt
- deno lint
- deno test --allow-net
実行にはvr
コマンドを使用します。
$ vr start
husky使えない問題
githookをpackage.jsonで定義できるhuskyというツールがあるのですが、2021年9月現在denoには対応していないようです。
コミット前のfmt設定などをgit管理できるためチームメンバーで統一できる優れたツールなのですが、実は先述のVelociraptorがgithookにも対応しています。
gitHook
キーに実行タイミングを定義することができます。
scripts:
format:
cmd:
- deno fmt
gitHook: pre-commit
設定後にvr
コマンドを実行することでgithookがインストールされます。
$ vr
まとめ
- denoなら設定不要ですぐにTypeScriptのコーディングを開始できる
- Velociraptorと組み合わせてnodeのいいとこ取りができる
- 将来を見据えて、今からdenoを使ってみよう