at backyard

Color my life with the chaos of trouble.

DenoのThird Party Modulesに自作のモジュールを登録する方法

f:id:shinshin86:20211201221735p:plain

以外と調べてもやり方が出てこなかったので、備忘録がてら残しておく。
(といっても残しておくまでもないほど簡単だったのですが、情報はあったほうが良いだろうと思い)

目次

DenoのThird Party Modulesに自作のモジュールを登録する方法

deno.land

上記Third Party Modulesのページに行くと、ページ上部に Publish a module というボタン、もしくはページ下部に Add a module というボタンがあり、それを押してmoduleのリリース作業を行う。

DenoのThird Party Modulesとして公開する際の前提条件

Deno Third Party Modules内で公開する場合、GitHubのパブリックリポジトリにコードがホスティングされている必要があるよう。
仕組み的にはこのパプリックリポジトリに対して、GitHub webhooksを利用して連携させるような形となる。

モジュール公開までの手順

  • ページ上部にある Publish a module というボタン、もしくはページ下部の Add a module というボタンを押す。
  • 次にmoduleの名前を入力する
  • 公開するモジュールが置かれているリポジトリのサブディレクトリなども指定できるようだが、自身は行っていない。
  • 次にモジュールをホストしているGitHubのパブリックリポジトリGitHub webhooksを設定する

GitHub webhooksの設定方法

  1. リポジトリSettings タブをクリック
  2. 次に webhooks タブをクリック
  3. Add webhook ボタンをクリック
  4. payload URLのフィールドに指定されたURLをコピペして入力
  5. content typeは application/json を指定
  6. Let me select individual events を選択
  7. Branch or tag creation というチェックボックスだけをチェックする
  8. Add webhookを押して完了

これで少し待つと自身のモジュールが公開されていることが確認できる。

f:id:shinshin86:20211201223000p:plain
公開直後の公開したモジュール (deno_eastasianwidth)

最後にタグを打ってリモートリポジトリにpushする

GitHub webhooksの設定が終わったらもう一息。

ここまで終わってからDeno Third Party Modulesの自身のmoduleのページに行くとこんな表示が出ている。

f:id:shinshin86:20211201224448p:plain
登録後30日以内にバージョンがアップロードされないモジュールは削除される旨が書かれている

Deno Third Party Modulesではタグを打つたびに、その内容をfetchして反映してくれるため、タグを打ってリモートリポジトリに反映させる必要がある。
(タグを打つと、さきほど設定したGitHub webhooksが反応してDeno側に連携してくれる。)

というわけで、タグを打つ。

私は下記のようにタグを打った。
(もちろんここはひとそれぞれ)

git tag -a v0.1.0 -m "First version v0.1.0"
git push origin tags/v0.1.0

そして再度Deno Third Party Modulesにアクセスすると、自身のコードを確認することができる。

Denoに移植したEast Asian Width

ちなみにこちらを公開しています。

github.com

East Asian WidthをDenoに移植したmoduleです。
最近CLI向けのコードをDenoで書いていたのですが、そこで利用したくてDeno向けに移植をさせてもらいました。

下記のような形で使えます。

import {
  characterLength,
  eastAsianWidth,
  length,
} from "https://deno.land/x/deno_eastasianwidth@v0.1.0/mod.ts";

console.log(eastAsianWidth("₩")); // 'F'
console.log(eastAsianWidth("。")); // 'H'
console.log(eastAsianWidth("뀀")); // 'W'
console.log(eastAsianWidth("a")); // 'Na'
console.log(eastAsianWidth("①")); // 'A'
console.log(eastAsianWidth("ف")); // 'N'

console.log(characterLength("₩")); // 2
console.log(characterLength("。")); // 1
console.log(characterLength("뀀")); // 2
console.log(characterLength("a")); // 1
console.log(characterLength("①")); // 2
console.log(characterLength("ف")); // 1

console.log(length("あいうえお")); // 10
console.log(length("abcdefg")); // 7
console.log(length("¢₩。ᅵㄅ뀀¢⟭a⊙①بف")); // 19