「JSR Meetup」に参加してきました

JSRの紹介

npm

  • ES6もTSもない時代に作られたもの
  • CommonJSがデフォルト
  • TSに関するサポートがない
  • npmの開発が低調

JSRの狙い

  • ESMとTSを前提としたレジストリを0から設計するといいのでは

JSRの特徴

  • TSを直接パブリッシュ出来る
    • トランスパイル不要
    • d.tsは勝手にJSRが作ってくれる
  • モジュール解決はESMだけ
    • CommonJSはなし
  • npmと互換性あり
    • JSRパッケージからnpmパッケージが使えるしその逆もOK
    • npmのスーパーセット
  • 複数ランタイム前提
    • サポートするランタイムを指定できる
    • ブラウザ/Deno/Node/Bun
  • OSS

Deno

  • Denoでは今後JSRを推奨
  • stdライブラリもJSRに移っている
  • urlを直接書くのが受け入れられていなかったので軌道修正

Denoのモジュール解決

目指すところ

  • deno.land/xでどうだったか
  • 必要なものだけ
    • 指定したものだけ入ってくるようになってる
    • npmだと依存全部入ってくる
  • 並列ダウンロード
    • 逐次ダウンロードだった
  • インポートマップを使ったライブラリ作成
    • 普通には使えない
  • semverの解決
    • URL直接指定なので微妙に違うバージョンの重複が起きた
  • 内部構造を公開しない
    • ファイル構造を変更できるように
    • 拡張子も露出させたくないが対応できてなかった
  • TSをソースとして使う
    • サポートしてたが遅かった
  • 高速な方チェック
    • パッケージ全体を見ないといけないから遅かった
  • JSRだとこれらが解決されている

JSRをローカルで動かしてみよう

JSRのローカル起動

  • OSSなので手元でビルドして動かせる
  • READMEにだいたい書いてある
  • フロントエンドを立ち上げるのはcloneして起動するだけで簡単
    • 本番のAPIを叩くUIをローカルで動かせる
  • バックエンドはrust周りのセットアップもいるので最初はちょっと重い
  • DBもローカルで作るのでどんな情報が保存されるか見える

JSRにモジュールを公開するまで/公開してから

  • @okutann88さん

パッケージ公開するまで

  • Thothという全文検索を作った
  • slow typesのエラー対応
    • 型を明示的につける

パッケージ公開してから

  • ドキュメントのサイトを作った
  • スコアを上げるためにいろいろ対応した
    • JSDocを書く

slow types ってなんだろう?

slow types

  • 内容
    • 明示的な型宣言がないもの
    • 広範囲な推論を必要とするもの
  • 全部につけないといけないわけじゃない
  • 検出
    • deno lintでやるといい