パッケージ管理システム

パッケージ管理システム（パッケージかんりシステム）、またはパッケージマネージャとは、コンピュータのプログラムを一貫した方法でインストールやアンインストール、ライブラリなどの依存関係を解決する流れをツールによって管理を自動化するシステムである。 パッケージ管理システムが定める方式で、ソースまたはバイナリをひとつのパッケージファイルにまとめる。このパッケージにはソフトウェア名、説明、バージョンナンバー、ベンダー、チェックサム、ソフトウェアが正常に動作するよう依存関係のリストなどがまとめられたメタデータを含んでいる。メタデータはパッケージをツールでインストールした際にローカルのデータベースに保存する。ツールはソフトウェアの整合性や前提条件の欠落を防ぐために、依存関係とバージョン情報のデータベースを維持する。 1994年頃にはdpkgのようなパッケージ管理システムが存在していた。1995年に登場したCPANは、リポジトリからパッケージをダウンロードし、依存関係を解決するなどの機能が備わっていた。 以下はパッケージ管理システムの典型的な機能である。ただし、必ずしもすべての機能が備わっているとは限らない。 リポジトリの購読 インターネット上（やインストールCD上）のパッケージリポジトリを指定して、必要に応じてローカルのパッケージリストを更新する。また、パッケージ名や説明を検索して必要なパッケージを探すことができる。 ソフトウェアパッケージのインストール・削除 パッケージ名やパッケージファイルを指定してソフトウェアのダウンロードや完全性の検証、インストールをすることができる。ソースコードや設定ファイルをパッケージ化して、インストールすることができる。設定ファイルなどを完全に削除することもできる。 依存関係の解決 あるパッケージに必要なソフトウェアを自動的にインストールしたり更新することができる。また、同時にインストールまたは更新できないソフトウェアパッケージのインストールや更新を回避できる。 設定管理 パッケージの設定スクリプトを使って、自動的に設定を行える。競合する機能をもつソフトウェアで、どちらを優先して使うかを設定できる。 OSになんらかのソフトウェアを追加インストールする場合には、ソフトウェアに関係するファイル一式をまとめた「パッケージ」が利用される。パッケージの形式は複数あるが、利用される形式はOSによって限定されることが多い。 以下のパッケージには、インストールされるデータ・依存関係のみが含まれており、OSに搭載されているパッケージ管理システムを用いることでインストールできる。 RPM形式パッケージ Red Hat Linux用に開発されたパッケージ形式。Red Hat Enterprise LinuxのほかTurbolinuxやVine Linux等でも利用される。 deb形式パッケージ Debian用に開発されたパッケージ形式。dpkgやAPTを用いてインストール・管理される。 ports（英語版）形式パッケージ FreeBSDで利用されるパッケージ形式。 pkg形式パッケージ Solarisで利用されるパッケージ形式。FreeBSD 10.0でも、以前はpkgngと呼ばれていた形式がpkg(8)として採用されている。 ソフトウェアのアーカイブにインストール処理を行う仕組みを追加した形式。Mac OSやWindowsでよく使われ、Linuxディストリビューション向けのソフトウェアでも稀に利用される。依存関係の解決・インストールは、パッケージが独自に行う。 InstallShieldベースのパッケージ InstallShieldは、Windowsをはじめ、macOSやLinux等のPC-UNIX向けのインストーラーを作成できる。 シェルスクリプトベースのパッケージ 主にBashで書かれ、複数のディストリビューションを対象としたLinux向けのプロプライエタリソフトウェアに用いられる形式。 この他、ソフトウェアのソースコードがアーカイブされたパッケージも存在する。LinuxやFreeBSD等を含むUnix系OS等では、おもにtar.gz形式やtar.bz2形式などで配布されている。利用者は対象とするPC環境に合わせて構成やコンパイル等の作業を行った上でインストールする。多くの場合、Autotoolsによって作成された「configure」という名前のシェルスクリプトが付属しており、これを実行することでその環境における依存関係の確認や、コンパイルのためのMakefileの作成が行われる。ソースコードと、コンパイルのために必要なパッケージ（ビルド依存）は、パッケージ管理システムの機能を利用してダウンロードできる場合もある。 dpkg deb形式パッケージを対象としたDebian GNU/Linuxで開発されたツール。 APT deb形式を対象として開発された、dpkgの高機能フロントエンド。apt-getやapt-cache等の複数のコマンドから成る。配布パッケージの自動入手先として、インターネット、LAN、CD-ROM等をapt-lineとして複数指定することができる。追加インストールのほか、導入済パッケージのアップデート作業も自動処理できる。Debianから派生したディストリビューションでは、それぞれ個別のapt-lineを用意していることが多い。 aptitude TUI上で動くメニュー形式のツール。内部的にAPTを呼び出す仕組みで、DebianのOSインストール中にも、aptitudeが呼び出されるようになっている。 synaptic GUI(X Window System)上で動くメニュー形式のツール。内部的にAPTを呼び出し処理する。 apt-watch / update-manager GUI上で動く、自動更新アプレット。レッドハットのパッケージ管理ツールである RHN と類似した機能を有することが特徴である。内部的に APT を呼び出し処理する。 RPM rpm形式パッケージを対象とした Red Hat Linux で開発されたツール。単純なインストールのほか、src.rpm形式やnosrc.rpm形式 + ソースアーカイブなどを使って、ソースからのリビルドを行いrpmパッケージを生成する機能もある。以下のパッケージ管理ツールはいずれも RPM を置き換えるものではなく、RPMをバックエンドとして利用し、より高度な機能を提供している。 apt-rpm、aptitude、synaptic 本来deb形式対応のこれらのツールは RPM 対応版が作成され、Fedora や Vine Linux 等で利用されている。 TurboPackage rpm形式パッケージを対象としたTurbolinuxで開発されたツール。 up2date rpm 形式パッケージを対象にしたレッドハットのパッケージ管理ツール。同社のRed Hat Enterprise Linux （バージョン4まで）で採用されている。Fedoraの古いバージョンでも採用されていた。 Yum rpm 形式パッケージを対象としたYellow Dog Linuxで開発されたツール。Red Hat Enterprise LinuxやCentOSなどで標準として採用されている。Fedoraではバージョン21まで標準で採用されていた。 DNF rpm 形式パッケージを対象としたYumからフォークして開発されたツール。Fedoraではバージョン22より標準として採用された。 Conary ConaryはForesight LinuxやrPath Linuxにより採用され、RPM、CVS、Portageなどの優れた点を集め、さらにいくつか優れた機能を追加し、明解なリビジョン・コントロールを行う先進的な次世代パッケージ管理システムである。Conaryはアップデートされる必要があるパッケージにおいて、特定のファイルのみをアップデートするので、RPMやdebなどパッケージ全体がダウンロードされる他のフォーマットよりも効率的である。 Gentoo Linuxでは原則として、ソフトウェアをソースコードからコンパイルしてインストールするようになっている。そのため、最適化された効率的で高速なシステムを構築可能である。しかし、コンパイルするために多くの時間と演算処理を要する。 インストールするソフトウェア自体は公式のものかミラーサイトからダウンロードするため、Gentoo Linuxにおけるパッケージの本体部分は、インストール手順が書かれたBashスクリプトである。 Mozilla FirefoxやLibreOfficeなどはコンパイルに時間がかかるため、バイナリパッケージも用意されている。Adobe FlashやGoogle Chromeなどのプロプライエタリソフトウェアも、公式に配布されているバイナリファイルをダウンロードしてインストールすることが可能なようになっている。 Gentoo Linuxのパッケージ管理システムは当初はPortageのみであったが、現在では規格として標準化されているため、承認されたパッケージ管理システムが複数あり、そのいずれかを使用することになる。 Portage Gentoo Linuxのデフォルトのパッケージ管理システムである。プログラミング言語にはスクリプト言語であるPythonを採用して書かれている。FreeBSDのportsに着想を得て開発された。Gentoo Linuxの他にも、FreeBSDやmacOSにも移植されている。 Paludis Gentoo Linuxから派生したディストリビューションであるExherbo Linuxのパッケージ管理システムであり、Gentoo Linuxでも使用可能になっている。プログラミング言語には主にC++が用いられている。 pkgcore Portageと互換性が高くこれに代替しうる、より効率的なパッケージ管理システムを目指してつくられた。主にPythonで書かれている。 YaST rpm 形式パッケージを対象としたSuSE Linuxで開発されたツール。YaSTは単なるパッケージ管理ツールではなく、統合的なシステム管理ツールである。 ZYpp 充足可能性問題の解決に焦点を当てて開発されたパッケージ管理システム。 pkgtool Slackware標準のパッケージ管理ツール。APTやYumと比較して極めてシンプルなツールであり、バージョン管理は行えない。 slackpkg Slackwareで使用できるパッケージ管理ツール。標準ではインストールされない。Slackware標準パッケージしか扱えないものの、インストールすればAPTやYumのようなバージョン管理をSlackwareで実現することができる。 sbopkg Slackware用リポジトリ、SlackBuilds.org用のパッケージ管理ツール。上記のとおり、slackpkgではサードパーティーパッケージを扱えないため、独自に提供されている。 pacman Arch Linux向けに開発されたパッケージ管理ツール。コンパイル済みバイナリとパッケージ情報を含んだ独自の.pkg.tar.zstフォーマットを用いる。プログラミング言語はCが用いられている。 nix Debian、openSUSE、Fedora等多数のディストリビューションに対応した環境非依存型パッケージ管理ツール。既存環境の依存関係に関わりなくサードパーティー製ソフトウェアをインストールできるうえ、旧来のパッケージ管理ツールでは実現できなかった同一ソフトウェアの複数バージョン共存が実現できる。 Snap カノニカルによる、サンドボックス技術を利用したディストリビューション非依存なパッケージ管理ツールおよびシステム。クラウドやIoTでも利用でき、複数バージョンの共存やAppArmorを使ったアクセス制限も可能。Ubuntuで標準で利用できるが他の多くのディストリビューションで利用できる。 Flatpak GNOME発の技術で、freedesktop.orgのプロジェクトとして開発されている、サンドボックス技術を利用したディストリビューション非依存なパッケージ管理ツールおよびシステム。上記2種と同様に複数バージョンの共存が可能。Snapと違いデスクトップアプリケーション専用で、主要ディストリビューションで利用可。 ports（英語版） 原則的にソースをコンパイルしてインストールするようになっている。このため、PCごとに命令レベルで最適化された、処理効率として無駄の少ない環境を構築できる。ただし、インストールに長時間かかる。バイナリで用意されたパッケージをpkg(8)によりインストールすることもできる。ソースをコンパイルしたものとバイナリでインストールしたものとは単一のデータベースで統一管理されるようになっているため、それぞれのパッケージの性格に応じてソースからのコンパイルとバイナリインストールとを選択することが可能である。詳細はFreeBSDおよびFreeBSD Ports（英語版）を参照。 pkgsrc 原則的にソースをコンパイルしてインストールするようになっている。このため、PCごとに最適化された、無駄の少ない環境を構築できる。ただし、インストールに長時間かかる。また、OS/CPUには依存せず、NetBSD以外にもLinuxやmacOS、Solarisなどでも使える。 macOSには、MacPorts、Fink、Homebrewなどがある。 PackageManagement Windows公式のパッケージ管理ツール。PowerShell 5.0に組み込まれており、様々なリポジトリが存在する。 Chocolatey Windows NT向けのパッケージ管理ツール。.NET Framework向けパッケージ管理システムNuGetのパッケージインフラを利用している。 Windows Package Manager Windows公式のパッケージ管理ツール。MicrosoftがWindows 10とWindows 11のために設計し、フリーかつオープンソースである。winget の名で知られる。 ここでは各パッケージ管理システムによるパッケージのインストール、アップデート、アンインストールといった基本コマンドの一例を比較する。 プログラミング言語においては、プログラムのソースコードを管理するために、パッケージ管理システムが使われる。その性質からほとんどがソースコード形式で管理・配布されている。 Cargo CargoはRust言語製ソフトウェアプロジェクト（"crate" と呼ばれる）のCUIのビルドツールであり、パッケージ管理システムの機能をも持つ。Cargoの依存ライブラリのダウンロード先はcrates.ioである。 Pub PubはDart言語製ソフトウェアプロジェクトのCUIのビルドツールであり、パッケージ管理システムの機能をも持つ。Pubの依存ライブラリのダウンロード先はPub.devである。 RubyGems RubyGemsはRuby言語用のパッケージ管理システムであり、Rubyのプログラムと（"gem" と呼ばれる）ライブラリの配布用標準フォーマットを提供している。 GoMod GoModはGo言語用のパッケージ管理システムであり、Goのプログラムと（"mod" と呼ばれる）ライブラリの配布用標準フォーマットを提供している。 pip Pythonの標準的なパッケージ管理システム。condaと違いマシン単位で依存パッケージを管理する。 Conda 科学計算のためのPythonプラットフォームAnacondaの一部として提供されているPythonパッケージ管理システム。 npm "Node Package Manager" 現在ではフロントエンドのパッケージも受け入れが進んでおり、登録されているパッケージ数は非常に多い。 BuildPod BuildPodはfantom言語用のパッケージ管理システムであり、fantomのプログラムと（"pod" と呼ばれる）ライブラリの配布用標準フォーマットを提供している。 NuGet .NET Framework CocoaPods Objective-Cランタイムで動作する、Objective-C、Swift、向けパッケージ管理システムである。RubyGemsに影響を受けている。 そのほか、以下のようなものがある。 Composer PHP CPAN Perl CRAN R elm-package Elm Conan C/C++ DUB D Maven Java [脚注の使い方] ^ 大半はアーカイブ化、つまり圧縮された状態でまとめられる。 ^ APTにおいては、apt updateがパッケージのアップデートを行うコマンドではない。 ^ [パッケージ名]の箇所は省略可能。次項も同様。 ^ “What is a package manager?（パッケージマネージャーとは何ですか？）” (英語). Debian. 2022年2月27日閲覧。 ^ “Debian パッケージ管理システムの基礎”. Debian. p. 7. 2022年2月27日閲覧。 ^ dpkgがPerl言語で書かれていた時代のコード。 - ウェイバックマシン（2015年4月2日アーカイブ分） ^ “PerlTimeline” (英語). Perl. 2022年2月27日閲覧。 ^ 4.4. pkg によるバイナリ package の管理 ^ Part I. pkgsrc 利用者向けの手引き ^ “第8章 Debian パッケージ管理ツール”. Debian. 2022年2月17日閲覧。 ^ “Debian リファレンスカード” (PDF). Debian. 2022年2月17日閲覧。 ^ “YUM/DNF を使用したパッケージ管理”. レッドハット. 2022年2月17日閲覧。 “Red Hat Enterprise Linux 8” ^ “Managing software with the DNF tool” (英語). レッドハット. 2022年2月17日閲覧。 “Red Hat Enterprise Linux 9-beta” ^ “brew(1) – The Missing Package Manager for macOS (or Linux)” (英語). Homebrew. 2022年2月17日閲覧。 ^ “nix-env” (英語). NixOS. 2022年2月27日閲覧。 ^ “pacman(8)” (英語). Arch Linux. 2022年2月17日閲覧。 ^ “Zypper package manager” (英語). SUSE. 2022年2月17日閲覧。 ^ “SDB:Zypper manual” (英語). openSUSEプロジェクト. 2022年2月17日閲覧。 ^ Alex Crichton (2014年11月20日). “Cargo: Rust's community crate host”. 2018年1月28日閲覧。 DLL地獄 ProGet 表示 編集