CYBIRD Advent Calendar 2023 14日目担当の @tomoko_ishizaka です。
13日目は @cy-seiyan さんの「タイムアウトが頻発して泣きを見た話」でした。
是非こちらも合わせてご覧ください
概要
パッケージ(追加機能)をインストールする際、よくnpm install xxx
や、yum install xxx
のようなコマンドを実行します。
しかし、同様の使われ方をするコマンドとしてapt
やdnf
などもよく見かける上、今回は何を使えばいいのか毎回不明瞭なまま(手順書に言われるがまま)私も実行していました。
そこで改めて、これらのコマンドへの理解を深めるため、違いを調べてみました。
結論
欲しいパッケージが、どのOS用なのか、もしくはどの言語用なのかによって、適切なコマンドを使い分ける。
そもそもパッケージ管理コマンドとは
パッケージ管理コマンドとは、"実行ファイルや設定ファイルやライブラリを一括で管理するためのコマンド"です。
ライブラリ同士でバージョンの依存関係等がある場合、それらの整合性を保ちながらインストールやアップデートをする必要があり、それを簡単に実現するために、基本的にはパッケージ管理コマンドを使います。
参考:【パッケージ管理システムとは?】Linuxでのパッケージ管理の使い方まとめました
yum
を例に使い方と流れを説明しますと、
yum install xxx #指定したパッケージをインストール
yum list installed #インストールしたパッケージを一覧表示
yum update #アップデート可能なパッケージを全てアップデート
参考:YUM コマンドチートシート for Red Hat Enterprise Linux
このような感じで欲しいパッケージをインストールすることができます。
しかし、MacOSで上記を実行しようとすると、command not found: yum
と出てしまいます。
これは、yumというパッケージ管理ソフトがMacOS用ではなく、標準では搭載されていないからです。
(後述しますが、MacOSではHomebrewというパッケージ管理ソフトの利用が一般的です)
不適切なものを使うとどうなるか
では、間違って不適切なコマンドでインストールしようとしてしまった場合はどうなるのでしょうか。
結論としては、『command not found
』や、『Could not find a matching version of package
』系のエラーが出てインストールできないため、間違いに気づくことができます。
エラーの詳しい解説
command not found
-> コマンドが入っていないエラーです。インストールする必要があるか、そもそもOS的に別のコマンドが用意されている可能性があります。
Could not find a matching version of package
-> インストールしたいパッケージがないエラーです。パッケージ名が間違っているか、バージョンが対応していないか、インストールコマンドが間違っている可能性が高いです。
よく使うパッケージ管理コマンド一覧と概要
Linux(Red Hat系)
rpm、yum、dnf
※Red Hat系のLinuxではPRMパッケージが使われており、その管理がrpmコマンド。ただし、RPMパッケージの依存関係等は解決してくれないため、それも含めた統合管理がyumコマンド。このyumの後継コマンドが、dnf。使い方はyumもdnfもほぼ同じです。
Linux(Debian系)
dpkg、apt
※rpmとyumのように、dpkgがここのパッケージ管理、aptが統合管理を担います。
Mac
Homebrew
Windows
Winget、Chocolatey
※wingetの方があたらしく、Windows 10だとこちらが正式版になったとのこと。
JavaScript(Node.js)
npm、yarn
※package.jsonの内容をnpmコマンドでインストールできます。yarnはnpmより厳密なバージョン指定やインストール速度の速さ等の利点があります。
PHP
Composer
Python
pip
Ruby
gem
おわりに
理解する前はブラックボックスでしたが、理解してみればシンプルでした。
何をインストールしているのか、どこからしているのか、コードと睨めっこしていると見失いがちですが、現実世界で考えれば、どこの店で買うのか、どの道を通っていくのか、と一緒だなと感じました。
今後も、ただ受動的に打っているコマンドの理解を少しずつ深めていきたいです。
CYBIRD Advent Calendar 2023 、15日目は@kyukkyu81さんの「AIにニュースをシニカルに伝えてもらったら意外と興味深かった件」です。
お楽しみに!