Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Bunファースト開発
Search
NearMeの技術発表資料です
PRO
January 28, 2024
0
41
Bunファースト開発
NearMeの技術発表資料です
PRO
January 28, 2024
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
観察研究における因果推論
nearme_tech
PRO
0
7
React
nearme_tech
PRO
2
17
Architecture Decision Record (ADR)
nearme_tech
PRO
1
740
遺伝的アルゴリズムを実装する
nearme_tech
PRO
1
25
Fractional Derivative!
nearme_tech
PRO
1
21
GitHub Projectsにおける チケットの ステータス更新自動化について
nearme_tech
PRO
1
31
2つの曲線を比較する方法ってあるの? 〜フレシェ距離を試してみた〜 with Python
nearme_tech
PRO
1
150
Constrained K-means Clustering (クラスタサイズの制限をしたK-means法) を調べてみた
nearme_tech
PRO
1
59
VRPの近傍操作SWAP*について調べてみた
nearme_tech
PRO
1
81
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Large-scale JavaScript Application Architecture
addyosmani
509
110k
Practical Orchestrator
shlominoach
185
10k
How to Think Like a Performance Engineer
csswizardry
16
1k
Designing for Performance
lara
604
68k
The Cost Of JavaScript in 2023
addyosmani
43
5.8k
How GitHub (no longer) Works
holman
310
140k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.9k
Rails Girls Zürich Keynote
gr2m
93
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
25
640
WebSockets: Embracing the real-time Web
robhawkes
59
7.3k
Side Projects
sachag
452
42k
Transcript
0 Bunファースト開発 2024-01-26 第76回NearMe技術勉強会 @yujiosaka
1 作ったもの 1
2 Cronyx https://github.com/yujiosaka/Cronyx
3 Cronyx • 分散型タスクスケジューラー • 主要なターゲットはNodeユーザー • NodeでもBunでもどちらでも動作する • 開発とテストはどちらもBunを使⽤
4 CronyxServer https://github.com/yujiosaka/CronyxServer
5 CronyxServer • CronyxのHTTPインターフェース • Bunのみをサポートする強気スタイル • DockerイメージとKubernetesマニフェストを公開 • Elysia(BunのWebフレームワーク)のプラグインを公開
6 なんでBun? • 検証に最適な⼩さな趣味プロジェクトだった • 開発とテストだけならNode+Jestとほぼ同じ書き⽅ができるし、すぐに撤退も可能 • Cronyxで使ってみて良かったので、CronyxServerでは全⾯採⽤することにした
7 なんでElysia? • 「Bun Web Framework」でググって⼀番上に出てきた(ちゃんと⽐較してない) • Expressは未だにPromise(Async∕Await)に対応してなくてなんかイヤ • とはいえNestJSは(好きだけど)⼩さなプロジェクトには⼤袈裟すぎる
8 ⼀般的なメリット • ビルドが早い(今回Bunでビルドはしなかった) • パッケージインストールが早い(そこまで体感はできなかった) • パフォーマンスが良い(ほぼI/Oのプロジェクトであまり関係なかった) • ホットリロードが早い(体感できたけど、まだ発展途上なことも多々あった)
9 Bunでのスクリプティング • クロスプラットフォーム(Windowsでも動く) • セキュア(デフォルトで⽂字列がエスケープされる)
10 Bunでのテスト
11 Elysiaでの開発 Typeboxによるスキーマバリデーション https://github.com/sinclairzx81/typebox
12 Bunを使ってみた感想 • ちょいちょい⼩さな不具合に悩まされたけど、致命的な問題はなかった • 開発やテスト時にTypeScriptのコンパイルが要らないのは想像以上に楽 • setSystemTimeが神機能でこれなしでのテストはできない体になった • 特にテストのホットリロードの反応が早いのが嬉しい
• 総合評価は凄く(・∀・)イイ! → これとか https://github.com/oven-sh/bun/issues/5602 → これとか https://github.com/oven-sh/bun/issues/1446 • → Denoと違ってnpmパッケージがちゃんと動く → RubyのTimecopみたいに、システム時間を⾃在に変更できる → でも新しいファイル追加に反応しない等、課題もまだ残ってる → npmパッケージ開発時に使う分には⼼からオススメできる
13 Elysiaを使ってみた感想 • ほぼPromise(Async∕Await)版Expressみたいな気持ちで使える • TypeBoxを使ったバリデーションが便利だけど癖が強い • 型推論に頼りすぎてて、⾃分で型を定義したい時すっごく困る → 動的に型推論が効くのは気持ちいい
→ Transformの機能が弱い。せめてzodだったら。。。 → こういう時どうしたらいい? ← 本当はここで Elysia<typeof cronyx<S, I>> とかやりたい
14 まだ痒いところ • バージョンを固定する⽅法がない • package.jsonでBunを指定できるようにして欲しい • .node-versionみたいな感じで .bun-version 欲しい
15 Thank you