
Ubuntu環境(Ubuntu 24.04 LTS / 26.04 LTS 等)を安全かつ快適に運用し続けるためには、OS上のパッケージを定期的に最新状態へアップデートすることが不可欠です。
しかし、ターミナルで作業していると「apt update と apt upgrade の違いは何なのか」「毎回どちらを実行すればよいのか」「保留(kept back)と表示されたらどうすればいいのか」「途中でロックエラーが出た」など、疑問やトラブルに直面することも少なくありません。
特にサーバー運用やWSL2環境では、意図しないパッケージの削除や再起動の必要性を見落とすと、動作不良やサービスの停止につながる恐れがあります。
この記事では、日常のメンテナンスで安全にパッケージを更新する基本3ステップをはじめ、コマンドごとの役割の違い、Snapパッケージの更新、そして現場で頻発するエラーの具体的な解消法まで分かりやすく解説します。
この記事で行うこと
前提条件・対象読者
【早見表】Ubuntuアップデート主要コマンド一覧(チートシート)
日常的なメンテナンスで使用する代表的なアップデートコマンドの一覧です。
| 操作・目的 | 実行コマンド | 主な役割・特徴 |
|---|---|---|
| パッケージ一覧の更新 | sudo apt update | リポジトリから最新のメタデータ一覧を取得(更新はしない) |
| インストール済み更新 | sudo apt upgrade -y | 既存パッケージを最新版へ安全に更新 |
| 依存関係を含む更新 | sudo apt full-upgrade -y | 依存関係の変更(新パッケージ追加や不要削除)を伴う更新 |
| 一括アップデート | sudo apt update && sudo apt upgrade -y | 一覧取得から更新までを1行で連続実行 |
| 不要パッケージの削除 | sudo apt autoremove -y | 依存関係から外れて孤立した古いパッケージを削除 |
| パッケージキャッシュ掃除 | sudo apt autoclean | リポジトリから消えた古いdebキャッシュファイルを削除 |
| Snapパッケージの更新 | sudo snap refresh | FirefoxなどSnap形式で導入されたアプリを一括更新 |
| 再起動が必要かの確認 | test -f /var/run/reboot-required && echo "要再起動" | カーネル更新等に伴う再起動フラグの有無を確認 |
1. 基本:パッケージを安全にアップデートする3ステップ
日常的なメンテナンスでは、以下の3ステップを順番に実行するのが最も安全で確実な手順です。
Step 1: パッケージリストの最新化(sudo apt update)
まずは、利用可能な最新パッケージの一覧情報をリポジトリサーバーから取得します。
sudo apt update
このコマンドは「どのパッケージに新しいバージョンが出ているか」のカタログ情報をPC内にダウンロードするだけであり、この段階ではシステム上のソフトウェアはまだ何も書き換わりません。
実行後、画面の末尾に「X packages can be upgraded.(X個のパッケージが更新可能です)」というメッセージが表示されます。更新対象の具体的なパッケージ名を確認したい場合は、案内通りに以下のコマンドを実行します。
apt list --upgradable
Step 2: インストール済みパッケージの更新(sudo apt upgrade)
カタログ情報を最新にした後、実際にインストール済みソフトウェアを最新バージョンへ更新します。
sudo apt upgrade -y
-y オプションを付与すると、更新前の確認プロンプト(Do you want to continue? [Y/n])に対して自動的に yes と応答して処理を進めます。慎重に進めたい場合や、どのパッケージが更新されるかダウンロード容量を目視確認したい場合は、-y を外して実行してください。
Step 3: 不要になった古いパッケージとキャッシュの掃除
アップデートを繰り返していると、過去のバージョンで使われていたライブラリや古いカーネルなど、どのソフトウェアからも参照されなくなった不要なパッケージがストレージ内に蓄積していきます。
以下のコマンドを実行して、ディスク容量を安全に解放します。
# 不要になった依存パッケージの自動削除
sudo apt autoremove -y
# 過去バージョンの不要なdebキャッシュファイルの削除
sudo apt autoclean
これにより、システムを常にクリーンで容量の圧迫がない状態に維持できます。
便利なワンライナー(1行でまとめて実行する)
日々のルーチン作業として手早く終わらせたい場合は、&&(直前のコマンドが成功したら次を実行する)演算子を使い、1行でまとめて実行するのが定番です。
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
2. 知っておくべき違い:update、upgrade、full-upgradeの違い
Ubuntuのパッケージ管理では似たような名前のコマンドがいくつか存在します。挙動の違いを正しく把握しておくことで、トラブルを未然に防ぐことができます。
apt update と apt upgrade の違い
必ず update を実行してから upgrade を行う必要があります。update を行わずに upgrade を実行しても、手元のカタログが古いため新しい更新が存在することに気付けません。
apt upgrade と apt full-upgrade の違い
通常は apt upgrade を常用し、後述する「パッケージが保留(kept back)される」場合や、カーネル関連のメジャーな仕様変更を適用したい場合に apt full-upgrade を検討します。
OSメジャーアップグレード(do-release-upgrade)との違い
日々の apt upgrade は、現在のUbuntuバージョン(例えばUbuntu 24.04の中でのマイナーアップデート)を最新に保つための操作です。
Ubuntu 24.04からUbuntu 26.04へOS自体のディストリビューションバージョンを刷新したい場合は、apt ではなく専用コマンド sudo do-release-upgrade を使用します。OS全体のメジャーアップグレード手順については、記事末尾の関連記事を参考にしてください。
3. Snapパッケージの更新手順(snap refresh)
近年のUbuntu(デスクトップ版・サーバー版問わず)では、従来のAPTパッケージに加えて「Snap(スナップ)」と呼ばれるコンテナ型のパッケージ形式が標準で採用されています。例えば、FirefoxやChromium、各種CLIツールなどがSnap経由で管理されています。
SnapパッケージはAPTの管理対象外となっているため、sudo apt upgrade を実行しても更新されません。
Snapパッケージを最新化したい場合は、以下のコマンドを実行します。
sudo snap refresh
更新可能なSnapパッケージの有無だけを確認したい場合は、以下を実行します。
snap refresh --check
なお、Snapはデフォルトでバックグラウンドでの自動更新機能が備わっていますが、ターミナルから明示的に即時更新したい場合に sudo snap refresh を利用します。
4. アップデート時によくあるトラブル・エラーと対処法
Ubuntuのアップデート中に頻出するエラーと、その安全な解決手順をまとめました。
① ロックエラー(Could not get lock /var/lib/dpkg/lock-frontend)
アップデートを実行しようとした際、以下のようなエラーメッセージが表示されてコマンドが失敗することがあります。
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1234 (apt-get)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
原因
Ubuntuがバックグラウンドで自動セキュリティ更新(unattended-upgrades)を実行している最中であるか、別のターミナルウィンドウで apt コマンドが実行中のため、競合を防ぐためのファイルロックがかかっています。
正しい対処法
無理にロックファイルを削除(rm)してはいけません。データベースが破損する原因になります。
まずは以下のコマンドで、どのプロセスがロックを保持しているかを確認します。
ps aux | grep -i -E "apt|dpkg"
バックグラウンドで unattended-upgrades や apt が動作している場合は、数分待機してから再度コマンドを実行するのが最も安全です。もしプロセスが完全にスタック(ハングアップ)していることが明らかな場合のみ、表示されたプロセスID(PID)を終了させます。
# 該当のプロセスIDを指定して安全に終了
sudo kill 1234
② パッケージが保留される(The following packages have been kept back)
sudo apt upgrade を実行した際に、エラーにはならないものの「以下のパッケージは保留されました」と表示されてアップデートされない現象が発生することがあります。
The following packages have been kept back:
python3-problem-report ubuntu-release-upgrader-core ...
原因
主な原因はUbuntuの標準機能である「段階的更新(Phased Updates)」です。Ubuntuでは、新バージョン公開直後にすべてのユーザーへ一斉配信せず、一部のユーザーから徐々にロールアウトすることで、未知の不具合があった場合に影響を最小限に抑える安全策をとっています。
対処法
基本的には数日待てば自然とロールアウト対象となり、通常の sudo apt upgrade で更新されるようになります。
もし脆弱性の修正などですぐに強制適用したい場合は、該当のパッケージ名を個別に指定してインストールするか、依存関係の再計算を伴う full-upgrade を実行します。
# 個別に指定して強制的に更新する場合
sudo apt install python3-problem-report
# 依存関係を再計算して一括更新する場合
sudo apt full-upgrade -y
③ アップデート後にOS再起動が必要か確認する方法
Linuxカーネル(linux-image-*)や基本共有ライブラリ(systemd, libc6 等)がアップデートされた場合、変更を完全に反映させるにはOSの再起動が必要です。
再起動が必要な状態になっているかどうかは、システム内に /var/run/reboot-required というファイルが生成されているかで確認できます。
# 再起動が必要かどうかを1行で判定
test -f /var/run/reboot-required && echo "【要再起動】システムを再起動してください" || echo "再起動は不要です"
再起動を要求している具体的なパッケージ名一覧を確認したい場合は、関連ファイルを読み込みます。
cat /var/run/reboot-required.pkgs
再起動が必要と判定された場合は、作業中のデータを保存した上で以下のコマンドで再起動を行います。
sudo reboot
④ ハッシュサム不一致エラー(Hash Sum mismatch)
sudo apt update の実行中に Hash Sum mismatch エラーが発生することがあります。これは、手元に保存されているローカルキャッシュと、ミラーサーバー側のファイル情報が一時的に同期ズレを起こしていることが原因です。
古いリストキャッシュを一度全削除してから更新し直すことで簡単に解消できます。
# リストキャッシュを削除
sudo rm -rf /var/lib/apt/lists/*
# リポジトリ情報をクリーンに再取得
sudo apt update
5. セキュリティ更新を自動化する方法(unattended-upgrades)
定期的に手動でコマンドを実行するのが難しいサーバー環境や、常にセキュリティパッチを最新に保ちたい本番環境では、自動更新パッケージ unattended-upgrades を活用するのがおすすめです。
Ubuntuではデフォルトで自動セキュリティ更新が組み込まれており、夜間や指定した時間帯にバックグラウンドで脆弱性パッチを自動適用してくれます。
自動更新の詳細な設定手順や、勝手な自動再起動を防ぐ設定方法については、以下の解説記事で詳しく扱っています。
まとめ
Ubuntuの日常的なパッケージ更新は、基本のコマンドを正しい順序で実行し、エラー発生時の仕組みを理解しておくことで、安全かつ確実に行えます。
定期的なアップデートを日々の運用ルーチンに組み込み、セキュアで快適なUbuntu環境を維持してください。
次に読むおすすめ記事
Ubuntuの各種コマンド活用や環境構築、OSメジャーアップグレードの手順については、以下の記事もあわせて参考にしてください。
Linux全般の環境構築・サーバー運用の全体像を掴みたい方は、以下の総合ガイドが役立ちます。

UbuntuのOSバージョン自体を新しいLTSへ移行したい場合の詳細手順は、以下で解説しています。
各バージョンの公式サポート期限と移行ロードマップは、以下で一覧表にまとめています。

