はじめに
この記事は農工大 Advent Calendar 2025の5日目の記事です。
アイドルは依存している
皆さん、アイドルマスターシリーズをご存知でしょうか。
最近は学マスが流行ったおかげで幾分知名度が上がった気がします。
アイドルマスターは、プレイヤーがプロデューサーになって、アイドルを一人前に育て上げる育成ゲームです。
育成の最後には試験(オーディション)と呼ばれるものがあり、ここで好成績を残すことが最終目標です。
そのために、プレイヤーは、各ターン(週)ごとにアイドルが行うスケジュールを決め、アイドルを成長させます。
学マスの初シナリオを例に挙げると、各ターンでアイドルが行える行動は以下の通りです。
- Vo.レッスン
- Da.レッスン
- Vi.レッスン
- 授業
- 相談
- 活動支給
- おでかけ
ここで考えてほしいのは、 アイドルは1人では何もできないということです。各行動をアイドルがとるためには、それぞれ他の誰かの力が必要です。
- Vo.レッスン→Vo.トレーナー
- Da.レッスン→Da.トレーナー
- Vi.レッスン→Vi.トレーナー
- 授業→先生
- 相談→あさり先生
- 活動支給→あさり先生
- おでかけ→プロデューサー
これをオブジェクト指向的に捉えてみましょう。
警告
これ以降の内容は実在するゲーム「学園アイドルマスター」の内容とは一切関係ありません。
Idol クラスが多くのクラスに依存していることがわかります。
大事なのはアイドル
しかしこれでは不都合が生じます。
例えば、アイドルがビブラートの技能を習得したいと思っても、 VocalTrainerにそのようなメソッドはありません。また、プロデューサーに来週のスケジュールも知っておいてもらいたいと思っても、Producerにそのようなメンバはありません。
ここで「じゃあ仕方ないね。ありもので頑張ってね。」としてしまうのは本末転倒です。
初星学園(=開発者)が提供したいのは、アイドル育成人材(=裏方)ではなく、アイドルそのもの(=みんなが見る部分)です。 つまり、アイドル育成人材は 「すべてはアイドルのために」 という意志のもと存在して然るべきです。
アイドルに依存する
ここで見方を変えます。
これまではアイドルがトレーナー、先生、プロデューサーのもつ機能に依存していました。
これをトレーナー、先生、プロデューサーが、アイドルの求める機能に依存するようにします。
オブジェクト指向的に言うなれば、アイドルがトレーナー、先生、プロデューサーに求める機能をインターフェイスとして用意し、トレーナー、先生、プロデューサーはその要件に合うようにインターフェイスを実装するようにします。
こうすることによるメリットはいろいろあります。
例えば、先ほどのようにアイドルが VocalTrainer に新しい機能を要求する場合には、IVocalTrainerに新しいレッスンを行うメソッドを追記し、VocalTrainer がそれに対応する(=メソッドを実装する)ことで対応できます。
また、 AsariSensei が実装した Consulting() メソッドが、高機能な代わりに呼び出すたびに高額請求をしてくる場合、全体の流れを把握するための模擬プロデュースを行うたびに高額請求されていては破産してしまいます。
Idol が AsariSensei に依存していた場合は、 どうしようもないのですが、依存性逆転をした今、 AsariSensei に圧力をかけて減額してもらうしかないIdol は IAsariSensei インターフェイスを実装した"何か"を求めているだけです。
ここで、 IAsariSensei インターフェイスを実装した CheapAsariSensei を用意します。 CheapAsariSensei の Consulting() メソッドは、低機能な代わりにお金を請求されません。
模擬プロデュースの時に限って、 AsariSensei の代わりに CheapAsariSensei を使うことで、テスト中でもアイドルが求めている要件を満たしつつ、破産を回避することができるのです。
ここで言う「模擬プロデュース」は、実際の開発におけるテストに相当するもののつもりです。
おわりに
この記事では、依存性逆転について、学園アイドルマスターを例に解説しました。
本記事を通して一番伝えたかったことは「裏方は表方のことを最優先に考えろ」ということです。例えばゲームを作るとき、マネージャークラスが管理しやすいようにデータを管理して、「UIとかアニメーションを作る人は頑張ってね」ってすると、最悪の場合マネージャークラスのせいで追加したい機能が実現できないというケースも考えられます。
これでは意味がないです。裏方を作る人間は、表方を作る人間が使いやすいように全てをお膳立てするのが使命です。
最後までお読みいただきありがとうございます。