🚴

知らなくても困らない!Rust製js関連ツール2023

2024/03/18に公開

ネットを徘徊する中で見つけたRust製のフロントエンド関連ツールを簡単に紹介します。

2023年中に公開する予定だった雑学です。書くのに飽きたので放流します。若干内容が古いかもしれないです。

CSS

servo/rust-cssparser

https://github.com/servo/rust-cssparser
Rust製のCSSパーサー。主にRustで書かれたブラウザエンジンであるservoで利用されています。

lightningcss

https://github.com/parcel-bundler/lightningcss
パーサーだけでなくminifierやtransformerも兼ねている。parcel配下のプロジェクト。
vercel VPoEであるLee Robinson氏が発表していた通りNext.jsはswc_cssに変わってlightningcssへの移行を行なっています。
https://twitter.com/leeerob/status/1740124461683409042
また、上記では触れられていませんがswc pluginのcss周りも全てlightningcssになるかもしれません。

Next.js内部で使われていたのはswc_cssというパーサーでした。ですが元々メインでメンテナンスしていたAlexander Akaitさんはすでにvercelを退社しており、今後の保守が難しいと判断したようです。今後はNext.jsに加えて、swcのplugin、turbopackもlightningcssに移植していくでしょう。
https://diary.kdy1.dev/2023-8-9-droping-swc-css

railwind

https://github.com/pintariching/railwind
なんとtailwind cssコンパイラのRustバージョン!現在あまり更新されていません。

Transpiler

swc

https://github.com/swc-project/swc
言わずとしれたRust製Parser,Transpiler, Minifier。実はちょっと前にswcpackというバンドル機能もありましたが現在は開発されていません(Turbopackがあるため)

Bundler

rspack

https://github.com/web-infra-dev/rspack
ByteDance社のWeb Infra teamが中心として開発しているwebpackのdrop-in-replacementを目指したツール。

turbopack

https://github.com/vercel/turbo
Webpack開発者のTobias Koppers氏がVercelで開発しているwebpackの後継ツール。

rolldown

https://github.com/rolldown-rs/rolldown
rollupのRustバージョン。記憶が正しければrspack公開当時はrolldown_legacyという名前でrspackのPoCという立ち位置だったと思います。
2024年3月にオープンソースになりました。

farm

https://github.com/farm-fe/farm
Rust版vite。vite-compatibleなのでプラグインとかもそのまま使えるらしい。viteとの相違点や開発動機はドキュメント参照。
https://farm-fe.github.io/docs/why-farm/

mako

Alipayの内部で開発されているらしいバンドルツール。リポジトリは公開されていません。
https://twitter.com/boshen_c/status/1719596594985681275

Formatter

dprint

https://github.com/dprint/dprint
deno fmtの中身。TypeScriptDefinitelyTypedのリポジトリで使われています。
https://github.com/microsoft/TypeScript/pull/54820
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/66235

biome

https://github.com/biomejs/biome
今の所JavaScipt、TypeSciptのFormatter、Linterを備えています。最近Vue, Svelte, AstroのSciptタグ内のformat,lintもできるようになりました。現在CSSの対応が進んでます。
https://biomejs.dev/blog/roadmap-2024/#expand-biomes-language-support

node.jsのリポジトリで使おうという試みがされています。
https://github.com/nodejs/node/pull/50672

Linter

rslint

https://github.com/rslint/rslint
現在積極的な開発はされていません。biomeが一部実装の参考にしています。
https://biomejs.dev/internals/credits/#forks

deno_lint

https://github.com/denoland/deno_lint
deno lintの中身

Oxc

https://github.com/oxc-project/oxc
Boshen氏の元趣味プロジェクト。現在はParser, Linter, Resolverが開発されています。

Package manager

pacquet

https://github.com/pnpm/pacquet
pnpm傘下で開発されている試験的なRust製package manager。

volt

https://github.com/dimensionhq/volt
同じくRust製package manager。現在開発は止まっています。

Type Checker

ezno

https://github.com/kaleidawave/ezno
Rustで書かれたTypeScript型checker。ただし、tsc完全互換は目指していません(anyの扱いが違ったりする)
https://kaleidawave.github.io/posts/a-preview-of-the-checker/
現在試験的にOxcを通じて使うこともできます。

stc

https://github.com/dudykr/stc
tscの完全互換を目指したプロジェクト。作者多忙につき開発停止。

おまけ

TypeRunner

https://github.com/marcj/TypeRunner
こちらRustではなくC++製のTypeScript型チェッカー。アプローチも異なっておりTypeRunnerはTypeScriptをBytecodeに変換してVMで型検査を実行します。残念ながら2年ほど更新されていません。

tyvm

https://github.com/zackradisic/tyvm
型レベルのTypeScriptのみに絞った実験的なプロジェクト。Rustで書いたコンパイラでコードからBytecodeに変換してZigで書いたVMで実行しているようです。

Discussion