🍃このブログは移転しました。
3秒後、自動的に移動します・・・。

ローカルProxyサーバーをBunで書く

Bun、単なるNode.js互換という意味ではそんな興味ないなって思ってたけど、Cloudflare Workersみたいなエッジランタイム(で動くコード)をローカルでシュッと動かせるやつっていう見方をすると、すごくいいのでは・・・!ってなった。

Proxyサーバーもこんな簡単にかけるとは・・・。

最小プロキシー

違うオリジンをGETするだけなら、本当にこれだけ。

Bun.serve({
  port: 3000,
  fetch: (req) =>
    fetch(
      req.replace("http://localhost:3000", "http://api.example.com")
    ),
})

みじか。

Node.jsでやってたときは、`http-proxy`をわざわざインストールして・・みたいなことしてたけど、もういらぬ。

好きなように`Response`を返せばいいので、CORSのヘッダ差し込みとか、`set-cookie`だけ貼り直すとかも、ストレートに書ける。

ホットリロードもある

`Bun.serve({ fetch })`ではなく、`export default { fetch }`とすると、ホットリロードできるようになる・・・!

export default {
  async fetch(req) {
    // ...
  },
}

こう書き換えた上で、`bun --hot`で実行するだけ。すんばらしい・・・。

`nodemon`みたいなプロセスごとリスタートじゃないので、グローバル変数とかそのまま生き残ってる。

もっと使っていきたい

これまで、ローカルで動かすツール系は、NodeでもBunでも動くようなコードをベースラインに据えてたけど、ここまでUXがいいとBunオンリーにするのも悪くないな・・・って心変わりした。

その上、TypeScriptも直接実行できるし、ファイルI/Oも速いし、`.env`も自動で読んでくれるし、SQLiteまで同梱されてるし、もうこのためにあったんでは!ってくらい感動してる。