🦕

Denoを(Vimで)開発するときのテンプレートを作った

3 min read

Denoの開発をする際に毎回同じような設定を行っているのでテンプレートリポジトリを作りました。

https://github.com/kawarimidoll/deno-dev-template

作業記録(Zenn scrap)はこちら

Loggerの設定

出力したログがコンソールだけでなくファイルに残っていると後から見直しやすく便利です。
これに関しては以下の記事でまとめました。

https://zenn.dev/kawarimidoll/articles/b1d9bc15aaa99c

ここで作ったlogger.tsを入れておきます。

Dotenvの設定

dotenvも使用頻度が高いのでテンプレートに含めました。

Safe Modeを使うため、使用する環境変数の名前を.env.exampleに書きます。
といってもテンプレートなので仮の名前です。

.env.example
SECRET_TOKEN=secret_token
env.ts
import { config } from "https://deno.land/x/dotenv@v2.0.0/mod.ts";

const {
  SECRET_TOKEN,
} = config({ safe: true });

export { SECRET_TOKEN };

Safe Modeなら必要な環境変数が定義されていない場合にエラーを出してくれます。
なお、このenv.tsを読み込まなければconfig()も実行されないので、環境変数を使わない場合は気にする必要はありません。

Vimの設定

(自分はNeovimですが)開発する際にcoc.nvimの設定が必要なので、これもテンプレートに入れてしまいます。

Node.js開発用のcoc-tsserverおよびcoc-prettierとの競合を回避して、coc-denoに動いてもらうよう設定します。

.vim/coc-settings.json
{
  "deno.enable": true,
  "deno.lint": true,
  "deno.unstable": true,
  "prettier.disableLanguages": ["typescript"],
  "typescript.format.enabled": false
}

普通はエディタ用の設定ファイルはGit管理から外すのが良いとされていますが、個人用テンプレートなので気にしないことにしました。

deps.tsの配置

テンプレートなので必須ではないのですが、Denoリポジトリであることの判断にdeps.tsが使われることがあるっぽいので、空ファイルを置いておきます。

deps.ts

Velociraptorの設定

Denoはセキュリティのために--allow-writeなどのオプションを明示的に使う必要があります。
安全性としては優れていますが、開発中にいちいち記載するのは面倒です。
ということでタスクランナーのVelociraptorを使います。

https://velociraptor.run/

ドキュメントに従ってインストールします。

❯ deno install -qAn vr https://deno.land/x/velociraptor@1.0.1/cli.ts 
✅ Successfully installed vr
/Users/kawarimidoll/.deno/bin/vr
ℹ️  Add /Users/kawarimidoll/.deno/bin to PATH
    export PATH="/Users/kawarimidoll/.deno/bin:$PATH"

velociraptor.ymlを定義します。

velociraptor.yml
allow:
  - write=app.log
  # - read=.env,.env.example,.env.defaults
  # - env
  # - net

scripts:
  start:
    desc: Runs main script
    cmd: main.ts
  # test: deno test
  lint: deno lint
  format: deno fmt
  pre-commit:
    cmd:
      - vr lint
      - vr format
    gitHook: pre-commit

これでvrを実行すればhookが作成されます。

❯ vr

  ✅ Git hooks successfully installed
  

  🦖 Available scripts
  
    • start
    Runs main script
    $ main.ts

    • lint
    $ deno lint

    • format
    $ deno fmt

    • pre-commit
    Runs at pre-commit
    $ vr lint, vr format
    
  To run a script pass its name as the first argument to the vr command:
  
  $ vr start
    
  Any additional arguments will be passed to the script.

これでvr startmain.tsを実行でき、コミットのたびにファイルの整形と検証をやってくれるようになります。

しれっと書いてますが、このテンプレートを作る途中で知りました。
便利なライブラリがあるもんですね。

おわりに

これでDeno開発のスタートダッシュが楽になりそうです。

今後も必要なものがあれば追加していきたいと思います。

Changelog

  • 2021-06-21 Velociraptorの設定ファイルの名前をscripts.ymlからvelociraptor.ymlに変更しました。また、内容を少し追加しました。