Astro のサイトを Bun でビルドするようにした
高速で Node.js 互換を謳うランタイム兼パッケージマネージャーの Bun が正式リリースされてしばらく経ち、評判もよさそうだったので導入した。このブログは今は Bun でビルドするようになっている。
もともと Yarn Berry を使っていたのだが、売りの PnP はアイデアは面白そうに見えたものの互換性に乏しく、かといってこれまで通りの node_modules を使ってしまうとそこまで速いわけでもなくで微妙な印象だった。
# PnP は GatsbyJS 時代にも試して断念したし、Astro でもサポートされていなかった。
Deno は新たにコードを書き下ろすにはよかったものの、既存のコードをそのまま動かしていきなり速いとはならないので、(現時点では) まったくの別物という認識。個人的にはこれはこれでちょっとしたスクリプトを書くには重宝している。少し前から Deno も Node.js との互換性を意識してきているので、いずれは三つ巴の戦いになるのかもしれない。
一方の Bun は、何もしなくても既存の Node.js 向けのプロジェクトがほぼそのまま動くレベルで互換性が高く、それでいて速い。試した範囲だと1点 sharp がうまく動かない問題はあったものの、すでに sharp 側の修正が進められており、alpha バージョン ([email protected]
) を試したら問題なくなっていた。
ただ、まだ現時点で Bun でアプリケーションを動かすのは不安、という話もある。どうなったら安心かというと難しいが。。。これに関しては、Astro のような静的サイトジェネレーターを動かす分には CI/CD が Bun で動くというだけで、サーバサイドレンダリングを使わない限りサービングに Bun のランタイムが絡んでくることはないので、仮に問題があったとしてもそこまで致命的にはならないと考える。そういう意味で気軽に試しやすい。
今のところの不満点としては、bun.lockb
がバイナリなことくらいかな。これのせいで lockfile の変更を並行して行なったときにまったくマージできない。diff を見るのにも余計なひと手間が生じてしまう。