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
転職してユニットテストに救われている話
Search
nihemak
April 27, 2022
Programming
1
1k
転職してユニットテストに救われている話
2022/04/27 単体テストはエンジニアを救うLT大会 #SHIFT_EVOLVE
https://shiftevolve.connpass.com/event/241524/
nihemak
April 27, 2022
Tweet
Share
More Decks by nihemak
See All by nihemak
BigQueryとDataformとTROCCO®による事業グロース
nihemak
0
1.2k
React Nativeアプリを DDDで開発している話
nihemak
0
1.7k
忙しいソフトウェアエンジニアにお勧めする友人の作り方 / create friend
nihemak
0
630
Other Decks in Programming
See All in Programming
Defying Front-End Inertia: Inertia.js on Rails
skryukov
0
480
音声プラットフォームのアーキテクチャ変遷から学ぶ、クラウドネイティブなバッチ処理 (20250422_CNDS2025_Batch_Architecture)
thousanda
0
160
Chrome Extension Techniques from Hell
moznion
1
160
VitestのIn-Source Testingが便利
taro28
4
1.1k
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
2
260
「影響が少ない」を自分の目でみてみる
o0h
PRO
2
1.1k
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
110
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
2
3.6k
サービスクラスのありがたみを発見したときの思い出 #phpcon_odawara
77web
4
640
The Implementations of Advanced LR Parser Algorithm
junk0612
1
280
AI Coding Agent Enablement - エージェントを自走させよう
yukukotani
14
6k
Develop Faster With FrankenPHP
dunglas
2
3.3k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
670
It's Worth the Effort
3n
184
28k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
550
Optimising Largest Contentful Paint
csswizardry
36
3.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Done Done
chrislema
183
16k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
How STYLIGHT went responsive
nonsquared
99
5.5k
Designing for Performance
lara
608
69k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
Transcript
転職して ユニットテストに救われている話 〜キャッチアップからテスト文化の浸透、そしてアーキテクチャ改善へ〜 2022/04/27 単体テストはエンジニアを救うLT大会 #SHIFT_EVOLVE
本日のLTはユニットテストへの感謝の意になります笑 • 今年(2022年)の1月に未経験技術スタックの会社に転職しました • ユニットテストを通して、 ◦ キャッチアップから改善まで良かったことがたくさんあった(ある)ので 振り返りを共有させていただければと思っています!
自己紹介 nihemak (にへまこ) Makoto Nihei • ドクターメイト株式会社 (2022/01〜) • プロダクト開発エンジニア
• 日々キャッチアップ中
ドクターメイト株式会社
転職してぶち当たった壁3つ • 😨 完全未経験な技術スタック... ◦ ReactNative(Reactも)/Firebase/GCPは使ったことありませんでした ▪ それまではAngular/NestJS/AWSなどの人でした • 😨
コード実装能力の衰え... ◦ 直近1年間はプロダクトマネージャ・開発責任者でした ▪ ロール上、意識してコードからは少し距離を置いてました • 😨 コードベースがモノリシック... ◦ 大きめReact Component内で多数のFirebase操作など... ▪ 未経験技術なのもあり更に把握困難に。。
さらなる壁、 • 😨 そして、テストコードもありませんでした... ◦ 一応バックログには積まれてありましたが導入に挫折した形跡が...
さらなる壁、そしてユニットテストへ • 😨 そして、テストコードもありませんでした... ◦ 一応バックログには積まれてありましたが導入に挫折した形跡が... • 💪 自分、ユニットテスト書けます!! ◦
エクストリームプログラミング/TDD経験はあったのでテストなら書ける ◦ まだコードベース小の今のうちにやった方が良い(後からだとかなり大変… ◦ というわけでレジェンドコード改善をスタートしました! ▪ ※レジェンドコード === レガシーコード ▪ ※レガシーコードとはテストのないコードのことです
まずはライトにテストコードがある状態を目指した Firebase 処理 Firebase 処理 React Component
まずはライトにテストコードがある状態を目指した Firebase 処理 Firebase 処理 React Component Firebase 処理 Firebase
処理 React Component Service テストコード テストコード 一歩一歩 気合いで! 各React Componentを1つずつ気合と根性で... • ビジネスロジック/Firebase処理をServiceクラスに切り出し ◦ Serviceクラスにテストコード追加 ▪ Firebase Local Emulator Suite in Dockerを駆使 ◦ 呼び出し元のReact Componentにもテストコード追加 ▪ Serviceクラスはモック化
進めていった結果
ユニットテストで良かったことがPart.1 • 😆 React Componentコードの見通しが良くなった • 😆 テストコード追加を通して自身の技術面やプロダクト面のキャッチ アップが進んだ •
😆 プルリクマージ前に実行するようにGitHub Actionsへ登録したこと で自動的にデグレを防止できるようになった • 😆 チームのエンジニアがみんなテストコードを書く文化になった • etc 良いことしかありませんでした!!!
しかし新たな問題が、 • 😨 Serviceクラスが巨大な泥団子のようになってしまった... ◦ テストコード追加を目的に進めた結果、Serviceクラスの設計は後回しに...
しかし新たな問題が、そしてアーキテクチャ改善へ • 😨 Serviceクラスが巨大な泥団子のようになってしまった... ◦ テストコード追加を目的に進めた結果、Serviceクラスの設計は後回しに... • 💪 DDDを意識したオニオンアーキテクチャ化します!! ◦
テストコードがあるので安心してリアーキテクティングできる ◦ ユビキタス言語はすでにALPSで定義されてあった ▪ ※ ALPS: Application-Level Profile Semantics (セマンティクス定義の規格) ▪ ※ DDD: Domain-Driven Design (ドメイン駆動設計)
2022/03/13
テストコードを足場にServiceクラスをリアーキ中... Firebase 処理 Firebase 処理 Service テストコード
テストコードを足場にServiceクラスをリアーキ中... Firebase 処理 Firebase 処理 Service テストコード UseCase Domain Infrastructure
Firebase 処理 テストコード • 外側のテストコードがあるので安心してリアーキ できてます! ◦ 根性でServiceクラスをUseCaseクラスへ徐々に浄化中 ◦ (現在、改善活動に費やしているのは週1日程度です) とにかく 気合いで!
進めていった結果 この2冊は本当におすすめです! ・ドメイン駆動設計 モデリング/実装ガイド ・ドメイン駆動設計 サンプルコード&FAQ
ユニットテストで良かったことがPart.2+α • 😆 内部設計が改善され高凝集/低結合な構造になった ◦ 😆 テストが更に書きやすくなった ◦ 😆 新規開発/機能追加が楽になった
• 😨 リアーキ前後の設計が混在して少し混乱の元に... • etc まだまだ途中の段階ですので 最後までリアーキやり切ります!!!
まとめ
ユニットテスト is 素晴らしい :+1: :+1: :+1: • 😆 テストを書くことでキャッチアップができました •
😆 テストを書く文化が浸透しチームの品質意識が高まりました • 😆 テストコードがあることで安全に設計/コードを磨いていけるようにな りました • etc みんなテストコード書こうぜ!!!
We are hiring! • ドクターメイトでは一緒に持続可能な医療介護の実現に取り組 んでいただけるエンジニアを絶賛大募集中です! ◦ カジュアル面談などもしておりますのでお気軽にお声かけ くださいませー