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

AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリ...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜

登壇者名:佐藤 拓人
登壇したイベントタイトル:TSKaigi 2026
登壇したイベントのURL:https://2026.tskaigi.org/
登壇したイベントの登壇者URL:https://2026.tskaigi.org/talks/40

More Decks by 株式会社ビットキー / Bitkey Inc.

Other Decks in Technology

Transcript

  1. 2 Copyright © 2025 Bitkey Inc. All right reserved. 0.

    初めに ナウでイケてるEffect-TSをなぜ脱却したのか? どのように脱却したのか? 現場の状況や、昨今のAI事情も踏まえて 私なりに「考えたこと」「感じたこと」「実践したこと」を共有します Topic ※ 正式名称は「Effect」ですが、「Effect-TS」と表現されることが多いため本発表では「Effect-TS」の表現を用いています
  2. 3 Copyright © 2025 Bitkey Inc. All right reserved. ・「AIが書ける」と「何かあった時に人間もかける」は全く別の話

    ・チーム状況/スキル/志向性にもよるが、私の今のチームからみてEffect-TSはSimpleではなかった ・AI時代の過渡期である現状においてコストが高くつきすぎるという判断に至った 0. 初めに メッセージ
  3. 4 Copyright © 2025 Bitkey Inc. All right reserved. ・「AIが書ける」と「何かあった時に人間もかける」は全く別の話

    ・チーム状況/スキル/志向性にもよるが、私の今のチームからみてEffect-TSはSimpleではなかった ・AI時代の過渡期である現状においてコストが高くつきすぎるという判断に至った 0. 初めに メッセージ (Effect-TS使うな!...というわけでなく ) AIもあるし...とりあえず導入してみに 合わなかったら脱却すればいいや! …ってのもアリなのでは?
  4. 5 Copyright © 2025 Bitkey Inc. All right reserved. 目次

    1. 実現したかったこと、課題感 2. Effect-TSの魅力とは? 3. 導入時の懸念と出口戦略 4. Effect-TSをなぜ辞めたのか? 5. Effect-TSをどう脱却したのか? 6. まとめ
  5. 6 Copyright © 2025 Bitkey Inc. All right reserved. 自己紹介

    2015.04 2019.05 2020.01 大学(建築学専攻)卒業後、 株式会社ワークスアプリケーションズに入社 会計システムのソフトウェア開発を担当 特に財務会計の仕訳関連 ビットキーへ参画 ECサイトの開発 / 保守、社内システムの開発 TaKuTyの開発 今のhomehub事業の前身となるResidenceチームに配 属。スマートロックを扱う管理画面やバックエンド、 スマホアプリの開発に従事 Now homehub事業のプロダクト責任者 複雑な事象を読み解いて構造化し、抽象化 / 汎用化で きるように設計し、低コストで多くの価値をだせる開 発をすることを好む 佐藤 拓人 Sato Takuto @takuuuuuuu777
  6. 7 Copyright © 2025 Bitkey Inc. All right reserved. 自己紹介

    Before @TSKaigi 2024 After -25kg 佐藤 拓人 Sato Takuto @takuuuuuuu777
  7. 8 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    実現したかったこと、課題感
  8. 9 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    実現したかったこと、課題感 そもそもなんで、Effect-TSを導入しようとしたのか? Effect-TSに何を期待していたのか?
  9. 10 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    実現したかったこと、課題感 課題1:エラーハンドリング
  10. 11 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    実現したかったこと、課題感 課題2:モデリング オブジェクト指向でのモデリングが辛い...集約とか... 「どこから整理すれば良いの!?」
  11. 12 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    実現したかったこと、課題感 課題2:モデリング 関数型アプローチの可能性 出典:Scott Wlaschin 『関数型ドメインモデリング』、 KADOKAWA
  12. 13 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    実現したかったこと、課題感
  13. 15 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    Effect-TSの魅力 Effect-TS以外の選択肢もある中で なぜEffect-TSを選択したのか?
  14. 16 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    Effect-TSの魅力 Effect-TSの特徴
  15. 17 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    Effect-TSの魅力 魅力1:依存解決
  16. 18 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    Effect-TSの魅力 魅力2:Description / Run
  17. 19 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    Effect-TSの魅力 魅力3:Functional Core, Imperative Shell
  18. 21 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と出口戦略 懸念事項 Entity / Value Object 懸念:1 懸念:2
  19. 22 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 出口戦略1:境界づけられたコンテキスト内の封じ込め モジュラーモノリスの境界を使い、Effect-TSの適用範囲を物理的に制限
  20. 23 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 出口戦略2:レイヤ整理と方針統一 各レイヤの実装方針を揃えていたことが、後のAI活用による一括置換を可能にした
  21. 24 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 出口戦略3:APIサーフェスの制限 多様なAPIの統制コストに対して、利用可能なAPIを事前に制限 直接素のEffect-TSのライブラリを参照できないようにlinterで制御させて APIを制限したラッパーを介して参照させるように制約を課す
  22. 25 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 実際にどこに導入してみたの!?
  23. 27 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 homehubは「暮らし」に関わる様々な体験を実現する。その中心にあるのがスマートロック
  24. 28 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 homehubは「暮らし」に関わる様々な体験を実現する。その中心にあるのがスマートロック スマート化できる場所 共⽤部 多様な解錠⽅法 スマートアクセス 専有部 スマートサービス 暮らしサービス ‧家事代⾏ ‧ペットシッター ‧ベビーシッター ‧クリーニング ‧宅配 ‧⾷材配送 ‧飲料⽔配送 ‧集荷 ‧ライフライン料⾦ 共通 ‧外部サービス連携 ‧ID連携 ‧データ連携 homehubビジネスエンジン ‧賃料 ‧管理費 ‧請求‧⽀払い ‧未収⾦の料⾦計算 ‧会計連携 ‧決済連携 (クレジット‧請求書‧⼝座振 込) スマートフォンアプリ 顔認証 ‧WEB会議 ‧議事録 ‧録画 ‧アジェンダ ‧出⽋管理 ‧議案作成 ‧投票 / 集計 WEBカンファレンス デジタル申請 スマートファシリティ ‧居住者情報 ‧転居届け ‧駐輪場 ‧駐⾞場 ‧⼊居契約 ‧宅配ボックス ‧宅配ロッカー ‧TVスティック ‧IoTリモコン ‧キーボックス ‧配信 ‧掲⽰板 ‧ファイル共有 ‧イベント ‧アンケート コミュニティ ポータル 共⽤施設管理‧運営 ⾒守り‧駆けつけ ‧施設予約 ‧備品予約 ‧レセプション ‧スマートキー連携 ‧デジタル決裁 ‧WEB会議ブース ‧bitbutton ‧リモート通知 ‧リモート解錠 ‧駆けつけ連携 ‧異常検知 ‧外部システム連携 ‧有⼈チャット ‧チャットボット ‧お知らせ ‧アンケート ‧FAQ ‧グループチャット ‧LINE連携 コミュニケーション 管理員業務DX 内⾒効率化 ‧点検 ‧報告 ‧スマートキー解錠 ‧リモート解錠 ‧チャット ‧物件管理 ‧内⾒予約 ‧スマートキー連携 ‧ワンタイムパス ‧遠隔解錠 ‧キーボックス ‧外部連携 テンキー カードキー 遠隔解錠
  25. 29 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入時の懸念と対策 homehubは「暮らし」に関わる様々な体験を実現する。その中心にあるのがスマートロック スマート化できる場所 共⽤部 多様な解錠⽅法 スマートアクセス 専有部 スマートサービス 暮らしサービス ‧家事代⾏ ‧ペットシッター ‧ベビーシッター ‧クリーニング ‧宅配 ‧⾷材配送 ‧飲料⽔配送 ‧集荷 ‧ライフライン料⾦ 共通 ‧外部サービス連携 ‧ID連携 ‧データ連携 homehubビジネスエンジン ‧賃料 ‧管理費 ‧請求‧⽀払い ‧未収⾦の料⾦計算 ‧会計連携 ‧決済連携 (クレジット‧請求書‧⼝座振 込) スマートフォンアプリ 顔認証 ‧WEB会議 ‧議事録 ‧録画 ‧アジェンダ ‧出⽋管理 ‧議案作成 ‧投票 / 集計 WEBカンファレンス デジタル申請 スマートファシリティ ‧居住者情報 ‧転居届け ‧駐輪場 ‧駐⾞場 ‧⼊居契約 ‧宅配ボックス ‧宅配ロッカー ‧TVスティック ‧IoTリモコン ‧キーボックス ‧配信 ‧掲⽰板 ‧ファイル共有 ‧イベント ‧アンケート コミュニティ ポータル 共⽤施設管理‧運営 ⾒守り‧駆けつけ ‧施設予約 ‧備品予約 ‧レセプション ‧スマートキー連携 ‧デジタル決裁 ‧WEB会議ブース ‧bitbutton ‧リモート通知 ‧リモート解錠 ‧駆けつけ連携 ‧異常検知 ‧外部システム連携 ‧有⼈チャット ‧チャットボット ‧お知らせ ‧アンケート ‧FAQ ‧グループチャット ‧LINE連携 コミュニケーション 管理員業務DX 内⾒効率化 ‧点検 ‧報告 ‧スマートキー解錠 ‧リモート解錠 ‧チャット ‧物件管理 ‧内⾒予約 ‧スマートキー連携 ‧ワンタイムパス ‧遠隔解錠 ‧キーボックス ‧外部連携 テンキー カードキー 遠隔解錠 スマートロックを解錠 するためのテンキーを 発行する機能 でEffect-TSを導入
  26. 30 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか?
  27. 31 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 運用で見えてきた課題 約2年弱の運用 (2024年3月〜2025年12月) を経て、課題が顕在化
  28. 32 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 課題1:学習の難しさ 自分でコーディングするより、AIに書かせることが主流である現代。思考体系(関数型、遅延評価)の変化の追従がつらい そもそもチームのスキルとしても関数型に知見はなく手続型に慣れ親しんでいる状態だった
  29. 33 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 課題1:多様なAPIと統制の難しさ 「依存の解決」においてもいくつかの概念や方法がある なぜ複数の方法があるのか?どう使い分ければ良いか腹落ちした状態で理解するのはコスト高い...
  30. 34 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 課題3:AIの成果物をチーム内でレビューしきれない 手続型と比べて親しみのない表現が多数発生して、確認に時間がかかる providerServiceで何してる? catchTagって何してるの? catchTagが最適? pipeのネストは意図通り?
  31. 35 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 課題4:チーム内で自力で修正できない 「AIが書ける」と「何かあった時に人間もかける」は全く別の話 コーディングする機会が減った現状で、自力で修正できる状態になるのはコストが高く、優先度も上げられなかった
  32. 36 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 課題4:チーム内で自力で修正できない 特に型の整合性を保つのが結構大変...
  33. 37 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 課題4:チーム内で自力で修正できない ・「AIが書ける」と「何かあった時に人間もかける」は全く別の話 ・チーム状況/スキル/志向性にもよるが、私の今のチームからみてEffect-TSはSimpleではなかった ・AI時代の過渡期である現状においてコストが高くつきすぎるという判断に至った
  34. 38 Copyright © 2025 Bitkey Inc. All right reserved. 4.

    Effect-TSをなぜ辞めたのか? 移行先:シンプルな自作 Result 型 neverthrow等の既存ライブラリも検討していたが、すでに他のmoduleでも活用していたシンプルな自作Result型を流用
  35. 39 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか?
  36. 40 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略 大前提: 「変更を加える前に、まず既存の挙動を保証するテストを書く」 基本方針: ・テストを活用する ・AIを活用する 課題 ・対象が全般的にEffect依存の実装やIFとなっているためやりづらい... 出典:Michael Feathers 『レガシーコード改善ガイド』、翔泳社
  37. 41 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略 EffectのIFを 前提にした既存テスト
  38. 42 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略 中身はEffectの実装で IFをResult型に変換する
  39. 43 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略 ResultのIFの テストに修正する
  40. 44 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略 Effectの実装に 依存しないように修正 Effectの実装への 依存をなくす
  41. 45 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略 Effectの実装を 削除する
  42. 46 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略
  43. 47 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略
  44. 48 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略
  45. 49 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略
  46. 50 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 移行戦略
  47. 51 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践
  48. 52 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践
  49. 53 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践:Repository (IF)
  50. 54 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践:Repository (Impl)
  51. 55 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践:Service
  52. 56 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践:複数Error
  53. 57 Copyright © 2025 Bitkey Inc. All right reserved. 5.

    Effect-TSをどう脱却したのか? 実践:Entry Peint (依存解決)
  54. 59 Copyright © 2025 Bitkey Inc. All right reserved. 6.

    学び 大変だったこと ・Effect-TSの思想は個人的には好みではあるが、学習コストは思ったより高かった ・個人ならともかく、チームで運用していくのは結構パワーかけないと難しい 良かったこと ・コードベース全体に浸透するライブラリでも、工夫とAI活用でスムーズに脱却できた ・出口戦略を設計しておけば、今まで以上に気軽に試せる時代になってきている 気づき ・モデリングの課題に対しては、関数型を徹底しなくてもEvent Sourcingで十分改善が見込める 大変だったこと / 良かったこと
  55. 60 Copyright © 2025 Bitkey Inc. All right reserved. 6.

    学び 学び ・自身が「コーディング」する時間が減った今、「(なんとなく)わかる」と「使いこなせる」の差が広がり   やすく、意欲的でないと解消が難しくなってきている。だからこそ、チームの認知負荷を上げてしまう施  策には慎重を期すべき ・AIに振り回されずAIを受け入れられる状態とするために、「Easy (便利だが複雑)」より「Simple (単 純)」 を選ぶ比重を高めても良いように感じる 学び