技術系(Tips)
PR

yumからdnfへ!Linuxパッケージ管理の進化と移行のメリット

saratogax
記事内に商品プロモーションを含む場合があります

「昔はバリバリLinuxを触っていたけれど、最近はDockerばかりで……」という方も多いのではないでしょうか。

ふと新しいOS環境(RHEL 8以降やAmazon Linux 2023など)に触れたとき、いつものように yum を叩こうとして「今は dnf が推奨だよ」と言われ、驚いた方もいるはず。

今回は、かつての yum ユーザーに向けて、なぜ dnf への交代が起きたのか、そのメリットと基本コマンドを整理してお届けします。

なぜyumはdnfへと進化したのか?

かつてのRed Hat系ディストリビューションにおいて、パッケージ管理の王道といえば yum でした。

しかし、技術の進歩とともにいくつかの課題が浮き彫りになってきました。

yumが抱えていた限界

yum は長年愛されてきましたが、大規模なリポジトリを扱う際の メモリ消費量の多さ や、依存関係の解決スピードの遅さ がボトルネックとなっていました。

また、コードベースが古く、Python 3への移行が困難だったことも大きな要因です。

dnf(Dandified YUM)の登場

これらを解決するために開発されたのが dnf です。

内部的に C言語ベースのライブラリ(libsolv)を採用することで、依存関係の計算を劇的に高速化。

現代的なシステムに最適化された「次世代のyum」として、Fedoraを皮切りにRHEL 8以降の標準となりました。

dnfに乗り換えるメリットと主な変更点

「使い勝手が変わるのが面倒」と思われがちですが、dnf への移行はメリットしかありません。

圧倒的なスピードとメモリ効率

dnf の最大の恩恵は、パッケージの検索や依存関係の計算が非常に速くなったことです。

特にリポジトリのメタデータを取得・解析する際の挙動がスムーズで、メモリ消費も抑えられています。

賢くなった依存関係の解決と掃除

dnf は依存関係の処理がより厳密かつ柔軟になりました。

特筆すべきは、不要になったパッケージを削除する機能です。

dnf autoremove コマンドを使えば、以前のインストール時に一緒に入ったものの、今はもう必要ない「孤立したパッケージ」を簡単に見つけて一掃できます。

yumコマンドはもう使えないの?

結論から言うと、現在でも多くの環境で yum と打てば動作します。

シンボリックリンクによる後方互換性

現在のRHEL系OSでは、/usr/bin/yum/usr/bin/dnf へのシンボリックリンクになっていることがほとんどです。

つまり、指が yum を覚えてしまっている人でも、無意識のうちに裏側では dnf の恩恵を受けているのです。

ただし、シェルスクリプトなどを新しく作成する場合は、将来性を考えて dnf と記述するのがスタンダードです。

今すぐ使える!dnfの基本コマンド対照表

yum を使っていた方なら、学習コストはほぼゼロです。

主なコマンドの対応表を確認しておきましょう。

操作yum コマンドdnf コマンド
インストールyum installdnf install
アップデートyum updatednf upgrade
アンインストールyum removednf remove
パッケージ検索yum searchdnf search
履歴の確認yum historydnf history
不要な依存の削除dnf autoremove
※表は横スクロールできます

dnf では update よりも upgrade という名称が推奨されるようになりました(動作はほぼ同じです)

Docker時代の新常識!イメージ軽量化のための「お掃除」テクニック

かつて物理サーバを運用していた頃はあまり気にしなかった「パッケージマネージャのキャッシュ」ですが、Dockerイメージを作成する際にはイメージサイズに直結する重要なポイントとなります。

なぜキャッシュ削除が必要なのか?

Dockerは命令(RUNなど)ごとにレイヤーを積み重ねる仕組みです。

dnf install を実行すると、パッケージ本体だけでなく、リポジトリのインデックス(メタデータ)などの一時ファイルが大量に生成されます。

これらを放置すると、中身は空っぽに近いのにイメージサイズだけが数百MB膨れ上がってしまうのです。

これが定石!Dockerfileでの書き方

dnf を使ってパッケージをインストールする際は、「同じ RUN 命令内」でインストールからキャッシュ削除までを一気に行うのが現代のエンジニアの嗜みです。

# 現代の Dockerfile でのパッケージインストール例
RUN dnf install -y httpd \
    && dnf clean all \
    && rm -rf /var/cache/dnf
  • dnf clean all: dnfが管理するキャッシュ(ダウンロードしたrpmファイル等)をクリアします。
  • rm -rf /var/cache/dnf: clean all で消しきれない細かなメタデータまで物理的に削除し、レイヤーを最小限に抑えます。

かつて yum clean all だけで済ませていた方も、dnf 時代はこの「合わせ技」をセットで覚えておくと、よりクリーンでプロフェッショナルなイメージを作成できます。

まとめ:現代のパッケージ管理はもっと快適に

Dockerなどのコンテナ技術が普及した今、私たちがOSパッケージ管理コマンドを直接叩く機会は減ったかもしれません。

しかし、Dockerfileの RUN 命令の中で書く一行は、今や dnf が主役です。

「昔取った杵柄」に少しだけアップデートを加えて、現代の快適なパッケージ管理を使いこなしていきましょう!

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました