Denoのモジュールレジストリ nest.landの紹介
はじめに
Denoには、自作モジュールを公開するためのレジストリがいくつか存在します。
例)
- deno.land/x - Deno公式のモジュールレジストリ
- nest.land
この記事では、その中でも比較的使用率の高いと思われるnest.landについて紹介します。
この記事で紹介すること
この記事では以下のことについて説明します:
- nest.landの概要
- nest.landとeggsのセットアップ方法
- eggsを使用してモジュールを公開する方法
環境について
この記事では、以下のバージョンを想定して記述しています。
項目 | バージョン |
---|---|
Deno | v1.8.1 |
eggs | v0.3.4 |
nest.landってなに?
nest.landとは、ブロックチェーンベースのモジュールレジストリです。
一度、公開されたファイルが決して削除や変更されないということが保証されています。
deno.land/xとの比較
それぞれにメリット・デメリットがあるため、併用するか、用途に応じて使い分けるとよいのではないかと思います。
deno.land/x
- メリット
- denoland Organizationによって公式にメンテナンスされていること
- (一度、Webhookさえ設定してしまえば) モジュールの新バージョンの公開が容易であること
- デメリット
- GitHubのWebhookの仕組みに大きく依存していること
- 単一のGitHubリポジトリごとに、公開できるモジュール数は最大で3つまでという制限がある
- 単一のGitHubアカウントまたはオーガニゼーションごとに、公開できるモジュール数は最大で15個までという制限がある
参考: https://github.com/denoland/deno_registry2#limits
nest.land
- メリット
- 公開できるモジュール数に制限はない
- デメリット
- モジュールを公開するには、CLIツール(
eggs
)の使い方を覚える必要があるため、deno.land/xと比較すると、若干ハードルが高い
- モジュールを公開するには、CLIツール(
セットアップ
アカウントを作成する
まず、はじめにAPIキーを生成する必要があります。
nest.landのホームページからアカウントを作成してください。
アカウントを作成すると、APIキーが発行されるので控えておいてください。
eggsのセットアップ
nest.landにモジュールを公開する際は、eggs
というCLIツールを使用する必要があります。
インストール
以下のコマンドを実行すると、eggs
をインストールすることができます:
$ deno install -Afq --unstable https://x.nest.land/eggs@0.3.4/eggs.ts
以下のコマンドを実行して、バージョンが表示されれば、無事にインストール成功です!
$ eggs --version
0.3.4
APIキーの登録
eggs
を使用してモジュールを公開するには、アカウントを作成するにて生成したAPIキーをeggs
に登録する必要があります。
そのためには、以下のコマンドを実行する必要があります:
$ eggs link <APIキー>
コマンドの実行後、~/.nest-api-key
にAPIキーが書き込まれまれていれば、登録に成功しています。
eggsの設定ファイルについて
eggs
には2種類の設定ファイルが存在します:
-
egg.json
/egg.yml
.eggignore
egg.json
/egg.yml
eggs
を使用してモジュールを公開するときの挙動を設定します。
nest.landにアップロードしたいモジュールごとにこのファイルを用意します。
以下のコマンドを実行すると、カレントディレクトリにegg.json
またはegg.yml
ファイルが生成されます:
$ eggs init
コマンドを実行すると、いくつか質問を聞かれるので、答えてください。
質問に答え終わると、以下のようなファイルが生成されます:
{
"$schema": "https://x.nest.land/eggs@0.3.4/src/schema.json",
"name": "carol",
"entry": "./mod.ts",
"description": "Build cross-platform desktop apps with Deno, HTML, and Chrome",
"homepage": "https://github.com/uki00a",
"version": "v1.0.2",
"files": [
"./**/*.ts",
"./**/*.js",
"README.md"
],
"ignore": [
".github",
".vscode",
"Makefile",
"examples",
"testdata",
"tools"
],
"checkFormat": false,
"checkTests": false,
"checkInstallation": false,
"check": true,
"unlisted": false
}
設定項目
項目 | 説明 | デフォルト値 |
---|---|---|
name | モジュール名 | |
entry | このモジュールのエントリポイントとなるファイルを指定します。 | ./mod.ts |
description | このモジュールの説明を記載します。 | |
homepage | このモジュールのホームページ | null |
version | このモジュールのバージョン(Semver形式) | |
unlisted |
true を設定すると、ギャラリーページに表示されなくなります。 |
false |
files | nest.landにアップロードされるファイルの一覧(glob形式) | |
ignore | nest.landにアップロードしないファイルの一覧(glob形式) | |
checkFormat |
true を設定すると、モジュールの公開前にdeno fmt --check が実行されます。 |
|
checkTest |
true を設定すると、モジュールの公開前にdeno test -A --unstable が実行されます。 |
|
checkInstallation |
true を設定すると、モジュールの公開前にこのモジュールがインストールできるかどうかチェックされます。 |
|
check |
true を設定すると、上記checkFormat , checkTest , checkInstallation にtrue を設定したときと同様の挙動をします。 |
.eggignore
モジュールの公開時に、nest.landへのアップロード対象から除外したいファイルの一覧を記述します。
このファイルは、.gitignore
と同様のフォーマットで記述します。
extends
キーワードについて
補足1: .eggignore
内でextends
キーワードを使用すると、他の設定ファイルの内容を取り込むことができます。
例えば、以下のように記述すると、.gitignore
の内容を取り込むことができます。
extends .gitignore
補足2: 優先順位について
egg.json
/egg.yml
のignore
フィールドと、.eggignore
ファイルが同時に指定された場合は、.eggignore
の内容が優先されるようです。
eggsを使用してモジュールを公開する
以下を前提に話を進めていきます:
- eggsのセットアップが完了している。
- nest.landに公開したいモジュールが手元に存在する。
egg.json
またはegg.yml
が適切に設定されている。
nest.landへモジュールを公開したいときは、以下のコマンドを実行します:
$ eggs publish
公開されるモジュールのバージョンは、egg.json
/egg.yml
のversion
フィールドで指定された値を元に決定されます。
ちなみに、--dry-run
オプションを指定することで、ドライランを実行することもできます。(実際にモジュールが公開されることはありません)
$ eggs publish --dry-run
どのファイルがアップロードされるかを事前に確認することができるため、初めてのアップロード時は実行しておくとよいかもしれません。
新しいバージョンのモジュールを公開する
新しいバージョンのモジュールを公開したいときは、以下のいずれかの方法で行うことができます:
- 事前に
egg.json
/egg.yml
のversion
フィールドを更新してからeggs publish
を実行する。 -
eggs publish
を実行する際に--version
オプションを指定する。- 例:
eggs publish --version v1.0.4
- 例:
GitHub Actionsを使用して、モジュールの公開を自動化する方法
公式ドキュメントにて、GitHub Actionsを使用して、モジュールのアップロードを自動化する方法が紹介されています。
例えば、次のような内容でGitリポジトリに.github/workflows/publish.yml
を用意します。
name: Publish this module to nest.land
on:
release:
types: [published]
jobs:
publish-egg:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: denolib/setup-deno@master
with:
deno-version: 1.8.1
- run: deno install -Af --unstable https://x.nest.land/eggs@0.3.4/eggs.ts
- run: |
export PATH="/home/runner/.deno/bin:$PATH"
eggs link ${{ secrets.NESTAPIKEY }}
eggs publish --yes
すると、GitHub上でリリースを公開する度に、自動的にnest.landへモジュールが公開されるようになります。
上記のGitHubアクションを動作させるためには、事前にNESTAPIKEY
という名前のシークレットにnest.landのAPIキーを設定しておく必要があります。詳しくは、こちらのページを参照ください。
nest.landに公開されているモジュールの探し方
公式のギャラリーページから探すことができます。
おわりに
この記事では、nest.landとeggs
の使用方法について解説しました。
eggs
には、他にもeggs install
やeggs update
等、便利なサブコマンドが提供されているため、興味のある方はぜひお試しください!
Discussion