Slide 1

Slide 1 text

で してみた NCDC株式会社 久光遼平

Slide 2

Slide 2 text

DI(Dependency Injection)とは? ● 依存性(Dependency)の注入(Injection) ● もう少しわかりやすく あるクラスが依存している要素をクラスの外側から注入すること ClassA { private classB constructor( ClassBInterface classB ) { this.classB = classB; } } ClassA { private classB constructor() { this.classB = new ClassB(); } }

Slide 3

Slide 3 text

何が嬉しいの? ● 単体テストがしやすくなる! class Service { private repository; constructor() { this.repository = new Repository(); } find() { // ... this.repository.find(); return; } } よくあるテストしにくい例 テストしたいのはService層のロジック Repository(DB)のテストも含まれてしまう  ・テスト失敗した時の切り分けが面倒  ・実行時間がかかる DI→テスト側からモックを注入できる!

Slide 4

Slide 4 text

実際のアプリではどうやって注入するの? ● DIコンテナという便利な仕組みがある ○ インスタンスの生成、注入を一括で行ってくれる

Slide 5

Slide 5 text

TypeScriptのDIライブラリ

Slide 6

Slide 6 text

②注入する側 ①注入される側 ③DIコンテナ 実装例 ④express

Slide 7

Slide 7 text

まとめ ● DIすればテストしやすい作りにできる ● DIの仕組みを作るにはInversifyJSを使えば楽 ● あとはテストの時にモックを注入するだけ! ● 追記:Jestのモック機能を使えば、DIしなくてもテストは書けそう ○ DIのメリット→より簡単に自由にテスト書ける