依存性注入(DI)
Dependency Injection/いぞんせいちゅうにゅう
ひとことで言うと
部品が必要とする道具を、外から渡してあげる設計のやり方です。
📖 もうちょい詳しく
何が新しいの?
プログラムの部品は、たいてい別の部品を使って動いています。たとえば「注文を処理する部品」は「メールを送る部品」を中で呼び出す、といった具合です。この「中で使う相手」のことを依存(その部品がないと動けない相手)と呼びます。依存性注入(DI)は、その相手を部品の中で自分で作らず、外から渡してもらうという考え方です。
どうやって動いてるの?
ふつうに書くと、部品は自分の内側で「メール送信の道具」を新しく作って使います。DIではそれをやめて、必要な道具を引数(呼び出すときに渡す値)やコンストラクタ(部品を作るときの初期設定)で外から受け取ります。つまり「使う相手を決める役」と「実際に使う役」を分けるわけです。渡す側を専門に担当する仕組みをDIコンテナと呼ぶこともあります。
何ができるの?
道具を外から差し替えられるので、本物のメール送信のかわりに「送ったふりをする偽物」を渡せます。これでテストがぐっと楽になります。設定の切り替えや、後からの仕様変更にも強い作りになります。
🌱 身近なたとえ
電動ドライバーで例えると、本体の中にビット(先端の刃)を埋め込んで取れなくするのではなく、用途に合わせて外から差し込んで使いますよね。プラスでもマイナスでも、本体はそのまま先だけ替えられます。DIも同じで、部品の本体はそのままに、中で使う道具だけを外から差し込んで取り替えられるようにする発想です。
✅ まず覚えるポイント
- 依存とは「その部品が動くために必要な、別の部品」のこと
- DIは依存を自分で作らず、外から渡してもらう設計です
- 渡し方はコンストラクタや引数経由が代表的です
- 道具を差し替えられるので、テストや変更に強くなります
- オブジェクト指向の設計でよく使われる定番の型のひとつです
- 渡す役を専門にやる仕組みをDIコンテナと呼びます
🧭 よくある勘違い
DIを使うと依存そのものが消えるの?
消えません。部品が別の部品を必要とする関係(依存)は残ったままです。DIが変えるのは「その相手を誰が用意するか」だけで、自分の内側で作るのをやめて外から受け取るようにします。依存をなくす技術ではなく、依存の渡し方を整える技術です。
特別なライブラリがないとできないの?
そんなことはありません。DIコンテナのような道具を使うと便利ですが、なくても成り立ちます。必要な部品を引数で渡すだけでも、それはもう立派なDIです。まずは「外から渡す」という考え方そのものが本質だと覚えておくと分かりやすいです。
🧩 関連して覚えると楽な言葉
- デザインパターン: よくある設計の悩みに対する定番の解き方。DIもその仲間です
- オブジェクト指向: 部品どうしの関係で組み立てる考え方。DIが活きる土台です
- 単体テスト(ユニットテスト): 部品ひとつを単独で検査すること。DIで偽物を渡すと楽になります
- リファクタリング: 動きを変えず中身を整理すること。依存の渡し方を直す場面で登場します
🏁 ひとことでまとめ
「使う道具は自分で抱え込まず、外から差し込む」。これを徹底するだけで、テストしやすく取り替えのきく作りになります。
TERM SEARCH
ほかの用語を調べる
検索ボックスを準備中…