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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nihemak
April 27, 2022
Programming
1
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.4k
React Nativeアプリを DDDで開発している話
nihemak
0
1.9k
忙しいソフトウェアエンジニアにお勧めする友人の作り方 / create friend
nihemak
0
660
Other Decks in Programming
See All in Programming
AHC061解説
shun_pi
0
400
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.1k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
430
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
190
Claude Code Skill入門
mayahoney
0
400
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
400
20260315 AWSなんもわからん🥲
chiilog
2
160
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
410
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.5k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
630
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1k
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
420
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
760
Making the Leap to Tech Lead
cromwellryan
135
9.8k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
320
Color Theory Basics | Prateek | Gurzu
gurzu
0
260
Typedesign – Prime Four
hannesfritz
42
3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
86
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
320
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
290
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
690
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Paper Plane
katiecoart
PRO
0
48k
It's Worth the Effort
3n
188
29k
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! • ドクターメイトでは一緒に持続可能な医療介護の実現に取り組 んでいただけるエンジニアを絶賛大募集中です! ◦ カジュアル面談などもしておりますのでお気軽にお声かけ くださいませー