依存パッケージ【dependent package】
概要

「パッケージ」(package)とは、ソフトウェアを配布する際の提供単位である。実行可能ファイルや設定ファイル、ソースコードなど、利用に必要な一連のファイルをひとまとまりにしたものを指す。あるソフトウェアが外部パッケージの機能を利用して動作する場合、両者は「依存関係」にあるといい、参照される側を依存パッケージと呼ぶ。
あるパッケージが別のパッケージに依存している場合もあるため、依存関係は一段階に留まらない場合がある。何段階にも渡ってパッケージ間の依存関係が次々に展開していく状態を「推移的依存」と呼び、大規模なソフトウェアでは数百から数千の依存パッケージが連鎖的に利用されることもある。
LinuxなどのUNIX系OSでは、パッケージ管理システムを用いてソフトウェアの導入・更新・削除を行うことが一般的である。多くのシステムはパッケージ作成時に依存先を指定する仕組みを持ち、依存関係を自動認識して必要なパッケージを一括取得・導入する。プログラミング言語の開発環境でも、JavaScriptの「npm」、Pythonの「pip」、Rubyの「RubyGems」などが同様の機能を提供している。
依存パッケージの管理では、バージョンの整合性が重要である。複数のパッケージが同一ライブラリの互換性のない別々のバージョンをそれぞれ要求すると「依存関係の衝突」が発生し、システムが不安定になる。近年のパッケージ管理システムには、依存関係を解析して互換性のある組み合わせを自動選択する機能が備わっている。
依存先のパッケージに脆弱性が発見された場合、それを利用するソフトウェアも同様の影響を受けるため、利用中の依存パッケージを一覧化し、更新状況や安全性を継続的に確認する運用が開発現場で広く行われている。近年ではオープンソースソフトウェアの開発プロジェクトが乗っ取られて攻撃コードが仕込まれる事例も見られ、依存パッケージはサプライチェーンリスクの一つとしても認識されている。