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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
230
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
410
Apache Iceberg V3 and migration to V3
tomtanaka
0
220
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
ぼくの開発環境2026
yuzneri
1
290
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
290
AIに仕事を丸投げしたら、本当に楽になれるのか
dip_tech
PRO
0
160
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを OSC駆動の7日間で作った話 / OSC2026Osaka
tsutsui
1
120
Python’s True Superpower
hynek
0
190
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
190
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
350
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
7
1.1k
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
210
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.3k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
270
How GitHub (no longer) Works
holman
316
140k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
450
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
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! • ドクターメイトでは一緒に持続可能な医療介護の実現に取り組 んでいただけるエンジニアを絶賛大募集中です! ◦ カジュアル面談などもしておりますのでお気軽にお声かけ くださいませー