【いぞんかんけい】

依存関係 とは?

最終更新:
💡 自分が必要とするものと、その先のつながり

あるソフトウェアや処理が、別のモジュール・ライブラリ・サービスなどを必要とする関係。直接必要とするものだけでなく、その依存先がさらに必要とするものも管理します。

📌 このページのポイント
依存関係:必要とするもの、その先のつながりA → B は「AがBを必要とする」アプリA自分ライブラリBAの直接依存ライブラリCAの推移的依存package.json:依存先・版の条件package-lock.json:実際の解決結果実行・ビルド・テストなどの用途も区別互換性・保守・脆弱性と更新後の動作を確認
A・B・Cは架空の例です。矢印は必要とする先で、実行順やデータ通信ではありません。宣言する条件と採用する版、直接と推移的な依存を分けます。
ひよこ ひよこ
依存関係って何?
ペンギン先生 ペンギン先生
例えばアプリAがライブラリBを必要とするなら、AはBに依存している。外部のライブラリだけでなく、自分のモジュールや外部サービスにも同じ考え方を使えるよ。
ひよこ ひよこ
直接と推移的では何が違う?
ペンギン先生 ペンギン先生
AがBを使い、BがCを必要とする例なら、Aから見たBは直接依存、Cは推移的依存。図のA・B・Cは架空の例なので、特定製品の内部構造を表すものではないよ。
ひよこ ひよこ
どうやって記録する?
ペンギン先生 ペンギン先生
例えばnpmのpackage.jsonに依存先とバージョン条件を記す。package-lock.jsonは実際に解決した構成を記録する。宣言された範囲と採用された版は別で、開発用の依存も区別するんだ。
ひよこ ひよこ
同じパッケージの版が違えば失敗?
ペンギン先生 ペンギン先生
複数の版を共存させられる場合もある。一方、プラグインのpeerDependenciesなど、同じホストとの互換性の条件が合わず解決できない場合もある。どの条件が衝突したのか確認しよう。
ひよこ ひよこ
パッケージは少ないほど良い?
ペンギン先生 ペンギン先生
数や自作の行数だけで決めない。必要な機能、保守、ライセンス、脆弱性と互換性を比較する。npm auditなどの報告は既知の情報を調べる助けだけど、安全を保証するものではなく、更新後の確認も必要だよ。
もっと詳しく知りたい人へ

ロックファイルがあれば、どこでも全く同じように動く?

依存構成を再現する助けになりますが、OS・CPUや実行環境、外部サービスなどの差までなくすものではありません。ロックファイルと対象環境の条件を管理し、必要な動作を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「依存関係」って出てきたら「あるソフトウェアや処理が別のものを必要とする関係」と思えばだいたいOK!
📖 おまけ:英語の意味
「dependency」 = 依存するもの、頼っているもの
💬 「depend on(依存する)」から。他のソフトウェアに「頼って」動くという意味

参考資料

← 用語集にもどる