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
5
JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば Go 風味)
社内LT会でJavaScript に “ちょい関数型”を入れると テストが楽になるという話をしました。
Shimpei TAKEDA
July 25, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
2
250
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
12
7.4k
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
450
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
2
1.2k
商品比較サービス「マイベスト」における パーソナライズレコメンドの第一歩
ucchiii43
0
190
AWS Summit Japan 2024と2025の比較/はじめてのKiro、今あなたは岐路に立つ
satoshi256kbyte
1
240
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
1.2k
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
1.2k
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
4
670
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
120
What's new in AppKit on macOS 26
1024jp
0
170
코딩 에이전트 체크리스트: Claude Code ver.
nacyot
0
980
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Building Applications with DynamoDB
mza
95
6.5k
Into the Great Unknown - MozCon
thekraken
40
1.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
It's Worth the Effort
3n
185
28k
Docker and Python
trallard
45
3.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
Bash Introduction
62gerente
613
210k
Gamification - CAS2011
davidbonilla
81
5.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.3k
KATA
mclloyd
30
14k
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 おわり