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
第3回NestJS勉強会 Dependency Injectionについて
Search
takuya.mashimo (眞下卓也)
June 25, 2022
Programming
0
420
第3回NestJS勉強会 Dependency Injectionについて
DIとDIコンテナがNestJSでどのように役に立っているか、説明しました!
takuya.mashimo (眞下卓也)
June 25, 2022
Tweet
Share
More Decks by takuya.mashimo (眞下卓也)
See All by takuya.mashimo (眞下卓也)
第一回NestJS勉強会
sigcode1
0
230
Other Decks in Programming
See All in Programming
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
AtCoder Conference 2025
shindannin
0
1.1k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
990
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
140
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
100
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
830
Exploring anti-patterns in Rails
aemeredith
2
250
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
The Cult of Friendly URLs
andyhume
79
6.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The SEO identity crisis: Don't let AI make you average
varn
0
330
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Writing Fast Ruby
sferik
630
62k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
590
Automating Front-end Workflow
addyosmani
1371
200k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Transcript
第3回NestJS勉強会 Dependency Injectionを理解する 2022/06/23 taku@webエンジニア(@sig-code1)
Dependency Injectionとは?
「依存している部分を、外から注入する」 一言で表すと...
用語 ・依存性の注入 ・Dependency Injection ・DI(Dependency Injectionの略語)
NestJSではどの部分?
依存性を注入をしている部分
@InjectableデコレータをUserServiceClassにつ けることで、providersに登録可能 providers・・・Moduleの要素の1つ(他にImports,controllers,exportsなどがある)
NestJSのDIシステムによって、 UserServiceクラスがインスタンス化がされるように + Module内で使用できるようになる Module内・・・今回でいうとUsersControllerなどのUsersModuleに書かれたClassたちのこと
providersに登録したClassをconstructor引数に指定 →UsersServiceClassをインスタンス化 →UsersController内で使用できるように
NestJSを使わず、 DIを用いていないサンプルコード こんな感じに☞
user.ts database.ts index.ts コンソールに Save taku!を 出力するだけのコード メソッド内でクラスをインスタンス化
これを、DI対応をすると
user.ts database.ts index.ts コンソールに Save taku!を 出力するだけのコード 外からクラスを渡すように
あんまり、変化が... • Userクラスの外部からDatabaseクラスを渡すだけで、DIの 対応は完了 • 依存対象となるDatabaseクラス(dependency)を外部から 渡す・注入(injection)している ☞Dependency Injectionと呼ばれる
DIのメリットは 単体テストがしやすくなること なぜか DI対応前のコードの場合、Userクラスの単体テストをしようとすると... ☞Databaseクラスに依存しているため、テスト失敗時の原因の切り分けが難しい ☞それはもはや、単体テストと呼べるのか??
user.ts database.ts index.ts コンソールに Save taku!を 出力するだけのコード メソッド内でクラスをインスタンス化
まだ、問題はある
user.ts database.ts index.ts コンソールに Save taku!を 出力するだけのコード 外からクラスを渡すように
• Userクラスをインスタンス化する時 ☞Databaseクラスをインスタンス化して渡さないといけない ☞つまり、UserクラスはDatabaseクラスに依存しているこ とになる
これを解決するには?
• Userクラスをインスタンス化する時に、外からDatabaseク ラスをインスタンス化せずに動かしたい もう一度、言語化
user.ts database.ts index.ts コンソールに Save taku!を 出力するだけのコード ここの部分
• アプリ側では、求めるクラスを与えられば動くコードを書きた い • オブジェクト(クラス)に何が外から渡されるかを管理したく ない 抽象度を上げると...
DIコンテナ
• DIコンテナはDIをサポートするツールである • オブジェクト(クラス)やオブジェクトの生成方法を保持す る箱のようなもの • アプリケーション(実装者側)がDIコンテナから必要なクラ スを取り出すだけにする ざっくり
DI コンテナ Application (コード側) UserServiceクラスがほしい
DI コンテナ Application (コード側) 処理中.....
DI コンテナ Application (コード側) UserService インスタンスが生成されたかを知らず、 UserServiceを利用することができる
• DIコンテナは登録と取得 • 好きなオブジェクト(クラス)を登録 • 登録したオブジェクトを取得 簡単に言語化
NestJSをもう一度みてみる
None
None
まとめてみると
• DIはデザインパターン ☞依存している部分を外から渡す • DIコンテナ ☞DIを強く後押しするツール • デコレーターとModuleファイルを使用して登録 • 使いたいオブジェクト(Class)で取得
テストコードを見てみよう https://github.com/sig-code/nest-study
ご清聴ありがとうございました🙇