Linux: パッケージ管理 — apt / dpkg / snapとソフトウェアインストール
Linuxでは、Webサイトを訪れてexeファイルをダウンロードする必要はありません — パッケージマネージャーが1コマンドでインストールを処理します。ディストリビューションによってパッケージマネージャーは異なりますが、核心概念は同じです。
📋 前提条件:まず以下を完了していること
- レッスン17:プロセス管理
1. このレッスンで学ぶこと
- apt:update/install/remove/search
- dpkg:ローカルdebパッケージのインストール
- PPAサードパーティリポジトリの追加
- snap/flatpak:コンテナ化パッケージ
- pip/npm/cargo:言語レベルのパッケージマネージャー
2. Nginxをインストールするストーリー
(1) 悩み:WindowsではソフトのインストールがWeb検索→ダウンロード→ダブルクリック→次へ連打
小明はUbuntuにNginxをインストールする必要があり、本能的にブラウザを開いて「nginx download」と検索しました。
(2) aptなら1行で完了
ボブが言いました:「UbuntuにNginxを入れるなら、1コマンドだよ。」
sudo apt update
sudo apt install nginx -y
30秒でNginxがインストール完了 — 依存関係は自動処理、サービスファイルは作成済み、起動時自動起動も設定済み。
(3) 得られるもの:パッケージマネージャーがインストール方法を変えた
小明はaptがソフトをインストールするだけでなく、すべての依存関係を自動処理することを発見しました。もう手動でexeやdmgファイルをダウンロードすることは二度とありません。
3. 知識ポイント
(1) apt — Debian/Ubuntuパッケージマネージャー
# 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パッケージのインストール
# 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
# 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 — コンテナ化パッケージ
# 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) 言語レベルのパッケージマネージャー
# 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基本操作
# 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
出力:
TEXTHit: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でローカルパッケージをインストール
# 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をインストール
# 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
出力:
TEXTHit: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パッケージを管理
# 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
出力:
TEXTCollecting 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) ▶ サンプル:インストール済みパッケージのパスを確認
# 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開発環境をゼロから構築
#!/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 updateとapt upgradeの違いは? A:apt updateはローカルのパッケージインデックス(利用可能なパッケージとバージョンのリスト)を更新します。apt upgradeは実際にインストール済みパッケージを新しいバージョンにアップグレードします。upgradeの前に必ずupdateを実行してください。
Q:
apt removeとapt 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でインストールします。
📖 まとめ
- Debian/Ubuntu:
apt install/remove/purge/update/upgrade - ローカルパッケージ:
dpkg -iで.debをインストール、apt install -fで依存関係を修復 - サードパーティリポジトリ:
add-apt-repository ppa:xxx/yyy - 言語レベルパッケージ:
pip install(Python)、npm install(Node.js) apt autoremoveで不要な依存関係をクリーンアップ
📝 練習問題
- 基本(難易度 ⭐):aptでhtopとtreeをインストールし、インストールを確認した後、
dpkg -Lでhtopがインストールしたファイルを確認する - 中級(難易度 ⭐⭐):
apt search "database"でデータベース(PostgreSQLやSQLiteなど)を検索してインストールし、pipでPythonパッケージ(requestsやflaskなど)をインストールする - 上級(難易度 ⭐⭐⭐):git/vim/htop/nginx/nodejs/python3をインストールするワンクリック環境構築スクリプトを作成 — 各ツールが既にインストールされているか確認して重複を避け、最後にバージョン確認レポートを出力する