プログラミングの用語一覧へ
このページの目次

依存方向とは?

最終更新:2026/08/18

3秒でわかる

どのモジュールがどのモジュールを知っているかという参照の向き。この向きを一方向に揃えることが、変更に強い構造を作る鍵になります。

もう少し詳しく

どういうものか

依存方向は、あるモジュールが別のモジュールを参照している向きのことです。A が B の関数を呼んだり、B の引数に使ったりしていれば、A は B に依存しています。図では A から B へ矢印を引きます。

重要なのは、この関係が一方向であることです。A が B を知っていて、B は A を知らない。この状態なら、A を消しても B はそのまま動きます。

なぜ必要か

依存の向きは、変更の伝わる向きと同じです。B を書き換えると A に影響が出ますが、その逆は起きません。つまり、頻繁に変わるものが安定したものに依存する形にしておくと、変更の波及が小さく収まります。反対に、業務ルールが画面の都合を知っていると、画面を直すたびにルールを触ることになります。

具体例

層を分けた構成では、外側から内側へ向けて依存を揃えます。

Controller ──▶ UseCase ──▶ Domain │ │ └──────────────┴──▶ Repository (インタフェース) │ 実装だけが内側を向く MySqlRepository

DB を扱う具体的な実装は外側に置き、内側は「保存できる」というインタフェースだけを知っています。内側が外側を直接知らないので、DB を差し替えても業務ルールのコードは変わりません。

// 内側 何で保存するかは知らない public <a href="/glossary/interface" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">interface</a> OrderRepository { void save(Order order); } // 外側 内側のインタフェースを実装する側が依存を負う public class MySqlOrderRepository implements OrderRepository { public void save(Order order) { /* <a href="/glossary/sql" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">SQL</a> を書く */ } }

つまずきやすいところ

循環依存に気づかないまま進むことが最も多い失敗です。A が B を、B が A を参照している状態になると、片方だけを取り出してテストできなくなり、ビルド順も決まらなくなります。輪ができたら、共通部分を第三のモジュールへ抜き出すか、片方をインタフェース越しの呼び出しに変えて向きを反転させます。

もうひとつは、フォルダを分けただけで依存が整ったと考えてしまう場合です。ディレクトリ構成が層に見えても、import 文が内側から外側を向いていれば、向きは揃っていません。判断材料になるのは import 文です。

覚え方

矢印の先にあるものほど、変えてはいけない安定したものです。

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地依存方向プログラミング

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

Javaコースの全編を見る