🔖

BunからExpoを使う

2023/09/27に公開

はじめに

ExpoでBunがサポートされたことが発表されました

さっそく試してみます。

Bunとは

本題に入る前にBunのおさらいです。Bunはランタイムやパッケージマネージャーなどの機能を兼ね備えたオールインワンのJavaScript & TypeScriptツールです。
特に速度を売りにしています。
Node.jsの代わりにBunをJSのランタイムとして使うことが可能ですし、npmやyarnといったパッケージマネージャーの代わりとしてもBunは使えます。

BunからExpoを試す

それでは早速Bunを使ってExpoプロジェクトを作成してみます。

bun create expo my-app

ls my-app

App.js           assets/          bun.lockb*       package.json
app.json         babel.config.js  node_modules/

お馴染みのファイルたちに混ざって、 bun.lockb ファイルが作成されているのがポイントです。

bun create コマンドにより、Bunのテンプレート機能が使われてExpoプロジェクトが作成されました。

現在のところTypeScriptを使うExpoプロジェクトを作成することは出来ないようです。

次にbunからExpoサーバーを起動してみます。

bun run ios

ただし、ここに書かれている通り bun run コマンドは package.json に書かれたスクリプトを実行しているため、 上記コマンドは expo start --ios を実行しているのと同じで、Bunランタイムが使われているわけではありません。

最後に bun install を試してみます。
Bunを使ってパッケージのインストールが可能です。

% bun install
bun install v1.0.3 (25e69c71)
 + @babel/core@7.23.0
 + expo@49.0.12
 + expo-status-bar@1.6.0 (v1.7.1 available)
 + react@18.2.0
 + react-native@0.72.5

 859 packages installed [1247.00ms]

1秒程度でパッケージのインストールが終わりました。
ちなみに、yarnを使ってパッケージのインストールをすると10秒程度かかりました。

Bunが公式に発表しているベンチマークを見ると、

The goal of this benchmark is to compare installation performance of Bun with other package managers when caches are hot.

と書かれているので、キャッシュを使ってこの速度を実現しているようです。

終わりに

ExpoプロジェクトのパッケージマネージャーとしてBunが使えるようになりました。
Expo CLIのランタイムがBunに変わったわけではない、という点には注意が必要です。

Bunを使うと、とにかく素早くExpoプロジェクトを立ち上げられる、というのがメリットでしょうか。

Discussion