JavaScript 用のオールインワンツールキット「Bun」を使ってみる


こんにちは、Gaji-Labo フロントエンドエンジニアの石垣です。

今回は、最近話題の JavaScript 用のオールインワンツールキット「Bun」を触ってみたので、概要と基本的な React アプリケーションの作成方法を紹介します。

Bun の公式サイトのキャプチャ

Bun とは?

Bun は、JavaScript および TypeScript アプリ用のオールインワンツールキットです。

根幹には、Node.js や Deno のように、JavaScript および TypeScript のコードを実行するためのランタイムがあります。

Node.js や Deno と異なるのは、Bun はランタイムだけでなく npm 互換のパッケージマネージャーや Jest 互換のテストランナー、 Webpack 等の代替となるバンドラーなどのツールも含まれている点です。

また、公式ドキュメントによると Bun は高速性を売りにしており、 Bun を利用したサーバーサイドレンダリングは Deno の2倍の表示速度、パッケージインストールは pnpm の17倍の速度を誇るとのことです。

2023年10月11日に v1.0.6 がリリースされており、活発に開発が進められているようです。

Bun のインストール

Bun は curl コマンドを使ってインストールします。

curl -fsSL https://bun.sh/install | bash

React アプリケーションの作成

Bun で Create React App と同様の React アプリケーションを作成してみます。

bun create react-app bun-example-app --template typescript

bun create でテンプレートからアプリケーションを作成することができます。
react-app を指定すると、Create React App と同様のアプリケーションを作成します。

script は yarn や pnpm と同じく bun [script] で実行できます。

bun start

ちなみに bun start は bun run start のアライアスで、bun run を叩くとプロジェクトの script のリストが表示されます。

起動後、 http://localhost:3000 にアクセスすると、見慣れた Create React App の初期画面が表示されます。

Create React App の初期画面のキャプチャ

パッケージのインストール

Bun は npm 互換のパッケージマネージャーを含んでいるため、ほぼ npm と同じようにパッケージをインストールすることができます。

bun install

パッケージをインストールしたい際は bun add eslint のように add コマンドを使います。devDependencies にインストールしたい場合は -d オプションを付けます。

個人的な感触

npm 互換のパッケージマネージャーが含まれていることでほぼ乗り換えコストを感じることなく使える印象を持ちました。
また、テストランナーやバンドラーがビルトインされていることで環境構築が容易に行えるのもメリットだと感じます。
速度に関しては体感で Node.js と有意な差を感じることはできませんでしたが、Bun に最適化された環境での比較を行っていないため更に検証を行ってみたいと思います。

おわりに

今回は Bun の概要と基本的な React アプリケーションの作成方法を紹介しました。
テストランナーの側面やバンドラーなどまだ掘り下げられていない機能があるので、今後さらに Bun を使ってみてご紹介できればと思います。

Gaji-Laboでは、 Next.js 経験が豊富なフロントエンドエンジニアを募集しています

弊社では Next.js の知見で事業作りに貢献したいフロントエンドエンジニアを募集しています。大きな制作会社や事業会社とはひと味もふた味も違う Gaji-Labo を味わいに来ませんか?

Next.js の設計・実装を得意とするフロントエンドエンジニア募集要項

もちろん、一緒にお仕事をしてくださるパートナーさんも随時募集中です。まずはお気軽に声をかけてください。お仕事お問い合わせや採用への応募、共に大歓迎です!

求人応募してみる!

タグ


投稿者 Ishigaki Shotaro

アシスタントエンジニアとしてHTML/CSS/JavaScriptの実装やRailsの組み込み、スタイルガイドの構築などを担当しています。 業務の中でさまざまな学びを吸収しながら、文書構造やアクセシビリティに目を向けたマークアップの学習やJavaScriptの学習などを行っています。チームに貢献できるエンジニアとなるために日々奮闘中です。