Deno用モジュールバージョン管理ツールdeno-uddの使い方と設定の紹介
DenoはNode.js時代のpackage.json
を廃し、直接URLにバージョンナンバーを仕込む形でのバージョン管理を導入しています。
スタイルガイド的には、モジュールの読み込みをdeps.ts
というファイルに任せ、プロジェクト内ではそこから間接的にimport
する形での管理が推奨されています。
このモジュールのバージョン管理を補助してくれるツール、UDDを紹介します。
Update Deno Dependenciesを略してUDDということのようです。
ところで、なんでメイン画像(↓)の竜脚類君が牛っぽい雰囲気なんでしょうかね?
地面に直接生えている草を食べるために長い首を上げ下ろしするのは明らかに無駄なので種の存続は危ういと思いますが…[1]。
導入
deno.land/x
にて公開されています。deno install
でインストールしましょう。
❯ deno install -A -f -n udd https://deno.land/x/udd@0.5.0/main.ts
(略)
✅ Successfully installed udd
/Users/kawarimidoll/.deno/bin/udd
インストール先はデフォルトでは~/.deno/bin
です。こちらにPATH
が通っていることを確認してください。
udd
のみで実行するとヘルプが見られます。
❯ udd
usage: udd [-h] [--dry-run] [--test TEST] file [file ...]
udd: Update Deno Dependencies
Positional arguments:
file files to update dependencies
Optional arguments:
-h, --help show this help text
--dry-run test what dependencies can be updated
--test TEST command to run after each dependency update e.g. "deno test"
使い方
ファイルを指定して実行することで、その中でimport
しているモジュールのバージョンを調査し、一括で更新してくれます。
❯ # 基本
❯ udd deps.ts
❯ # 確認だけ
❯ udd deps.ts --dry-run
❯ # 複数指定
❯ udd main.ts util.ts
❯ # deps.tsが分散している場合
❯ udd ./**/deps.ts
❯ # 一括指定
❯ udd *.ts
--test
オプションを付けると、テストが通ることを確認したうえで更新してくれます。
❯ udd deps.ts --test="deno test"
基本的には何も設定をせず動かせるので、インストール→実行がすぐ試せます。
また、もしこのツールを使用しなくなったとしても、これに関する負債が残らないというのも利点です。
対応先
記事執筆時点では、以下からimport
されているモジュールが更新対象となっています。
Denoでよく使われるものはだいたい対応していそうです。
- https://deno.land/std
- https://deno.land/x
- https://denopkg.com
- https://dev.jspm.io
- https://cdn.pika.dev
- https://cdn.skypack.dev
- https://unpkg.com
- https://raw.githubusercontent.com
- https://gitlab.com/:user/:repo/-/raw
- https://cdn.jsdelivr.net
- https://x.nest.land
設定
上記の通り、基本動作に設定は不要ですが、いくつか便利な設定があるので紹介します。
semverの尊重
Node.jsのpackage.json
のように、トークンをつけることでメジャーバージョンの固定などができます。
モジュールURLのハッシュ部に指定します。なかなか面白いアイデアだと思います。
-
^
メジャーバージョンを固定する- メジャーバージョンが0ならマイナーバージョンを固定する
-
~
メジャー・マイナーバージョンを固定する- メジャーバージョンが0ならマイナーバージョンは更新される
-
<[バージョン]
指定したバージョンより(semverで)低いバージョンに固定する -
=
更新を行わない
// 設定例
import { rgb24 } from "https://deno.land/std@0.101.0/fmt/colors.ts#^";
import ky from "https://cdn.skypack.dev/ky@0.28.5?dts#=";
<
は明示的に上限バージョンを指定する必要がありますが、それ以外はURL内に含まれるバージョン指定を参照します。
Velociraptorの利用
これは個人的な好みなのですが、Denoプロジェクト内で使用するコマンドはとりあえずVelociraptorにまとめたくなります。
Velociraptor自体の説明は以下の記事をご覧ください。
こんな感じの設定を追加します。
scripts:
deps:
desc: Update dependencies with ensuring pass tests
cmd: udd deps.ts --test="vr test"
test:
desc: Runs the tests
cmd: deno test --reload --coverage=cov_profile
gitHook: pre-push
これで、vr deps
でテスト通過の確認をしつつモジュールの更新をできるようになります。
こちらの設定は自作テンプレートに含めています。
注意点
- URL内にバージョン番号が含まれないと、UDDの確認対象外となります。
- これ自体の更新が滞り気味のようです。最新機能がどんどん追加されていく類のツールではありませんが、更新が止まってしまうと、今後のDeno本体などの修正によって使えなくなる可能性も否定できません。
自動化
GitHub Actionsを使って自動化する方法を以下の記事で紹介しています。
まとめ
Denoのモジュールのバージョン管理ツールのUDDを紹介しました。
「テストしつつ更新」ができるので、モジュール更新の心理面・作業面の負荷を減らすことができるでしょう。結果的にプロジェクトの寿命も延びるのではないでしょうか。
この記事を書いている途中でドキュメントに不備を見つけたのでコントリビューションしました。
まだv0.5.0と若いツールなので、けっこうコントリビューションチャンスがありそうです。
始めやすく、使いやすく、捨てやすい感じのツールだと思うので、気になった方は使ってみてください。
-
近年では、そもそも竜脚類の首は持ち上げることができず、水平ちかくに保たれていたという説が有力らしいです ↩︎
Discussion