10年後を見据えて、小規模開発からdenoを使ってみませんか?


概要

ロゴがかわいいね

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/[email protected]/cli.ts

Velociraptorはyml/yaml, json, ts拡張子の設定ファイルをサポートしています。トップレベルにallowプロパティを定義することで、全体に対してdenoのallowオプションを適用することができます。
また、配列形式にすることで&&に繋がなくても一連のコマンドを定義することもできます。

scripts.yaml
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.yaml
scripts:
  format:
    cmd:
      - deno fmt
    gitHook: pre-commit

設定後にvrコマンドを実行することでgithookがインストールされます。

$ vr

まとめ

  • denoなら設定不要ですぐにTypeScriptのコーディングを開始できる
  • Velociraptorと組み合わせてnodeのいいとこ取りができる
  • 将来を見据えて、今からdenoを使ってみよう

参考