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.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
転職してユニットテストに救われている話
2022/04/27 単体テストはエンジニアを救うLT大会 #SHIFT_EVOLVE
https://shiftevolve.connpass.com/event/241524/
nihemak
April 27, 2022
More Decks by nihemak
See All by nihemak
BigQueryとDataformとTROCCO®による事業グロース
nihemak
1
1.5k
React Nativeアプリを DDDで開発している話
nihemak
0
2k
忙しいソフトウェアエンジニアにお勧めする友人の作り方 / create friend
nihemak
0
680
Other Decks in Programming
See All in Programming
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
360
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
Oxlintはいいぞ(続)
yug1224
1
450
VibeCodingからAgenticWorkflowへ
starfish719
0
860
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
720
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
3k
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.7k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
500
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
280
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
210
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.8k
Featured
See All Featured
It's Worth the Effort
3n
188
29k
The agentic SEO stack - context over prompts
schlessera
0
880
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
950
We Are The Robots
honzajavorek
0
310
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Agile that works and the tools we love
rasmusluckow
331
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! • ドクターメイトでは一緒に持続可能な医療介護の実現に取り組 んでいただけるエンジニアを絶賛大募集中です! ◦ カジュアル面談などもしておりますのでお気軽にお声かけ くださいませー