第9章 パッケージ管理の基礎
新しいソフトウェアを導入したいとき、Linuxではインストーラーをダウンロードするのではなく、パッケージマネージャーというツールを使うのが一般的です。
パッケージマネージャーとは
パッケージマネージャーは、ソフトウェア(パッケージ)のインストール・更新・削除に加えて、依存関係(そのソフトが必要とする他のソフト)まで自動的に解決してくれるツールです。ディストリビューションによって使うコマンドが異なります。
| ディストリビューション系統 | コマンド |
|---|---|
| Debian / Ubuntu 系 | apt |
| Red Hat / Fedora / Rocky Linux 系 | dnf(旧 yum) |
| Arch Linux 系 | pacman |
| openSUSE 系 | zypper |
| Alpine Linux | apk |
この章では代表としてapt・dnf・pacmanを扱いますが、いずれも「パッケージの一覧を最新化する」「検索する」「入れる」「消す」という共通の操作を、それぞれ独自のコマンド名で提供しているという点は変わりません。使うディストリビューションが変わっても、この対応関係さえ押さえておけば戸惑うことは少なくなります。
パッケージマネージャーがなかった時代
パッケージマネージャーが当たり前になる前は、ソフトウェアをインストールするには、ソースコードを自分でダウンロードし、コンパイル(ビルド)して、必要なライブラリを手作業で揃える必要がありました。これは非常に手間がかかるうえ、バージョンの組み合わせによる不具合(いわゆる「依存地獄」)にも悩まされがちでした。パッケージマネージャーは、こうした作業を「あらかじめビルド済みのパッケージを、依存関係ごと自動で用意する」という形で大幅に簡略化した仕組みだと理解すると、そのありがたみが分かりやすくなります。
依存関係の自動解決とは
多くのソフトウェアは、単体では動かず、他のライブラリやツール(依存パッケージ)を必要とします。たとえばnginxをインストールしようとすると、内部的にはSSL通信に使うライブラリなど、複数の関連パッケージが一緒に必要になることがあります。もしこれを手作業で1つずつ探して入れていくと大変な手間になりますが、apt install のようなパッケージマネージャーのコマンドは、必要な依存パッケージを自動的に見つけてまとめてインストールしてくれます。これが「依存関係の解決」と呼ばれる、パッケージマネージャーの最大の利点のひとつです。
パッケージマネージャーは、インターネット上(または社内ネットワーク上)に用意されたリポジトリと呼ばれる配布サーバーと通信して、パッケージの情報や本体を取得します。apt updateのような更新コマンドは、実際にはこのリポジトリに問い合わせて「どのパッケージのどのバージョンが利用可能か」という一覧情報を手元に取得し直している、というイメージを持っておくと理解しやすくなります。
apt の基本コマンド(Ubuntu / Debian)
以下はUbuntu 24.04 LTSでの実行例
$ sudo apt update # パッケージ一覧を最新に更新
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Fetched 252 kB in 1s (302 kB/s)
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.
$ sudo apt upgrade # インストール済みパッケージを更新
Reading package lists... Done
Building dependency tree... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
$ sudo apt install nginx # nginxをインストール
Reading package lists... Done
Building dependency tree... Done
The following additional packages will be installed:
nginx-common nginx-core
The following NEW packages will be installed:
nginx nginx-common nginx-core
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 570 kB of archives.
Do you want to continue? [Y/n] y
...(パッケージのダウンロードと展開が続く)
Setting up nginx (1.24.0-2ubuntu7.4) ...
$ sudo apt remove nginx # nginxをアンインストール
The following packages will be REMOVED:
nginx nginx-core
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
Do you want to continue? [Y/n] y
Removing nginx (1.24.0-2ubuntu7.4) ...
$ apt search nginx # パッケージを検索
Sorting... Done
Full Text Search... Done
nginx/noble-updates,noble-security 1.24.0-2ubuntu7.4 amd64
small, powerful, scalable web/proxy server
...(関連パッケージがこの後も一覧表示される)
$ apt show nginx # パッケージの詳細情報を表示
Package: nginx
Version: 1.24.0-2ubuntu7.4
Priority: optional
Section: web
Homepage: https://nginx.org
Download-Size: 4,354 B
Description: small, powerful, scalable web/proxy server
Nginx ("engine x") is a high-performance web and reverse proxy server...
$ sudo apt autoremove # 不要になった依存パッケージをまとめて削除
The following packages will be REMOVED:
libgd3 libjbig0 libwebp7
0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
Do you want to continue? [Y/n] y
$ sudo apt purge nginx # nginxを設定ファイルごと完全に削除
Removing nginx (1.24.0-2ubuntu7.4) ...
Purging configuration files for nginx (1.24.0-2ubuntu7.4) ...
$ apt list --installed # インストール済みパッケージの一覧を表示
Listing... Done
adduser/noble,now 3.137ubuntu1 all [installed]
apt/noble,now 2.7.14build2 amd64 [installed]
base-files/noble,now 13ubuntu10 amd64 [installed,automatic]
...(インストール済みパッケージが数百件続く)
この行のこの値に注目: installやremove系のコマンドは、実際に変更する前に必ず対象パッケージと変更内容(何がいくつ追加・削除されるか)を一覧表示し、Do you want to continue? [Y/n]で確認を求めます。ここでyを押すまでは何も変更されないため、内容をよく確認してから進める習慣をつけましょう。searchやshow、list --installedは変更を伴わない照会コマンドのため、確認プロンプトなしで即座に結果が表示されます。
sudo は「管理者権限で実行する」というコマンドで、システムに変更を加える操作の前に付けます。パッケージのインストールや削除はシステム全体に影響する操作のため、一般ユーザーの権限のままでは実行できないようになっています。
sudoを実行すると、多くの場合[sudo] password for user:のようにパスワードの入力を求められます。この際、キーボードで文字を打っても画面には何も表示されません(*のような伏せ字すら出ません)。これは故障やフリーズではなく、パスワードの文字数すら他人に推測されないようにするための、意図的な仕様です。見た目には何も反応がなくても、実際にはきちんと入力が受け付けられているので、落ち着いて最後まで打ち切り、Enterを押しましょう。
removeとpurgeの違いにも触れておきましょう。removeはプログラム本体を削除しますが、設定ファイルはそのまま残します。「同じソフトを入れ直すかもしれない」という場合はこちらで十分です。一方purgeは設定ファイルごと完全に削除するため、そのソフトウェアに関する情報を跡形もなく消したいときに使います。
update はあくまで「パッケージの一覧情報」を最新化するだけで、実際のソフトウェアは更新されません。ソフトウェア自体を更新するのは upgrade です。この2つはセットで実行するのが基本です。sudo apt update && sudo apt upgradeのように && でつなげて一度に実行する書き方もよく見かけます(&&は「前のコマンドが成功したら次を実行する」という意味の記法です)。
よくある間違い
- update を忘れてinstallする: パッケージ一覧が古いままだと、目的のパッケージが見つからなかったり、古いバージョンしか入らなかったりすることがあります。まずは
updateから始める習慣をつけましょう。 - ディストリビューションに合わないコマンドを使う: Ubuntu環境で
dnf installのようにRed Hat系のコマンドを打ってしまう、というのは初心者にありがちな混同です。今使っているディストリビューションがどの系統かを意識することが大切です。 - sudo を付け忘れる: install や remove など、システムに変更を加える操作には基本的に
sudoが必要です。権限エラーが出たら、まずsudoを付け忘れていないか確認しましょう。
dnf / pacman の例
以下はRocky Linux 9での実行例
$ sudo dnf install nginx # Fedora / Rocky Linux
Last metadata expiration check: 0:12:34 ago on Thu 20 Aug 2026 09:00:00 AM UTC.
Dependencies resolved.
========================================================================
Package Arch Version Repository Size
========================================================================
Installing:
nginx x86_64 1:1.20.1-14.el9 appstream 570 k
Installing dependencies:
nginx-filesystem noarch 1:1.20.1-14.el9 appstream 24 k
Transaction Summary
========================================================================
Install 2 Packages
Is this ok [y/N]: y
...(ダウンロードとインストールが続く)
Installed:
nginx-1:1.20.1-14.el9.x86_64
Complete!
$ sudo dnf remove nginx # Fedora / Rocky Linux でアンインストール
Dependencies resolved.
========================================================================
Package Arch Version Repository Size
========================================================================
Removing:
nginx x86_64 1:1.20.1-14.el9 @appstream 1.9 M
Is this ok [y/N]: y
Removed:
nginx-1:1.20.1-14.el9.x86_64
Complete!
$ sudo dnf search nginx # Fedora / Rocky Linux で検索
Last metadata expiration check: 0:15:02 ago on Thu 20 Aug 2026 09:00:00 AM UTC.
========================= Name Exactly Matched: nginx =========================
nginx.x86_64 : A high performance web server and reverse proxy server
...(関連パッケージがこの後も一覧表示される)
以下はArch Linuxでの実行例(本サイトの標準検証環境ではないため参考情報)
$ sudo pacman -S nginx # Arch Linux でインストール(Sync)
:: Synchronizing package databases...
core is up to date
extra 8.4 MiB 4.20 MiB/s 00:02 [#####] 100%
resolving dependencies...
Packages (2) nginx-mainline-1:1.27.0-1 pcre2-10.44-1
Total Download Size: 1.85 MiB
:: Proceed with installation? [Y/n] y
...(ダウンロードとインストールが続く)
$ sudo pacman -R nginx # Arch Linux でアンインストール(Remove)
checking dependencies...
Packages (1) nginx-mainline-1:1.27.0-1
:: Do you want to remove these packages? [Y/n] y
$ sudo pacman -Syu # Arch Linux で一覧更新とアップグレードを同時に実行
:: Synchronizing package databases...
core is up to date
extra 8.4 MiB 4.10 MiB/s 00:02 [#####] 100%
:: Starting full system upgrade...
resolving dependencies...
Packages (3) glibc-2.40-3 linux-6.10.3.arch1-1 openssl-3.3.1-2
:: Proceed with installation? [Y/n] y
この行のこの値に注目: dnfもaptと同様、実行前に変更内容の一覧とIs this ok [y/N]という確認を挟みます。既定値が大文字のNになっている点に注意してください(何も入力せずEnterだけ押すとキャンセルされます)。pacmanは他の2つと違い、パッケージ名の前にバージョン番号がまとまった1行で表示されるなど出力形式が独特ですが、「変更内容を提示してから確認を求める」という流れ自体は共通しています。
コマンドの綴りは違っても、「更新→検索→install→remove」という基本の流れはどのパッケージマネージャーでも共通しています。転職や個人開発などで初めて触るディストリビューションに出会ったときも、まずは「このディストリビューションのパッケージマネージャーは何か」「install・remove・searchに相当する操作は何か」を調べれば、ほぼ迷わず作業を始められます。
操作の対応表で覚える
覚えることが多く感じられるかもしれませんが、次の対応表を手元に置いておけば、どのディストリビューションでも迷わず操作できます。
| やりたいこと | apt (Debian/Ubuntu) | dnf (Red Hat系) | pacman (Arch) |
|---|---|---|---|
| 一覧を更新 | apt update | (installなどの際に自動) | pacman -Sy |
| 更新を適用 | apt upgrade | dnf upgrade | pacman -Su |
| インストール | apt install 名前 | dnf install 名前 | pacman -S 名前 |
| 削除 | apt remove 名前 | dnf remove 名前 | pacman -R 名前 |
| 検索 | apt search 名前 | dnf search 名前 | pacman -Ss 名前 |
細かいオプションの綴りに違いはあっても、「まず一覧を最新化し、必要なら検索し、install/removeで操作する」という骨組みは共通です。この骨組みさえ頭に入れておけば、表の細部を暗記していなくても--helpやmanページを見ながら十分に作業できます。
Snap・Flatpakなど新しい配布形式
近年では、ディストリビューションの違いを気にせず同じパッケージを使えるようにするSnapやFlatpakといった配布形式も広がっています。これらはアプリケーションと必要なライブラリをひとまとめにして配布する仕組みで、aptやdnfのようなディストリビューション標準のパッケージ管理とは別の仕組みとして併用されることが多いです。まずは標準のパッケージマネージャーの使い方をしっかり身につけ、必要に応じてこうした新しい形式も選択肢に加えるとよいでしょう。
Snap・Flatpakのようなパッケージは、依存するライブラリを自分のパッケージの中に閉じ込めて持ち歩く(コンテナに近い)形式のため、システム全体のライブラリと衝突しにくいという利点があります。その代わりに、同じソフトウェアの複数バージョンがディスク上に共存しがちで、ファイルサイズが大きくなりやすいという特徴もあります。「システムに深く組み込むもの(サーバーソフトなど)は標準のパッケージマネージャーで、デスクトップアプリなどは配布形式にこだわらず使いやすいものを選ぶ」といった使い分けをする人も多いです。
バージョンを気にする場面
apt install ソフト名のようにバージョンを指定しない場合、通常はそのディストリビューションが提供している標準バージョンがインストールされます。業務でよくあるのが「このアプリはバージョン◯◯でないと正しく動かない」というケースで、こうした場合には特定のバージョンを指定してインストールしたり、バージョンを固定(ピン留め)したりする機能が各パッケージマネージャーに用意されています。初心者のうちはあまり意識しなくても構いませんが、「パッケージにはバージョンがあり、意図せず上がってしまうと動作に影響することがある」という感覚だけは持っておくと、後々のトラブルシューティングで役立ちます。
今どのパッケージが更新可能な状態かを事前に確認したい場合は、実機ではapt list --upgradableを実行すると、更新対象のパッケージ名と現在・更新後のバージョンが一覧で表示されます。いきなりapt upgradeを実行する前に、この一覧に目を通しておくと、想定外の大きな更新(メジャーバージョンアップなど)が含まれていないかを事前に把握でき、本番サーバーでの作業では特に重要な確認ステップになります。
また、セキュリティ上の脆弱性を修正するための更新(セキュリティパッチ)は、機能追加の更新とは別に優先度高く適用すべきものです。サーバー運用の現場では、すべての更新を毎回すぐに適用するのではなく、セキュリティ関連の更新は速やかに、それ以外の機能更新は動作確認をしたうえで計画的に適用する、という運用ルールを設けているケースがよくあります。
パッケージがインストールできないときの確認ポイント
「apt installでパッケージが見つからない」というトラブルに出会ったら、次の点を順番に確認すると解決の糸口が見つかりやすくなります。まずapt updateを最近実行したか(パッケージ一覧が古いままだと新しいパッケージが見えません)、次にパッケージ名の綴りが正しいか(似た名前の別パッケージが存在することもあります)、最後にそのパッケージを提供するリポジトリが有効になっているか、という3点です。特に少し特殊なソフトウェアは標準リポジトリに含まれておらず、別途リポジトリを追加する必要がある場合もあるため、公式ドキュメントでインストール手順を確認するのが確実です。