Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば G...
Search
Shimpei TAKEDA
July 25, 2025
Programming
67
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば Go 風味)
社内LT会でJavaScript に “ちょい関数型”を入れると テストが楽になるという話をしました。
Shimpei TAKEDA
July 25, 2025
Other Decks in Programming
See All in Programming
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
260
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
800
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
800
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Railsバージョンを4倍にした話
optim
0
450
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
270
sbt 2.0: takeoff
eed3si9n
0
160
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
160
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Building the Perfect Custom Keyboard
takai
2
910
Six Lessons from altMBA
skipperchong
29
4.5k
エンジニアに許された特別な時間の終わり
watany
109
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Faster Mobile Websites
deanohume
310
32k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
The browser strikes back
jonoalderson
0
1.8k
Documentation Writing (for coders)
carmenintech
77
5.6k
Odyssey Design
rkendrick25
PRO
2
880
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Transcript
LT版 “ちょい関数型”の話 1 JavaScript に “ちょい関数型”を入れると テストが楽になるという 話 (気付けば Go
風味)
JavaScript に“ちょい関数型”を⼊れるとテストが楽になるという話 (気付けば Go ⾵味) 2 今回フォーカスする “ちょい関数型” 要素 1.
✅ 純粋関数 同じ入力 → 同じ出力 / 副作用ゼロ 2. ✅ 不変データ 値は作り直す・失敗は null / Error() で返す 3. ✅縦直列フロー const x = getX(); if (!x) return … で一直線 • 使わないもの 🙅 ◦ 高階関数・モナド・pipe・外部ライブラリ ―― 全部ナシ • 得られる効果 👍 ◦ ネスト 0 ◦ 読み筋が上 → 下に並ぶ ◦ 各関数が独立するので ユニットテストが数行で完結
あえて”嫌な”命令型コード 😭 3 あえて“嫌な” 命令型コードを作ってみる あえて“嫌な” 命令型コードのテストサンプル • 1つの関数に対してテストケースが無限に増えていっ てしまう(左は正常系のみ)
😭 • モックが多くなりがち 😭 • テストケースの漏れも起きがち 😭
“ちょい関数型”にしてみる 👍 4 “ちょい関数型” バージョン “ちょい関数型” バージョンのテストサンプル(3関数) • 関数ごとにユニット テストが書ける
👍 • 行数が短くなる(読 みやすい)👍 • テストケースがその まま関数のドキュメ ントになる 👍 • テストケースの追加 がしやすい 👍
まとめ:”ちょい関数型”にする理由とリターン 5 • 保守がラクになる ◦ 1 本の直列フローで読める • ネスト・再代入が減ってバグを埋め込みにくくなる ◦
テストが軽くなる • 関数ごとに入力→出力だけ比べれば OK ◦ モックや後片づけが最小限で済む • 学習コストが低い ◦ 特別なライブラリや新しい概念を覚えなくてよい ◦ 既存の if / return だけで「値+エラー」の形を再現できる • 意図せず Go ライクになる理由(補足) ◦ ライブラリ追加しない・モナドも使わないという制約 ◦ “全部 関数型” に振らず 早期 return だけで分岐 ◦ 失敗は 値+エラーの二値返却 (value | Error) ◦ すると自然に val, err := fn() と同型 のパターンが生成され る ◦ const data = getData(); if (!data) return Error('…') ◦ Go の if err != nil { return err } と構造が一致 ◦ モナド(Maybe / Either)を導入しなくても 同様のメリットを 享受 ◦ 扱う側 はモナドという “箱” を意識せず単純な null / Error 判定で済む ◦ 読む側 は try / catch や深いネストから解放
LT版 “ちょい関数型”の話 Shimpei TAKEDA (⽵⽥慎平) 6 おわり