Linux: パッケージ管理 — apt / dpkg / snapとソフトウェアインストール

Linuxでは、Webサイトを訪れてexeファイルをダウンロードする必要はありません — パッケージマネージャーが1コマンドでインストールを処理します。ディストリビューションによってパッケージマネージャーは異なりますが、核心概念は同じです。

📋 前提条件:まず以下を完了していること

1. このレッスンで学ぶこと


2. Nginxをインストールするストーリー

(1) 悩み:WindowsではソフトのインストールがWeb検索→ダウンロード→ダブルクリック→次へ連打

小明はUbuntuにNginxをインストールする必要があり、本能的にブラウザを開いて「nginx download」と検索しました。

(2) aptなら1行で完了

ボブが言いました:「UbuntuにNginxを入れるなら、1コマンドだよ。」

BASH
sudo apt update
sudo apt install nginx -y

30秒でNginxがインストール完了 — 依存関係は自動処理、サービスファイルは作成済み、起動時自動起動も設定済み。

(3) 得られるもの:パッケージマネージャーがインストール方法を変えた

小明はaptがソフトをインストールするだけでなく、すべての依存関係を自動処理することを発見しました。もう手動でexeやdmgファイルをダウンロードすることは二度とありません。


3. 知識ポイント

(1) apt — Debian/Ubuntuパッケージマネージャー

BASH
# Update package source lists
sudo apt update

# Upgrade all installed packages
sudo apt upgrade -y

> 💡 ヒント:`apt update && apt upgrade -y`はシステム保守の黄金コンビ — `update`がパッケージソースリストを更新し、`upgrade`がインストール済みパッケージをアップグレードします。新しいソフトをインストールする前に必ず`update`を実行してください。そうしないと最新版が見つからない場合があります。

# Install software
sudo apt install nginx -y
sudo apt install curl wget git vim -y    # Install multiple at once

# Remove software
sudo apt remove nginx                    # Keep config files
sudo apt purge nginx                     # Delete config files too

# Search
apt search "web server"
apt show nginx                           # View package info

# Clean up
sudo apt autoremove                      # Remove unneeded dependencies
sudo apt autoclean                       # Clean downloaded cache

(2) dpkg — ローカルdebパッケージのインストール

BASH
# Install a local .deb file
sudo dpkg -i package.deb

# If dependencies are missing, fix with apt
sudo apt install -f

# View installed packages
dpkg -l | grep nginx
dpkg -L nginx                           # View files installed by the package

# Remove
sudo dpkg -r package_name               # Remove
sudo dpkg -P package_name               # Purge (including config files)

(3) ソフトウェアソースとPPA

BASH
# Package source list
cat /etc/apt/sources.list

# Add a PPA (Personal Package Archive)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12

# Ubuntu software source priority order
# 1. /etc/apt/sources.list
# 2. /etc/apt/sources.list.d/*.list

(4) snap/flatpak — コンテナ化パッケージ

BASH
# snap (built into Ubuntu)
snap find "code"                         # Search
sudo snap install code --classic         # Install VS Code
sudo snap install lxd                    # Install LXD
sudo snap refresh                        # Update all snaps
sudo snap remove code                    # Remove

# snap features: auto-update, sandbox isolation, cross-distribution

ℹ️ 注意:apt、snap、flatpakは3つの異なるパッケージングソリューション — aptはネイティブシステムパッケージをインストール(最高パフォーマンス、最軽量)、snap/flatpakはコンテナ化パッケージ(より良い分離、自動更新、ただし起動がやや遅くディスク使用量大)。日常的にはaptを優先し、クロスディストリビューションサポートやサンドボックス分離が必要な場合にsnap/flatpakを選択してください。

(5) 言語レベルのパッケージマネージャー

TEXT
# Python
pip install requests                     # Install Python package
pip install -r requirements.txt          # Install from file
pip list                                 # List installed packages
pip uninstall requests                   # Uninstall
pip freeze > requirements.txt            # Export dependencies

# Node.js
npm install express                      # Install package
npm install -g typescript                # Global install
npm list                                 # List installed packages
npx create-react-app my-app              # Run without installing

# Rust
cargo install ripgrep                    # Install tool
cargo add serde                          # Add dependency to project

(6) ▶ サンプル:apt基本操作

BASH
# 1. Update package sources
sudo apt update

# 2. Install common dev tools
sudo apt install -y build-essential curl wget git vim htop

# 3. Search for a package
apt search "text editor" | grep -i "vim\|nano"

# 4. View package info
apt show htop

# 5. Remove
sudo apt remove htop
sudo apt autoremove    # Clean up unneeded dependencies

出力:

TEXT
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Fetched 119 kB in 1s
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  build-essential curl wget git vim htop
0 upgraded, 6 newly installed, 0 to remove
Need to get 12.3 MB of archives.
Setting up build-essential (12.9ubuntu3) ...
Setting up curl (7.81.0-1) ...
vim - Vi IMproved - enhanced vi editor
htop - interactive processes viewer
Package: htop
Version: 3.0.5-7build2
Priority: optional
Section: utils
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  htop
0 upgraded, 0 newly installed, 1 to remove
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  libhwloc5
0 upgraded, 0 newly installed, 1 to remove

(7) ▶ サンプル:dpkgでローカルパッケージをインストール

BASH
# Download VS Code .deb package
wget https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 -O code.deb

# Install
sudo dpkg -i code.deb

# If dependency issues are reported, fix them
sudo apt install -f

# View files installed by VS Code
dpkg -L code | head -20

出力:

TEXT
--2026-07-07 10:23:01--  https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64
Resolving code.visualstudio.com... 20.190.159.4
HTTP request sent, awaiting response... 302 Found
Length: 95000000 (90M) [application/octet-stream]
Saving to: 'code.deb'
code.deb          100%[==========>] 90.51M  5.2MB/s    in 18s
Selecting previously unselected package code.
Setting up code (1.89.1-1716721786) ...
/usr/share/code/code
/usr/share/code/resources/app/package.json
/usr/share/code/resources/app/product.json
/usr/bin/code
/usr/share/applications/code.desktop
/usr/share/icons/hicolor/512x512/apps/code.png

(8) ▶ サンプル:PPAを追加して新しいPythonをインストール

BASH
# Ubuntu 22.04 default is Python 3.10; to install Python 3.12, you need a PPA
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-distutils

# Verify
python3.12 --version

出力:

TEXT
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Get:3 http://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease [23.8 kB]
Fetched 23.8 kB in 1s
Reading package lists... Done
The following NEW packages will be installed:
  python3.12 python3.12-venv python3.12-distutils
Setting up python3.12 (3.12.4-1+jammy1) ...
Python 3.12.4

(9) ▶ サンプル:pipでPythonパッケージを管理

BASH
# Install Flask web framework
pip install flask

# Create a dependency list
pip freeze > requirements.txt

# Install the same dependencies on another machine
pip install -r requirements.txt

# Install to user directory (no sudo needed)
pip install --user black

出力:

TEXT
Collecting flask
  Downloading flask-3.0.3-py3-none-any.whl (101 kB)
Installing collected packages: flask
Successfully installed flask-3.0.3
flask==3.0.3
werkzeug==3.0.3
jinja2==3.1.4
Collecting black
  Downloading black-24.4.2-py3-none-manylinux1_x86_64.whl (2.2 MB)
Installing collected packages: black
Successfully installed black-24.4.2

(10) ▶ サンプル:インストール済みパッケージのパスを確認

BASH
# View which directories nginx was installed to
dpkg -L nginx | head -10

# View nginx config files
dpkg -L nginx | grep -E "\.conf$"

# Find which package a command belongs to
dpkg -S /usr/bin/htop
# htop: /usr/bin/htop

# Reverse — find which package a file belongs to
dpkg -S /etc/nginx/nginx.conf
# nginx: /etc/nginx/nginx.conf

出力:

TEXT
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
/etc/nginx/sites-enabled/default
/usr/sbin/nginx
/var/www/html/index.html
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
htop: /usr/bin/htop
nginx: /etc/nginx/nginx.conf

(11) ▶ 総合例:Web開発環境をゼロから構築

BASH
#!/bin/bash
# setup-web-env.sh - Set up a Web development environment from scratch

set -e

echo "=== Setting Up Web Development Environment ==="

# 1. Update system
echo ">>> Updating package sources..."
sudo apt update
sudo apt upgrade -y

# 2. Install basic tools
echo ">>> Installing basic tools..."
sudo apt install -y build-essential curl wget git vim htop net-tools

# 3. Install Nginx
echo ">>> Installing Nginx..."
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

# 4. Install Node.js
echo ">>> Installing Node.js 20..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

> ⚠️ 警告:`curl | bash`パターン(インターネットからスクリプトをダウンロードして直接実行)はサプライチェーン攻撃のリスクがあります — サーバーが侵害されたりDNSがハイジャックされた場合、悪意のあるコードが実行される可能性があります。本番サーバーでは、スクリプトを先にダウンロードして内容を確認してから実行するか、ディストリビューションの公式リポジトリを優先してください。

# 5. Install Python 3 + pip
echo ">>> Installing Python 3..."
sudo apt install -y python3 python3-pip python3-venv

# 6. Install Docker
echo ">>> Installing Docker..."
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

# 7. Verify
echo ""
echo "=== Environment Verification ==="
echo "Nginx: $(nginx -v 2>&1)"
echo "Node.js: $(node --version)"
echo "npm: $(npm --version)"
echo "Python: $(python3 --version)"
echo "Git: $(git --version)"
echo "Docker: $(docker --version)"

echo ""
echo "✅ Environment setup complete! Some changes (like Docker) require re-login to take effect."

❓ よくある質問

Q: apt updateapt upgradeの違いは? A: apt updateはローカルのパッケージインデックス(利用可能なパッケージとバージョンのリスト)を更新します。apt upgradeは実際にインストール済みパッケージを新しいバージョンにアップグレードします。upgradeの前に必ずupdateを実行してください。

Q: apt removeapt purgeの違いは? A: apt removeはパッケージをアンインストールしますが設定ファイルは保持します。apt purgeはパッケージと設定ファイルの両方を削除します。完全に削除したい場合はpurgeを使用してください。

Q: パッケージがインストールしたファイルを確認するには? A: dpkg -L package_nameでパッケージがインストールした全ファイルを一覧表示できます。dpkg -S /path/to/fileは逆に、ファイルがどのパッケージに属するかを検索します。

Q: PPAは安全ですか? A: PPAはサードパーティが保守するリポジトリで、公式リポジトリよりセキュリティレベルが低いです。deadsnakes、nginx、git-coreなどの有名プロジェクトの公式PPAのみ追加してください。不明なPPAはセキュリティリスクがあります。

Q: 依存関係の競合への対処法は? A: まずsudo apt install -fで修復を試みてください。失敗する場合はPPAの競合を確認(競合するPPAを無効化)してください。最終手段として.debパッケージを手動ダウンロードしてdpkg -iでインストールします。


📖 まとめ


📝 練習問題

  1. 基本(難易度 ⭐):aptでhtopとtreeをインストールし、インストールを確認した後、dpkg -Lでhtopがインストールしたファイルを確認する
  2. 中級(難易度 ⭐⭐)apt search "database"でデータベース(PostgreSQLやSQLiteなど)を検索してインストールし、pipでPythonパッケージ(requestsflaskなど)をインストールする
  3. 上級(難易度 ⭐⭐⭐):git/vim/htop/nginx/nodejs/python3をインストールするワンクリック環境構築スクリプトを作成 — 各ツールが既にインストールされているか確認して重複を避け、最後にバージョン確認レポートを出力する
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%