Linux入門:コマンド操作のきほん

パッケージ管理

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

パッケージ管理 とは

Linuxでソフトウェアをインストール・アップデート・削除するためのパッケージ管理を学びます。本レッスンでは、パッケージ管理 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

Linux にソフトウェアを入れるとき、Windows のように個別の exe を落として叩くのではなく、ディストリビューションごとに用意された「パッケージ管理ツール」経由で導入するのが標準です。これによって、依存ライブラリの自動解決、署名検証、一括アップデート、削除時のクリーンアップが安全に行えます。

プロダクションサーバーや Dockerfile を書くときに「どのコマンドで何を入れるか」を理解していないと、依存が壊れて起動しない、セキュリティパッチが当たらない、イメージが肥大化するといった事故に直結します。本レッスンでは主要ディストロのパッケージ管理を横並びで押さえ、Dockerfile での実用パターンまで体系化します。

主要ディストロとパッケージマネージャ

系統ディストロコマンドパッケージ形式
Debian 系Ubuntu, Debianapt (旧 apt-get).deb
Red Hat 系RHEL, Rocky, AlmaLinux, Fedoradnf (旧 yum).rpm
Arch 系Arch Linux, Manjaropacman.pkg.tar.zst
AlpineAlpine Linuxapk.apk
macOS(Linux ではないが)brew(formula)

クラウドサーバーで最もよく出会うのは Ubuntu (apt) と Rocky / AlmaLinux (dnf) です。Docker のベースイメージとしては Alpine (apk) と Debian-slim (apt) が二強です。

図解 パッケージ管理の役割

diagram (will load when visible)

パッケージマネージャは公式リポジトリからメタデータと本体を取得し、ローカル DB に「入っているパッケージ」を記録しつつ、システムに配置します。アンインストール時もこの DB を見て、関連ファイルを巻き戻します。

apt の基本操作 (Ubuntu / Debian)

ターミナル

# リポジトリ情報を最新化 sudo apt update # 入っているパッケージを最新化 sudo apt upgrade -y # パッケージ導入 sudo apt install -y curl jq # パッケージ検索 apt search nginx # 入っているか確認 apt list --installed | grep nginx # アンインストール sudo apt remove -y nginx

apt updateapt upgrade はワンセット。新規ホスト構築の最初に必ず叩きます。apt install には -y を付け、対話プロンプトを抑制するのが自動化の作法です。

dnf の基本操作 (RHEL 系)

ターミナル

sudo dnf check-update sudo dnf upgrade -y sudo dnf install -y curl jq sudo dnf search nginx sudo dnf remove -y nginx # パッケージグループ (LAMP など) もインストール可 sudo dnf groupinstall -y "Development Tools"

古い記事で yum が出てきますが、RHEL 8 以降は dnf が正で、yum は dnf へのシンボリックリンクになっています。

apk の基本操作 (Alpine)

ターミナル

apk update apk add curl jq apk del jq apk search nginx

Alpine は Docker イメージで使われることが多く、apk add --no-cache <pkg> のように --no-cache でキャッシュを残さずインストールしてイメージを小さく保つのが定石です。

Dockerfile では RUN apk add --no-cache curl jq のように 1 行で複数パッケージを入れます。レイヤを分けて何度も apk add するとイメージサイズが膨らみます。

brew の基本操作 (macOS / Linuxbrew)

ターミナル

# パッケージ DB 更新 brew update # インストール brew install jq fzf ripgrep # 入っているもの一覧 brew list # アンインストール brew uninstall fzf

brew は macOS 公式ではないですが事実上の標準で、開発ツール群を入れるのに使われます。Linux 版 (Linuxbrew) もあり、root 権限なしでツールを入れたいときに便利です。

Dockerfile での実用パターン

ターミナル

# Debian-slim (apt) FROM debian:bookworm-slim RUN apt-get update \ && apt-get install -y --no-install-recommends curl jq ca-certificates \ && rm -rf /var/lib/apt/lists/*

要点は次の通りです。

  • updateinstall は同じ RUN にまとめる (別レイヤだと古いキャッシュが残る)
  • --no-install-recommends で推奨依存を入れず軽量化
  • rm -rf /var/lib/apt/lists/* で apt のキャッシュを削除しイメージを縮める
  • 必要なパッケージは原則 1 行で並べる

バージョン固定とロックファイル

アプリ言語のパッケージ管理 (npm, pip, gem 等) とは別に、OS パッケージにもバージョン固定の概念があります。

ターミナル

# apt で特定バージョン指定 sudo apt install -y nginx=1.24.0-2ubuntu7 # apt-mark で自動更新除外 sudo apt-mark hold nginx

本番では「予期せぬ自動アップグレードでアプリが動かなくなる」事故を避けるため、明示的に hold したり、Docker image のタグを固定したりします。

本番サーバーで apt upgrade を素朴に流すと、カーネルや依存ライブラリまで更新されてアプリが落ちる可能性があります。対象を絞って apt install -y --only-upgrade <pkg> と書くか、Ansible のような構成管理ツールで明示管理するのが現代的です。

言語別パッケージ管理との違い

OS パッケージ管理は「OS 全体に 1 つだけ」の管理で、npm / pip / cargo のような言語別パッケージ管理とは別物です。両者を混在させない方針が安全です。たとえば Python ライブラリは OS の apt install python3-requests で入れるよりも、pip install (venv / poetry / uv 経由) で入れる方がアプリのバージョン管理が楽になります。

よくある間違い

  • apt update を忘れて apt install し、古いパッケージが入る
  • Dockerfile で apt install のたびに RUN を分けてレイヤが太る
  • sudo を付け忘れて Permission denied (ローカル PC で root 権限がない場合)
  • pip install を root 権限で全体に入れて言語環境を壊す (venv を使う)

やってみよう

このレッスンは概念中心のため演習はありません。次の練習をお勧めします。

  • 手元の OS (Ubuntu / mac / Alpine) でパッケージマネージャを確認する
  • 自分が普段使うツール (curl / jq / git) のバージョンを 1 行で表示するスクリプトを書く

まとめ

  • Debian 系は apt、Red Hat 系は dnf、Alpine は apk、macOS は brew
  • update / install / remove / search が基本動詞
  • Dockerfile では update と install を 1 行にまとめ、キャッシュ削除でイメージを縮める
  • 本番ではバージョン固定や apt-mark hold で予期せぬ更新を防ぐ
  • 言語パッケージ (pip / npm) と OS パッケージは混ぜず、役割分担する

次のレッスン

次は cron で定期実行 で、Linuxでソフトウェアをインストール・アップデート・削除するためのパッケージ管理を学びます を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. パッケージ管理 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. パッケージ管理 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク