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
JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば G...
Search
Shimpei TAKEDA
July 25, 2025
Programming
0
51
JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば Go 風味)
社内LT会でJavaScript に “ちょい関数型”を入れると テストが楽になるという話をしました。
Shimpei TAKEDA
July 25, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Python’s True Superpower
hynek
0
110
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
230
AI & Enginnering
codelynx
0
120
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
300
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
110
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
ぼくの開発環境2026
yuzneri
0
250
CSC307 Lecture 10
javiergs
PRO
1
660
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
110
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The browser strikes back
jonoalderson
0
420
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
58
50k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
Producing Creativity
orderedlist
PRO
348
40k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
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 おわり