Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば G...

JavaScript に “ちょい関数型”を入れると テストが楽になるという話 (気付けば Go 風味)

社内LT会でJavaScript に “ちょい関数型”を入れると テストが楽になるという話をしました。

Avatar for Shimpei TAKEDA

Shimpei TAKEDA

July 25, 2025
Tweet

Other Decks in Programming

Transcript

  1. JavaScript に“ちょい関数型”を⼊れるとテストが楽になるという話 (気付けば Go ⾵味) 2 今回フォーカスする “ちょい関数型” 要素 1.

    ✅ 純粋関数 同じ入力 → 同じ出力 / 副作用ゼロ 2. ✅ 不変データ 値は作り直す・失敗は null / Error() で返す 3. ✅縦直列フロー const x = getX(); if (!x) return … で一直線 • 使わないもの 🙅 ◦ 高階関数・モナド・pipe・外部ライブラリ ―― 全部ナシ • 得られる効果 👍 ◦ ネスト 0 ◦ 読み筋が上 → 下に並ぶ ◦ 各関数が独立するので ユニットテストが数行で完結
  2. “ちょい関数型”にしてみる 👍 4 “ちょい関数型” バージョン “ちょい関数型” バージョンのテストサンプル(3関数) • 関数ごとにユニット テストが書ける

    👍 • 行数が短くなる(読 みやすい)👍 • テストケースがその まま関数のドキュメ ントになる 👍 • テストケースの追加 がしやすい 👍
  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 や深いネストから解放