JSR Meetup 2024/05/03 (Fri)
Yusuke Tanaka (https://x.com/yusuktan)
ステップバイステップでJSRをローカルで動かす方法を紹介します。
一緒に流れを追っていただいても良いですし、眺めているだけでもOKですが、時間の関係上さくさくと進めていく感じになります(maybe)。
各々のペースの差異吸収や、コマンド・URLのコピペの利便性のため、以下のURLでスライドを公開しています。適宜ご参照ください!
https://jsr-meetup-maguro.deno.dev
Deno社でDeno Deployのバックエンドをやっています。
このスライドはDeno Deployでホストされています(宣伝)
https://github.com/jsr-io/jsr#project-information
手元でビルドして動かせる!
※ 想定環境は macOS or Linux です
Q. ローカルで動かせると何が嬉しい?
A. どういう仕組みで動いているのかをいろいろ試しながら理解できる。やる気と根気と時間があればコントリビュートもできる。
だいたいREADMEに書いてあります ️
Denoはインストール済みですか?
→ まだの場合は、deno.com の一番上のコマンドを実行
→ インストール済みの場合は、一応最新(v1.43.1)にする
$ deno upgrade $ deno --version deno 1.43.1 (release, aarch64-apple-darwin) v8 12.4.254.12 typescript 5.4.3
リポジトリをもってきます。
$ git clone https://github.com/jsr-io/jsr.git $ cd jsr
ローカルでは jsr.test というドメインを使っていきます。
jsr.test
以下の内容を /etc/hosts に追記します。
/etc/hosts
127.0.0.1 jsr.test 127.0.0.1 api.jsr.test 127.0.0.1 npm.jsr.test
なんとこれだけでフロントエンドを立ち上げることができます。
$ deno task prod:frontend
しばらく待つと Fresh ready と表示されます。
Fresh ready
http://jsr.test を開いてみましょう!
本当にローカルで立ち上がってるの?という方は frontend/routes/index.tsx をいじってみてください。変更が反映されるのが確認できます。
frontend/routes/index.tsx
先ほどのフロントエンドは終了しておいてください。
バックエンドに必要なツールなどをインストールします。
cargo install sqlx-cli
GitHub Appを作る必要があり、少し面倒です。
Request user authorization (OAuth) during installation
Webhook
Read-only
api/.env.example
api/.env
GITHUB_CLIENT_ID
GITHUB_CLIENT_SECRET
DATABASE_URL
<usrname-and-password>
user:password
DockerでPostgreSQLを立ち上げ、マイグレーションを実行します。
$ docker compose up -d postgres $ cd api $ cargo sqlx migrate run $ cd ..
以下の3つのコマンドを別々のターミナルで実行します。
$ deno task services:<macos|linux> $ deno task dev:api $ deno task dev:frontend
http://jsr.test にアクセスすると、すべてがローカルで立ち上がった状態のJSRが確認できます。
deno publish コマンド実行時に JSR_URL 環境変数を設定することで、ローカルのJSRにパッケージをpublishすることができます。
deno publish
JSR_URL
publishするために適当なパッケージを用意します。
$ deno init my-awesome-package $ cd my-awesome-package
deno.json が以下のような内容になるよう追記します。
deno.json
{ "name": "@<your-scope-name>/my-awesome-package", "version": "0.1.0", "exports": "./main.ts" }
準備ができました。publishしてみましょう!
$ JSR_URL=http://jsr.test deno publish
DBにどんなレコードが保存されているのかを確認してみましょう。
$ psql -h localhost -p 5432 -U user -d registry
users
packages
publishing_tasks
JSRのAPIサーバー実装ではOpenTelemetryベースのトレーシングが整備されています。
http://localhost:16686 で立ち上がっているJaegerでトレースを眺めることができるので、ちょっと見てみましょう。
これでローカルでJSRを立ち上げることができるようになりました。
さらに深くJSRを理解したい方は、コードを読んだりいじったりしながらミクロな挙動を追ってみるのも良いと思いますし、マクロな視点でのざっくりとしたアーキテクチャを把握するためには、JSRチームのリードであるLucaが書いた以下の記事を読むのもおすすめです。
How we built JSR (https://deno.com/blog/how-we-built-jsr)
deno run npm:@marp-team/marp-cli