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
990
転職してユニットテストに救われている話
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
1k
React Nativeアプリを DDDで開発している話
nihemak
0
1.6k
忙しいソフトウェアエンジニアにお勧めする友人の作り方 / create friend
nihemak
0
610
Other Decks in Programming
See All in Programming
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
Go の GC の不得意な部分を克服したい
taiyow
2
770
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
useSyncExternalStoreを使いまくる
ssssota
6
1k
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
200
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
440
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
370
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
270
php-conference-japan-2024
tasuku43
0
220
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
310
良いユニットテストを書こう
mototakatsu
5
2k
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Code Review Best Practice
trishagee
65
17k
Visualization
eitanlees
146
15k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
For a Future-Friendly Web
brad_frost
175
9.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
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! • ドクターメイトでは一緒に持続可能な医療介護の実現に取り組 んでいただけるエンジニアを絶賛大募集中です! ◦ カジュアル面談などもしておりますのでお気軽にお声かけ くださいませー