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の技術発表資料です
January 28, 2024
0
35
Bunファースト開発
NearMeの技術発表資料です
January 28, 2024
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
OR-Toolsの中⾝ -VRPの解法について-
nearme_tech
0
25
GTFSのデータを Streamlitで可視化してみた
nearme_tech
0
34
Offset / Cursor Paginationについて
nearme_tech
1
25
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
VRPを深層強化学習で解く
nearme_tech
0
66
Let’s go monorepo - intro to Nx.dev
nearme_tech
0
18
Dynamic Vehicle Routing のシミュレーションを Streamlitで作ってみた
nearme_tech
0
62
ログ監視ツールについて調べてみた
nearme_tech
0
56
(インターン生が大学院で行なっている)研究紹介
nearme_tech
0
47
Featured
See All Featured
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Practical Orchestrator
shlominoach
182
9.7k
What the flash - Photography Introduction
edds
64
11k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
Web development in the modern age
philhawksworth
202
10k
How GitHub (no longer) Works
holman
304
140k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
Happy Clients
brianwarren
92
6.4k
[RailsConf 2023] Rails as a piece of cake
palkan
23
4k
Navigating Team Friction
lara
178
13k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
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