たくろぐ!

世界一のチラ裏

パッケージ管理ツールについて調べてみた

ワイ将、Ubuntuの使い手なり

Windowsほしいよおーーーーー。

VSCodeも使い方わからないし、tigもわからないし、postmanもとりあえずインスコしただけなので

買って満足して使わなくなること請け合いなので買わないけどさ。

f:id:takkuso:20190727160623p:plain

そんなもの買う余裕もないし。

ということでMacUbuntu環境ドッキングしてMacの恩恵0な使い方をしている異端児として

Ubuntuのパッケージ管理ツールをまとめてみる。

余計なことも書いてあるかもしれないけど大目にみろよな!

Debian系のパッケージツール

世の中のWebサービスの大半でLinux系のサーバOSが利用されている。

ワイの仮想環境はUbuntuというディストリビューションを利用しているのだが

このOSはDebianの系譜を汲んでいる。

このパッケージ管理ツールは歴史的にdpkg(たぶんDebianPacKaGeの意)→apt-get(apt)→aptitudeの順に新しい(気がする)。

本家

dpkg

パッケージ管理をしないツール。

なので本来ここでは紹介すべきではないが一応歴史的経緯の説明がてら。

.debの拡張子を持ったパッケージをインストールしたりするのに使われる。

インストールコマンドは以下。

dpkg -i パッケージ名

apt-get

APT(Advanced Packaging Tool)のCLI実装のこと(だと思う、誰か助けて)。

公式には apt-get for retrieval of packages and information about them from authenticated sources and for installation, upgrade and removal of packages together with their dependencies (apt-getはパッケージそのものや信頼されているソースからのパッケージに関する情報の検索や、依存関係のあるパッケージ同士をインスコしたりアップグレードしたりアンスコしたりするためのものだ)
とある。

とにかくプログラムに何かパッケージをインストールしとけ!とおこられたときに

(sudo) apt-get install パッケージ名 すればだいたいなんとかなる(持論)。

apt

上でダメなら apt install パッケージ名 をやるのも手。

公式には apt is a high-level command-line interface for better interactive usage (aptはよりよい対話的用途のためのハイレベルなコマンドラインインターフェースだ)

とあって、対話的にパッケージを管理できるのが売りのようだ。

こちらもAPTのCUI実装のようなものなのでどちらを使っても同一管理になってるはず。

teratail.com

aptitude

よくわからないが上のやつらよりも拡張性が高そう(感想)。

LPICレベル1にもばちこり出題されていたが今や下火になってるらしい(噂)。

RedHat系のパッケージツール

rpm

dpkg のようにパッケージを管理しないツール。

依存関係を含めて管理したい場合は後述の yum を使う。

yum

CentOSとか使ってれば基本的にこれ使うと思う。

yum install パッケージ名 で依存関係も含めてパッケージをインスコしてくれる。

CentOS卒業マンなので細かい説明は以下を参照してください。

eng-entrance.com

その他のパッケージ管理ツール

npm

Node.jsのパッケージ管理ツール。

結構よく出てくる(体感)。

yarn

facebook謹製のパッケージ管理ツール。

なんかナウいらしい(雑)。

紛らわしいもの

紛らわしいと言うより初心者を混乱させる系のツール。

gem

Rubyのライブラリであるgemを管理するためのツール。

依存関係は解決しない(たぶん)。

bundler

gem(ライブラリ)の依存関係を管理してくれるツール。

このライブラリのこのバージョンとこのライブラリのこのバージョンは同時に動かすとバグるぜというのを避けてくれる。

pip

Pythonのライブラリ管理ツール。

Rubyで言うところのgemとbundlerの機能を持つ(と思う)。

依存関係を管理するための設定ファイルを用意してあげればpip install で依存関係含めてインスコしてくれるっぽい。

rbenv

Rubyのバージョン管理ツール。

いまやプロジェクト配下にディレクトリを切ってそこにgemをインストールしてプロジェクト単位でgemを管理するという流れが当たり前になっているが、

昔はRuby自体がgemを管理していて、Rubyのバージョンを切り替えるごとにgemのバージョンも変わるようになっていた。

プロジェクトのルートディレクトリ配下に .ruby-version 置いてそのプロジェクトで使うrubyのバージョンを定義しておき、

ルートディレクトリで bundle install --path vendor/bundle すれば vendor/* にgem群が入って他のプロジェクトの環境を汚すことはなくなる。

バージョン管理というかバージョン切り替えツールくらいの感じ。

*env系が増えに増えて何が何やら、、、

RubyPythonPerlもNode.jsも使うとかなら anyenv 入れてから rbenv pyenv plenv ndenv 入れるみたいな流れになると思う。

まとめ

最後のやつこれ全部覚えなければいけないんですか?

はいそうです、フルスタック名乗るくらいならね(真顔)

発狂してもいいですか?

オワオワリ。