at backyard

Color my life with the chaos of trouble.

Bun(JavaScript runtime)を試すだけのメモ

最近話題のZigで書かれているJavaScriptのRuntimeであるBunを試す。

bun.sh

Bunのインストール

インストールの仕方がcurlスクリプト取得してbashで実行するタイプの方式。

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

一応公式ページからinstall スクリプトの内容も見れるので、ローカルに落としてどんな処理を行っているかチェックしようと思ったが、コードフォーマッターとしていれたshell-formatだと美味く整形できなかった。

試しに入れてみたshell-format

リポジトリは下記

github.com

スクリプト自体が一行だからか?

まあ、あまりここに時間を使ってもしょうがないと思い、きっと大丈夫だろうと、とりあえず上のインストールコマンドをそのまま実行することにした。

インストール後、一度 source ~/.zshrc で読み込んだ後、bunコマンドを認識するようになった。

バージョンは下記の通り。

$bun --version
0.1.5

ちなみに公式ページからだと最新は 0.1.4 という表記になっているがこれは更新されていないだけかな?

Bunを使ってみる。

公式ページに記載されていた HTTPサーバのサンプルを実施してみる。

// http.js
export default {
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
};

実行は

bun run http.js

http://localhost:3000 にアクセスして動作確認もできた。

Bunでnpmパッケージを試してみる

Bunではパッケージマネージャーも同梱されており、npmやyarnと同じように利用できるらしい。

自身が以前作成したこのnpmパッケージを動作確認のネタとして使わせてもらう。

github.com

bun install random-fruits-name

と打ったら下記のようなエラーが出てしまった。

error: MissingPackageJSON
bun could not find a package.json file.

package.json がないとだめなようだ。

ひとまず yarnを使ってインストール後、node_modulesyarn.lock を削除して、もう一度 bun install コマンドを打ってみると、Bunの方でインストールしてくれた。

$bun install
bun install v0.1.5
 + random-fruits-name@1.9.5

 1 packages installed [1.87s]

fruits-names.js というファイル名で下記のような処理を記述する。

import getRandomFruitsName from 'random-fruits-name';

console.log(getRandomFruitsName());
console.log(getRandomFruitsName('en'));
console.log(getRandomFruitsName('es'));
console.log(getRandomFruitsName('ja'));
console.log(getRandomFruitsName('pt'));
console.log(getRandomFruitsName('nl'));
console.log(getRandomFruitsName('fr'));
console.log(getRandomFruitsName('de'));
console.log(getRandomFruitsName('cs'));

実行してみる。

$ bun run fruits-names.js
Eggfruit
Indonesian Lime
Higo
びわ
Jaca
Witte Bes
Icaque
Quitte
Borůvka

OK。

Bunの公式ページを見てみると、fetch, WebSocket, ReadableStream などの Web API がビルトインされていたり、TypeScriptとJSXがそのまま動いたり、色々と遊べそうなのでまた時間作って遊びたいところ。