パッケージ管理システムとは
パッケージ管理システム(またはパッケージマネージャ)とは、
コンピュータプログラムの
インストール、アン
インストール、および依存関係の解決といったプロセスを自動化するシステムです。これにより、ソフトウェアの管理が効率的かつ一貫性を持って行えるようになります。
パッケージ管理システムは、ソフトウェアを構成するファイル一式を「パッケージ」という単位にまとめます。このパッケージには、ソフトウェアの名前、説明、
バージョン番号、ベンダー情報、チェックサム、依存関係リストなどの
メタデータが含まれています。これらの
メタデータは、パッケージが
インストールされる際にローカルデータベースに保存され、ソフトウェアの整合性や必要な前提条件が満たされているかを確認するために利用されます。
歴史
1994年頃にはdpkgのような基本的なパッケージ管理システムが登場し、1995年には
CPANが公開され、
リポジトリからのパッケージダウンロードや依存関係解決といった高度な機能が実装されました。これにより、ソフトウェア管理の自動化が大きく進展しました。
主な機能
パッケージ管理システムは、一般的に以下のような機能を提供します。
リポジトリの購読: インターネット上のパッケージリポジトリを指定し、パッケージリストを更新します。これにより、最新のソフトウェア情報やパッケージを検索できます。
ソフトウェアパッケージのインストール・削除: パッケージ名やファイル指定により、ソフトウェアのダウンロード、検証、
インストールを行います。また、不要になったソフトウェアを完全に削除することも可能です。
依存関係の解決: ソフトウェアが正しく動作するために必要な他のソフトウェア(依存関係)を自動的にインストールしたり、更新したりします。競合するパッケージのインストールや更新を避けることも可能です。
設定管理: パッケージの設定スクリプトを用いて、ソフトウェアの初期設定や競合する機能の優先順位設定などを自動化します。
パッケージ形式
ソフトウェアの
インストールには、関連ファイルをまとめた「パッケージ」が利用されます。パッケージには様々な形式があり、OSによって利用可能な形式が異なります。
実行形式でないパッケージ
RPM形式パッケージ: Red Hat Linux系ディストリビューションで利用されます。
deb形式パッケージ: Debian系ディストリビューションで利用されます。
ports形式パッケージ: FreeBSDで利用されます。
pkg形式パッケージ:
SolarisやFreeBSDで利用されます。
実行形式パッケージ
InstallShieldベースのパッケージ: Windows、macOS、Linuxなど、様々なOS向けのインストーラーを作成できます。
シェルスクリプトベースのパッケージ: 主に
Linux向けの
プロプライエタリソフトウェアに用いられます。
ソースコードアーカイブ: tar.gz形式などで配布され、利用者が環境に合わせてコンパイルしてインストールします。Autotoolsなどのツールが付属することが多いです。
パッケージを扱うツール
様々なパッケージ形式に対応するため、以下のようなツールが存在します。
Debian系
dpkg: deb形式パッケージを扱う基本的なツールです。
APT: dpkgの高機能フロントエンドで、パッケージの自動入手や更新をサポートします。
aptitude: TUIで操作できるメニュー形式のツールで、APTを内部的に利用します。
synaptic: GUIで操作できるメニュー形式のツールで、APTを内部的に利用します。
apt-watch / update-manager: GUIで自動更新を行うアプレットです。
Red Hat系
RPM: rpm形式パッケージを扱う基本的なツールです。ソースからのリビルドも可能です。
apt-rpm、aptitude、synaptic: deb形式対応ツールをRPMに対応させたものです。
TurboPackage: Turbolinuxで開発されたrpm形式パッケージ管理ツールです。
up2date: Red Hat Enterprise
Linuxで使用されていたツールです。
Yum: Red Hat系で広く使われているツールです。
DNF: Yumからフォークして開発されたツールで、より高速に動作します。
rPath系
Conary: 優れたリビジョンコントロール機能を持つ高度なパッケージ管理システムです。
Portage: Gentoo
Linuxのデフォルトのパッケージ管理システムで、ソースからのコンパイルを基本とします。
Paludis: Exherbo Linuxで開発されたパッケージ管理システムで、Gentoo Linuxでも利用可能です。
pkgcore:
Portageと互換性の高いパッケージ管理システムです。
openSUSE
YaST: SuSE Linuxの統合的なシステム管理ツールで、パッケージ管理機能も備えています。
ZYpp: 充足可能性問題の解決に焦点を当てたパッケージ管理システムです。
Slackware
pkgtool: Slackware標準のシンプルなパッケージ管理ツールです。
slackpkg: Slackwareで
バージョン管理を可能にするツールです。
sbopkg: サードパーティ製パッケージを扱うためのツールです。
pacman:
Arch [[Linux]]向けに開発されたパッケージ管理ツールです。
ディストリビューション非依存
nix: 複数ディストリビューションに対応した、環境非依存型のパッケージ管理ツールです。
Snap: カノニカルが開発した、サンドボックス技術を利用したディストリビューション非依存なツールです。
Flatpak: GNOME発の技術で、サンドボックス技術を利用したディストリビューション非依存なツールです。
FreeBSD
ports: ソースからコンパイルして
インストールを基本とします。
pkg: バイナリパッケージをインストールするためのツールです。
NetBSD
pkgsrc: ソースからコンパイルして
インストールを基本とします。
macOS
Mac[[Ports]], Fink, Homebrew: macOS向けのパッケージ管理ツールです。
Windows
PackageManagement: Windows公式のパッケージ管理ツールです。
Chocolatey: Windows向けのパッケージ管理ツールで、NuGetのインフラを利用しています。
Windows Package Manager: Windows公式のパッケージ管理ツールです。winget の名で知られています。
コマンド比較
各パッケージ管理システムの基本的なコマンド(
インストール、アップデート、アン
インストール)は異なります。
プログラミング言語においても、パッケージ管理システムが広く利用され、
ソースコード形式で配布されることが多いです。
Rust: Cargo
Dart: Pub
Ruby: RubyGems
Go: GoMod
Python: pip, Conda
JavaScript/Node.js: npm
Fantom: BuildPod
.NET Framework:
NuGet
Objective-C, Swift: CocoaPods
PHP:
Composer
Perl: CPAN
R: CRAN
Elm: elm-package
C/C++: Conan
D: DUB
Java: Maven
まとめ
パッケージ管理システムは、ソフトウェアの
インストール、アン
インストール、依存関係の解決を効率化し、システムの安定性を維持するために不可欠なツールです。多種多様なパッケージ形式やツールが存在するため、利用環境に合ったシステムを選ぶことが重要です。