deno に出会うまで
ドメイン駆動設計
やマイクロサービスアーキテクチャ
の自習のために保険業務アプリでも自作してみようという試みを初めてみる。仕事ではゴリゴリに java
を使用しているけれど。プライベートでも java
だとオモシロクナイ。バックエンドだけでなくフロントエンドも触りたいので、javascript
のランタイムである node.js
を最初は使っていた。
しかし、どうも node.js
作った人が新しい javascript
ランタイムを作り始めたらしいと聞き、deno
と出会う。どうせプライベートだし、新しいものに飛びついてしまえと deno
を使いはじめる。
依存関係ってどうやって管理するの?
node.js
の後悔から package.json
を捨て去ってしまったdeno
。その代わりに import
文に URL を書けるんだよと言われても...。Don't Repeat Myself!、React の CDN のパスを至るところに書きたくないよ!バージョン上がったら、そうするんだ!
管理用ファイルを作る
そんなときは deps.ts
というファイルに依存関係を書いてしまおうというのが現状のベストプラクティスのようである。
例えば、oakserver
という koa
の deno
版の deps.ts
は以下のように記載されている。
export { copyBytes, equal } from "https://deno.land/std@0.67.0/bytes/mod.ts";
export { Sha1 } from "https://deno.land/std@0.67.0/hash/sha1.ts";
export { HmacSha256 } from "https://deno.land/std@0.67.0/hash/sha256.ts";
export { serve, serveTLS } from "https://deno.land/std@0.67.0/http/server.ts";
...
外部ライブラリを使用する場合はこの deps.ts
から必要なクラスなどをインポートすれば良い。package.json
の devDependency
に対応する依存関係を管理するのであれば deps_dev.ts
などのファイルに記載すれば良い。alosaur という NestJS ライクなフレームワークでは deps_test.ts
というファイルをテストランナーを管理するために別途用意している。
ライブラリではなく、純粋なアプリケーションとして使用するものであれば import maps
というものでも良い。その場合、各ソースファイルの import 文の記載は node.js
時代のものと似たような書き方になる。繰り返すが、ライブラリとして公開するようなものには使えないので注意が必要である。
アップデートは?
現状では、3rd party 製のソフトウェアの力を借りなければならない。deps.ts
で依存関係を管理する場合、dmm が、import map
で管理するのであれば、Trex というソフトウェアがそれぞれ役に立ちそうである。まだまだ、十分に成熟したデファクトスタンダードな依存関係管理ソフトウェアは deno
には無いが、どちらもシンプルな仕様なので今後なにか新しいものが登場しても後悔することはないであろうと思う。
まだまだこれから
deps.ts
で管理するにせよ import map
で管理するにせよ、バージョンを範囲指定するための仕組みは必要であるが、package.json
のチルダやキャレットを使用したバージョン指定のような仕組みが deno
やその周辺には現状存在しない。