概要
プログラミング初心者向けに、「パッケージマネージャ(パッケージ管理システム)」についてのまとめ。
また、「ライブラリ」「パッケージ」「モジュール」などの違いについても、ごく軽く触れる。
ざっくりと説明するため、厳密には語弊がある表現をするかもしれません。
パッケージマネージャとは
「パッケージマネージャ(パッケージ管理システム)」とは、簡単に言うと、
- インストールできるプログラムを検索する
- プログラムを簡単にインストールする/アンインストールする
- 「今、PCに何インストールしてたっけ?」を一覧ですぐに確認できる
などの、プログラムを簡単・便利に管理するツールのこと。
これらの 管理 =マネジメントを、「 パッケージ (または、ライブラリ)」という単位で行うので、 パッケージマネージャ と呼ぶ。
※「パッケージ」という言葉の説明は、後述する
「ソフトのインストール」と聞いたら、通常はWebやアプリストアで検索をして導入するイメージだが、パッケージマネージャを使う場合は、ターミナル等を使って、コマンド操作を利用する。
世の中には色んなパッケージマネージャが存在し、自分が開発で使う言語やOSに合わせて、専用のものを利用する。
インストール/アンインストールが簡単な理由
通常インストールする場合、
Webサイトからインストーラをダウンロード👉ダブルクリックしてインストール
という手順で、PCのどこかにソフトが導入されるが、インストールするソフトによって手順ややり方が変わることもあり、インストール場所もソフトでバラバラになる可能性がある。
しかし、パッケージマネージャなら、これがコマンド一行を叩くだけで完了する(場合によっては、更に PATH を通す作業が発生)し、格納場所も1箇所に集約される。
また、アンインストール時も、ソフトによってアンインストール方法が違うが、パッケージマネージャなら共通コマンドで名前を変えるだけで一発で削除できる。
パッケージ
パッケージは、色んな機能や処理がまとまったプログラムのかたまり。
おもちゃやお菓子が袋に詰まったものを「パッケージ商品」と言うように、処理がたくさん詰まって1つの便利な商品となったプログラムみたいなイメージ。
こういったツールで管理される大体のパッケージには、実際に利用するプログラムの他に、「パッケージ名」「開発者名(個人・団体)」「依存関係」などの情報も一緒に含まれている(そういう概要情報がまとまったファイルに記載されている)。
他にも、「ライブラリ」「モジュール」という横文字が出てくることがあるが、要するに、 プログラムのかたまりに対する呼び方 に種類があると思えば、今は一旦OK。具体的には下記のようなイメージ
ライブラリ > パッケージ > モジュール という関係になっている。
各言語や技術における、これらの言葉の定義は、また別の機会に触れていく。
「依存関係」って何?
あるパッケージ(or ライブラリ)が動作するために必要な、中で動く他の細かいソフトウェアのこと。
つまり、パッケージの中のプログラムは 100% オリジナルではないことが多く、既存のプログラムや技術を色々と組み合わせながら動いているケースがほとんど。
それら他のソフトウェアも一緒にダウンロードしたり、バージョンを勝手に更新してくれたりして、パッケージ全体として正常に動くように解決することを 「依存関係の解決」 と言う。
「依存関係の解決」をしてくれる所も、パッケージマネージャの大きな特徴の1つ。
大体は Webサイトがあって、パッケージ検索する画面が用意されている
パッケージマネージャ自体は、コンピュータ上でターミナルなどを使ってコマンド打って使用するのがほとんどだが、多くはWebサイトも用意されていて、主にパッケージ検索をする画面などが用意されている。
パッケージ検索は、コマンドでも可能だが、Webの方が見やすいので使われることも多い。
開発で使われる代表的なパッケージマネージャ
パッケージマネージャ | 言語/OS | 概要 |
---|---|---|
Homebrew | macOS Linux |
コンピピュータにインストールするソフトを管理するパッケージマネージャ |
npm | JavaScript | 「Node.js」というソフトをインストールすると同時に導入されるパッケージマネージャ 他に yarn なども人気 |
pip | Python | Python の標準的なパッケージマネージャ Condaと違いマシン単位で依存関係を管理する |
Conda | Python | 科学計算のための Python プラットフォーム「Anaconda」の一部として提供されている Python パッケージマネージャ |
Composer | PHP | PHP の標準的なパッケージマネージャ |
PEAR | PHP | 以前まで PHP でよく利用されていたライブラリ提供サービス。PHP 7.4 から PEAR はデフォルトツールではなくなり、現在は Composer の方が標準的な立場になっている |
GoMod | Go | Go言語用のパッケージマネージャで、Goのプログラムとライブラリ(mod)の配布用標準フォーマットを提供 |
RubyGems | Ruby | Ruby 言語用のパッケージマネージャであり、Ruby のプログラムとライブラリ(gem)の配布用標準フォーマットを提供 |
Bundler | Ruby | こちらも Ruby パッケージマネージャだが、RubyGems では解決できない gem 同士の依存関係を解決したりするので、こっちがよく使われる。 Bundler自身は RubyGems で導入し、使用するには「Gemfile」(+Gemfile.lock)というファイルを用意する必要がある |
Pub | Dart | Dart言語製ソフトウェアプロジェクトの CUI のビルドツールであり、パッケージマネージャの機能をも持つ Pub の依存ライブラリのダウンロード先は Pub.dev |
Cargo | Rust | Rust 言語製ソフトウェアプロジェクト(crate)のCUIのビルドツールであり、パッケージマネージャの機能をも持つ Cargo の依存ライブラリのダウンロード先は crates.io |
CocoaPods | Objective-C Swift |
Objective-Cランタイムで動作するパッケージマネージャ RubyGems に影響を受けている |