Slide 1

Slide 1 text

新規サービスの バックエンド開発でBun×Honoを 使い始めて 2ヶ月経った話 2024/1/26 【エンジニアLTイベント】年始めアウトプットLT会 @sugar235711

Slide 2

Slide 2 text

2 Sugar(@sugar235711) 株式会社AI Shift バックエンドエンジニア 普段はGoを書いてます。 登壇者紹介

Slide 3

Slide 3 text

3 Agenda 1. BunとHonoでバックエンド開発 2. 良かったこと 3. 困ったこと 4. まとめ

Slide 4

Slide 4 text

4 Bun: JavaScript runtime… All in One Toolkit Hono: Web Framework… Runs on Any JavaScript Runtime 1.1 What’s Bun? Hono? 1.BunとHonoでバックエンド開発

Slide 5

Slide 5 text

5 軽量なWeb FrameworkをBun Runtime上で扱える →ライブラリのインストール、ビルド、テスト全てが高速 1.1 What’s Bun? Hono? 1.BunとHonoでバックエンド開発

Slide 6

Slide 6 text

6 新規サービスでBunとHonoを採用 →フロント/バックエンドをBunのワークスペースモードで管理、モノレポ生活開始 1.2 新規開発に採用 1.BunとHonoでバックエンド開発 ● フロント・バックの言語を統一 ○ CICDの構築、Linter/Formatterの設定を共有したい ● Serverless Container上に構築 ● 軽量でかつAll in Oneなツール群でなるべく楽して開発 したい ○ Streamを扱うサービスなのでその辺りを楽できそうだとなお 嬉しい

Slide 7

Slide 7 text

7 ワークスペースにフロントエンド/バックエンドまるっとおさめても、全てのinstallに 10数秒(今の所)、起動も爆速でローカルでの開発体験が良い。 2.1 パッケージマネージャーとしての性能が良い 2. 採用して良かったこと(Bun)

Slide 8

Slide 8 text

8 クロスプラットフォームで動くシェルスクリプト、tag付のテンプレートリテラルとして シェルとして実行できる(Workflowへの組み込みが楽) 2.2 Bun Shell 2. 採用して良かったこと(Bun) https://bun.sh/blog/bun-v1.0.24

Slide 9

Slide 9 text

9 streamを扱う場合に便利なHelperや、cors周りを扱いやすくしてくれる Middlaware等が組み込みで入ってる。(Third-partyライブラリも多い) 2.3 便利なHelper/Middlewareが多い 2. 採用して良かったこと(Hono)

Slide 10

Slide 10 text

10 ブラウザに対してSSEで返せるHelperもある。OpenAI等のレスポンスを受け 流す時や、間に処理を挟むときに非常に使いやすい。 2.4 Streamが扱いやすい 2. 採用して良かったこと(Hono)

Slide 11

Slide 11 text

11 3rd-party MiddlewareでZod OpenAPI/Swagger UIが提供されている Zod Schemaの定義→Routerに登録→OpenAPI UIまで生成 2.4 スキーマ駆動で開発しやすい 2. 採用して良かったこと(Hono)

Slide 12

Slide 12 text

12 開発開始時(約2ヶ月前) ● Bun v1.0.12 ● Hono v3.10.1 3.1 バージョンに追従するのが大変(良い意味) 3.困ったこと 現在 ● Bun v1.0.25 ● Hono v3.12.7

Slide 13

Slide 13 text

13 開発開始時(約2ヶ月前) ● Bun v1.0.12 ● Hono v3.10.1 3.1 バージョンに追従するのが大変(良い意味) 3.困ったこと 現在 ● Bun v1.0.25 ● Hono v3.12.7 _人人人人人人人人人人人_ > コミュニティが活発 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

Slide 14

Slide 14 text

14 Bun v1.0.16まではセキュリティ上の理由でデフォルトで全てのライブラリのLifecycle scriptsが無効化されていた(protobufjsなどのpostinstallでエラー発生) 3.2 Lifecycle scriptsが無効化されている 3.困ったこと(Bun) 3.2 Lifecycle scriptsが無効化されている Bun v1.0.16まではセキュリティ上の理由でデフォルトで全てのライブラリのLifecycle scriptsが無効化されていた(protobufjsなどのpostinstallでエラー発生) Bun v1.0.17以上だとTop500のパッケージはホワイトリスト化されている https://bun.sh/blog/bun-v1.0.17#bun-install-now-runs-lifecycle-scripts-for-the-top-500-npm-packages

Slide 15

Slide 15 text

15 BunはTestRunnerとしても非常に優秀。Jestにあるfunctionの6~7割くらい実装されて いる(https://github.com/oven-sh/bun/issues/1825) 3.3 BunのModule Mocking周りの挙動が怪しい 3.困ったこと(Bun) 自分は今の所問題なく使えているけど、ちょこちょこ module mocking周りの不具合を訴えている人がいる

Slide 16

Slide 16 text

16 3.4 ミドルウェアまわり 3.困ったこと(Hono) ①zod-openapiのAuthorization Headerで大文字小文字を区別する必要がある ②組み込みのJWT VerifyはHMACしかサポートされていない

Slide 17

Slide 17 text

17 ● BunとHonoを活用して新規サービスのバックエンドを開発しています ● コミニュティが活発で、次々新しい機能がリリースされるので楽しい ● 基本自分が試さないと情報がないので、一次情報(英語)を読んだり手を動かして 試す癖がついた まとめ