【せいぎょのはんてん】

制御の反転(IoC) とは?

💡 「自分で呼ぶ」から「呼ばれるのを待つ」へ——主導権の大逆転
📌 このページのポイント
制御の反転(IoC) 通常の制御 アプリケーション ライブラリA ライブラリB 自分で呼ぶ VS 制御の反転(IoC) フレームワーク あなたのコードA あなたのコードB 呼ばれるのを待つ Don't call us, we'll call you(ハリウッド原則)
制御の反転のイメージ
ひよこ ひよこ

制御の反転って何なの?制御がひっくり返るってこと?

ペンギン先生 ペンギン先生

いい質問だね。普通のプログラムは自分で「あの関数を呼ぼう」「次はこれを実行しよう」って制御するよね。でもIoCでは、フレームワークが主導権を持って、必要なタイミングで君のコードを呼び出してくれるんだよ。

ひよこ ひよこ

えっ、じゃあ自分で処理の順番を決めなくていいの?

ペンギン先生 ペンギン先生

そうだよ。たとえばレストランで考えてみて。自分で料理するのが「通常の制御」、シェフにオーダーして待つのが「制御の反転」。シェフ(フレームワーク)が調理のタイミングも順序も決めて、できたら呼んでくれるんだ。

ひよこ ひよこ

なるほど!でもどうやって自分の処理をフレームワークに渡すの?

ペンギン先生 ペンギン先生

代表的な方法が依存性注入だよ。コンストラクタメソッド引数で「この処理を使ってね」と渡しておく。フレームワークが適切なタイミングでそれを組み立てて呼んでくれるんだ。

ひよこ ひよこ

IoCを使うと何がうれしいの?

ペンギン先生 ペンギン先生

一番大きいのはテストしやすさと柔軟性だね。部品を差し替えられるから、テスト用のダミーに入れ替えたり、本番とテストで振る舞いを変えたりできる。コードの結合度が下がるから変更にも強くなるよ。

ひよこ ひよこ

「ハリウッド原則」って聞いたことあるけど、関係あるの?

ペンギン先生 ペンギン先生

まさにIoCの別名だよ。オーディションで「こちらから連絡します(Don't call us, we'll call you)」って言うでしょ。開発者がフレームワークを呼ぶんじゃなくて、フレームワークが開発者のコードを呼ぶ——その関係がそっくりなんだ。

ひよこ ひよこ

IoCとDIって同じものなの?

ペンギン先生 ペンギン先生

よく混同されるけど違うよ。IoCは「制御の主導権を外部に渡す」という設計原則で、DIはそれを実現する具体的なテクニックの一つ。他にもテンプレートメソッドパターンやイベント駆動もIoCの一種だね。原則と実装手段の関係だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「制御の反転」って出てきたら「フレームワークが主導権を握って自分のコードを呼んでくれる仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Inversion of Control」 = 制御の反転
💬 従来はアプリケーションがライブラリを呼んでいたのを「逆転(Inversion)」させるという意味だよ
← 用語集にもどる