🦕

GitHub上のDenoモジュールの配信システムを作った

2021/09/11に公開

DenoのモジュールをGitHubから直接インポートする場合、インポート元のURLはraw.githubusercontent.comとなります。
これだとちょっと長い…ということで、これを簡単に呼び出せるようにするシステムを作りました。

https://pax.deno.dev/

名前はpackages.deno.devとかmodules.deno.devとかも考えたのですが、URLを短くするのが目的なので、packspaxという感じに決めました。
べつに悪い意味もなさそうですし。
https://ejje.weblio.jp/content/pax

背景

Denoには、現在deno.land/xとx.next.landという2つの大きなモジュールレジストリがあります。

https://zenn.dev/kawarimidoll/articles/6022552f509b84

ただ、これらへの公開には、以下のようなデメリットがあります。

  • deno.land/x
    • GitHub上でのリリース操作が必須
    • 公開数制限が存在
  • x.nest.land
    • CLI(eggs)での操作が必要
      • GitHub Actions等で自動化は可能

実のところ、Denoは公開URLであればどこにあるファイルでも指定できるので、モジュール使用のために各レジストリに公開することは必須ではありません。GitHub上のファイルを直接指定してもOKです。
しかしその場合はURLがちょっと長くなります。

import { tag } from "https://raw.githubusercontent.com/kawarimidoll/deno-markup-tag/0.2.3/mod.ts";

前置きが長くなりましたが、このような場合にpaxが利用できます。

つかいかた

paxを使うと、https://pax.deno.dev/user/repo[@tag][/path]という記法でGitHub上のファイルにアクセスできます。

普通にGitHubのURLを指定する場合と比較してみましょう。

# raw.githubusercontent.com
import { tag } from "https://raw.githubusercontent.com/kawarimidoll/deno-markup-tag/0.2.3/mod.ts";

# pax.deno.dev
import { tag } from "https://pax.deno.dev/kawarimidoll/deno-markup-tag@0.2.3/mod.ts";

はい。13字ほど短くなりました。
あれ…そんなに短くなってないですね…。

実は、paxではタグ指定とファイルパスを省略することができます。
タグを省略するとmaster[1]、ファイルを指定するとmod.tsが暗黙的に使用されます。
したがって、単に最新版を読み込むなら、以下のように書くことができます。

# pax.deno.dev latest mod.ts
import { tag } from "https://pax.deno.dev/kawarimidoll/deno-markup-tag";

これは短くなったと言えるのではないでしょうか。

他のレジストリへの連携も不要なので、モジュールをサクッと公開したい場合などは使いやすいと思います。
なお、Denoはモジュールをキャッシュするため、最新版の更新を取り込むにはdeno run --reloadなどでキャッシュをクリアする必要があることにご注意ください。

doc.deno.land用のショートハンド

?dというパラメータを追加することで、doc.deno.landへのリンクに変化する機能があります。

https://doc.deno.land/https/raw.githubusercontent.com/kawarimidoll/deno-markup-tag/main/mod.ts

https://pax.deno.dev/kawarimidoll/deno-markup-tag?d

https://pax.deno.dev/kawarimidoll/deno-markup-tag?d

こちらは最新版のドキュメントを見たい場合が多いと思われますし、キャッシュがあってもWebページ上でリフレッシュできるので、スクリプト内のインポートで使うより有用かもしれません。

なお、doc.deno.landに関しては以下の記事で紹介しています。
https://zenn.dev/kawarimidoll/articles/eb60c117266137

参考

本システムはDeno pkgを非常に参考にしました。

https://denopkg.com/

こちらもGitHub上のモジュールを配信してくれるものの、本記事執筆時点で最終更新が16ヶ月前であり、開発が滞り気味のようです。

また、サイト自体はNext.jsで作成してVercelで配信しているようなのですが、今ならDeno Deployを使ったものがあっても良いんじゃないか、と思ってpax.deno.devを作成しました。

おわりに

モジュール配信システムのpax.deno.devの紹介でした。
deno.land/xなどに公開する前のテストなどにも使えます。
よろしければ使ってみてください。

今後のロードマップとしては、バージョン管理システムのdeno-uddに対応できないか検討しています。
https://zenn.dev/kawarimidoll/articles/d4e5ac8770e024

また、pax.deno.devのトップページは、Deno DeployのServing static assets機能を利用し、 GitHubのREADMEをレンダリングして表示 しています。
これ、けっこう面白い使い方をできそう…。

https://pax.deno.dev/

↑↓表示を見比べてみてください。

https://github.com/kawarimidoll/pax.deno.dev

フィードバックをいただけると嬉しいです。

脚注
  1. これを作る経過で知ったのですが、masterと入れておくとデフォルトブランチへリダイレクトされます なのでデフォルトがmainでもOK ↩︎

Discussion