【いぞんかんけい】

依存関係 とは?

💡 ソフトウェアの「材料リストと仕入れ先の関係」
📌 このページのポイント
依存関係:モジュール間のつながり アプリ A ライブラリ B ライブラリ C ユーティリティ D 依存 依存 依存 依存 上位モジュール 中間 基盤
依存関係ツリーのイメージ
ひよこ ひよこ

依存関係って何が問題になるの?

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

一番よくあるのはバージョンの衝突。AのライブラリはBのv1.0が必要で、CのライブラリはBのv2.0が必要、みたいな状況。これが「依存地獄」で、古いプロジェクトのメンテナンスで頭を悩ませることになる。

ひよこ ひよこ

直接依存と推移的依存って何が違うの?

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

自分のコードが「import react」と書いてるのが直接依存。そのReactが内部でbabelを使っていて、それがさらにcore-jsを使ってる、みたいな「依存の依存」が推移的依存。意識してないのに大量のパッケージが入ってくるのはこのため。

ひよこ ひよこ

依存パッケージの脆弱性ってどうやって知るの?

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

npm audit」や「pip-audit」コマンドでスキャンできる。GitHubDependabotを設定しておくと、脆弱性が見つかったときに自動でPRを出してくれる。定期的なアップデート監視が大事。

ひよこ ひよこ

依存パッケージを増やしすぎるとどうなる?

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

ビルドが遅くなる・アプリのサイズが膨れる・脆弱性の攻撃面が増える・メンテナンスコストが上がる、など問題が増える。「自分で10行書けばいいものをパッケージに頼る」のは避けた方がいい。依存を増やすのはコストと引き換えだと意識しよう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
依存関係って出てきたら「このソフトが動くために必要な外部ライブラリの関係」と思えばだいたいOK!
📖 おまけ:英語の意味
「dependency」 = 依存するもの、頼っているもの
💬 「depend on(依存する)」から。他のソフトウェアに「頼って」動くという意味
← 用語集にもどる