Slide 1

Slide 1 text

Rustでオリジナルnpmパッケージを作ってみよう Let's create an original npm package with Rust

Slide 2

Slide 2 text

● 2023.04〜
 クラウド経費フロントエンドエンジニア@福岡Frontend Engineer working for Cloud Expense at Fukuoka Office
 ● 𝕏 @cashfooooou
 ● GitHub: @tnyo43
 樫福智哉 Tomoya KASHIFUKU

Slide 3

Slide 3 text

Biome, SWC, Turborepo のように、 Rust で実装された npm パッケージが活躍
 ● パフォーマンス
 ● 拡張性( JS に移植しなおさなくてよい)
 
 npm packages implemented with Rust, such as Biome, SWC, and Turborepo, are thriving
 ● Performance
 ● Scalability (no need to port back to JS)
 
 はじめに Introduction

Slide 4

Slide 4 text

Rust で多言語対応するプロダクトで使える npm パッケージ“i18n-locale-lint” (翻訳 ファイルのセットのキーが正しいことをチェックする) を自作
 JS 製の npm パッケージとの違いとその解決方法をシェア
 
 Created an npm package 'i18n-locale-lint' for multilingual products with Rust
 Sharing the differences from JS-based npm packages and how to resolve them
 Rust で npm パッケージを自作してみた I created an npm package with Rust

Slide 5

Slide 5 text

● 環境ごとにビルドする
 ● クライアントが環境にあったバイナリをダウンロードする仕組みを作る
 
 ● Builds for each environment
 ● Creates a mechanism for clients to download the appropriate binary for their environment
 JS 製の npm パッケージ作成との違い Differences from JS-based npm packages

Slide 6

Slide 6 text

環境(OS, CPUアーキテクチャ)ごとにビルドしてバイナリを生成
 GitHub Actions で環境ごとのビルドジョブを走らせて実現
 
 Builds and generates binaries for each environment (OS, CPU architecture)
 Achieve this by running build jobs for each environment using GitHub Actions
 
 環境ごとにビルドする Build for each environment

Slide 7

Slide 7 text

環境ごとにビルドする Build for each environment

Slide 8

Slide 8 text

postinstall を使ってダウンロードする
 ● GitHub の Release の Assets にアップロード
 ● postinstall で環境にあうものをダウンロード
 
 Download using “postinstall”
 ● Upload to the GitHub Release Assets
 ● Download the appropriate one for the environment by “postinstall”
 
 クライアントの環境にあうバイナリをダウンロード Download the binary that matches the client's environment

Slide 9

Slide 9 text

● npm install を実行しすぎると GitHub API の rate limit に引っかかる
 ○ CI で同一 IP から短時間で大量にリクエストする
 ● セキュリティの観点で postinstall 自体を避けたい
 
 ● Running “npm install” too frequently can hit the GitHub API rate limit
 ○ Making a large number of requests from the same IP in a short period in CI
 ● From a security perspective, it's preferable to avoid postinstall itself
 postinstall を使ってダウンロードする方法の問題 Issues when downloading using postinstall

Slide 10

Slide 10 text

Biome や SWC で活用されている方法
 環境ごとのバイナリを含む npm パッケージを作成
 
 optionalDependencies を使う方法 Download using optionalDependencies 
 
 
 Method used by Biome and SWC 
 Create npm packages that include binaries for each environment


Slide 11

Slide 11 text

全て環境のパッケージをメインのパッケージの optionalDependencies に列挙
 クライアントの環境に合うものだけがインストールさ れる
 
 List packages for all environments in the main package's “optionalDependencies”
 Only the one that matches the client's environment will be installed
 optionalDependencies を使う方法 Download using optionalDependencies

Slide 12

Slide 12 text

まとめ Summary Rust 製の npm パッケージに必要なステップは
 ● 環境ごとにビルドし npm パッケージを作成する
 ● 環境にあうバイナリを optionalDependencies でインストールさせる
 
 Steps required for creating an npm package in Rust:
 ● Build for each environment and create npm packages
 ● Use “optionalDependencies” to install the binary that matches the environment 


Slide 13

Slide 13 text

No content