Skip to content

Instantly share code, notes, and snippets.

@kt3k
Created August 9, 2020 05:15
Show Gist options
  • Save kt3k/e4dc4bd756cc1f24674cd6df95c9e159 to your computer and use it in GitHub Desktop.
Save kt3k/e4dc4bd756cc1f24674cd6df95c9e159 to your computer and use it in GitHub Desktop.
title tags
Deno の公式レジストリの登録方法が手動から自動になりました
deno, javascript, typescript

Deno の公式レジストリの登録方法が変わりました! 本記事ではその登録方法について解説します。

(この記事は Deno の公式レジストリに自分の書いたモジュールを登録してみたい人向けの記事です。npm にモジュールを登録した経験がある人などが主な対象読者です。)

Deno の公式レジストリとは

Deno の公式レジストリは https://deno.land/x にあります。(特に固有の名称などはありません。単にレジストリと呼ばれることが多いです。)

これまで、ここに自分の作ったモジュールを登録するには、公式ホームページのレポジトリにある JSON ファイルに PR を出して、 手動でマージしてもらうことが必要でした。

この若干面倒だった登録フローが、8/3のアップデートで、 PR を出す必要のない自動的なワークフローに置き換わりました。

本記事では、その登録方法を解説します。

新レジストリの概要

まず新レジストリに登録されるものは github レポジトリのタグのみになります。これまでは branch名 (master など) や commit hash などでも import 出来ていましたが、これらの import は出来なくなります。

import { myFunc } from "https://deno.land/x/[email protected]/my_func.ts";
import { myFunc } from "https://deno.land/x/my_module@master/my_func.ts";
import { myFunc } from "https://deno.land/x/my_module@1e587a0/my_func.ts";

そしてタグの登録方法が少し特殊で、npm のようなコマンドによる登録ではなく、github から Webhook で Deno レジストリの API を叩くことでタグが登録される仕組みになっています。

以下ではこの Webhook の登録方法を解説します。

Webhook の登録方法

レジストリに登録したいレポジトリの Settings から Webhook のページに行き、いかのように設定しましょう。

  • Payload URL: https://api.deno.land/webhook/gh/モジュール名 (モジュール名の部分は登録したいモジュール名に置き換える)
  • Content type: application/json
  • Events: Let me select individual events. を選び Branch or tag creation のみにチェック

この設定をすることで、タグを作った時に Deno レジストリのタグ登録用 API に POST リクエストが飛ぶようになります。

この状態で実際にタグを作ってみましょう

git tag v0.1.0
git push origin v0.1.0

Webhook がうまく飛ぶと、Webhook 設定ページで以下のように、リクエストとレスポンスのログを見ることが出来ます。

この例では、筆者の kt3k/deno_license_checker という github レポジトリを deno.land/x/license_checker として登録しています。

登録がうまくいくと、deno.land 上の当該ページ ( https://deno.land/x/モジュール名 ) のページに上で作ったタグのバージョンが追加されます。

モジュール登録の注意点

モジュールの各タグはイミュータブルになるという原則があります。したがって、同じタグを2回以上登録して上書きするような事は出来ません。何かを変えたい場合は必ずバージョンを上げましょう。

また、当然ですが、モジュールの乗っ取りも出来ないようになっています。ある GitHub レポジトリに紐付いたモジュール名に別の GitHub レポジトリからタグ登録しようとしてもエラーになります。

npm では npm publish というコマンドでパッケージのバージョンを登録する仕組みでしたが、これに相当するコマンドは用意されていません。Webhook を設定したレポジトリで、タグを切ってプッシュすることがイコール新しいバージョンを公開することになります。

なお npm の場合は publish する人の認証のために npm コマンドにログインすることが必要でした。Deno のレジストリではそのような認証の仕組みはありません。Deno のレジストリの場合は GitHub の特定のレポジトリとモジュールがリンクされる (かつそのリンクが変わることはない) ため GitHub 上での認証がモジュールの認証を兼ねていると言えます。

まとめ

本記事では、Deno の新しいレジストリでのモジュールの登録方法を紹介しました。Webhook を設定してレジストリに publish するという仕組みは若干目新しいですが、慣れれば難しい設定ではありません。ぜひ Deno の新しいレジストリにモジュールを登録してみましょう 🦕

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment