Homebrew/rbenv/gem/Bundler ってなんじゃい

otomi 2019-07-14

それぞれどう違うのか説明できないですよね。 僕は説明できません。 ググってなんとなくてやっていたのでちゃんと理解したいと思います。

ちゃんと理解するとは

  • Qiita(いつもお世話になっています)などの複次情報ではなく、原典にあたる

  • 出典元を可能な限り明記する

なお、各々の利用方法の解説はしません。それぞれの違い、なぜ利用するのかを明らかにすることを本記事の目的とします。

概要

それぞれの公式サイトに書かれていることから、gem以外のHomebrew/rbenv/Bundlerの3つはすべてパッケージ管理システムと言われるものの一種のようです。

パッケージ管理システムとは、OSというひとつの環境で、各種のソフトウェアの導入と削除、そしてソフトウェア同士やライブラリとの依存関係を管理するシステムである。

wikipediaより。

Homebrew

公式サイト

brew.sh

概要 

brew(1) – The missing package manager for macOS — Homebrew Documentationより。

brew(1) – The missing package manager for macOS

_ package manager _と書かれています。

DESCRIPTION
Homebrew is the easiest and most flexible way to install the UNIX tools Apple didn’t include with macOS.

説明
Homebrewは、ApplemacOSに含まなかったUNIXツールをインストールするための最も簡単で最も柔軟な方法です。

ほうほう。macOSにプリインストールされていないUNIXツールをインストールするために便利なツールのようですね。

rbenv

公式サイト

github.comGithubのページだけかな。

概要

GitHub - rbenv/rbenv: Groom your app’s Ruby environmentより。 README.mdに書かれています。

Groom your app’s Ruby environment with rbenv.

rbenvを使用してアプリのRuby環境を整えます。

Use rbenv to pick a Ruby version for your application and guarantee that your development environment matches production.

rbenvを使用してアプリケーションのRubyバージョンを選択し、開発環境と本番環境が一致することを確認してください。

Put rbenv to work with Bundler for painless Ruby upgrades and bulletproof deployments.

苦労のないRubyアップグレードと失敗の心配のないデプロイのためにrbenvをBundlerと連携させてください。
お、_Bundler_が出てきましたね。大文字から始まっているので固有名詞のBundlerで間違いなさそうですね。

One thing well. rbenv is concerned solely with switching Ruby versions.

1つだけです。rbenvはRubyのバージョンを切り替えることだけに関心があります。

いいですね。Rubyのバージョンを切り替えることだけに関心があるそうです。こんな風に迷いなく生きたいですね。

gem

公式サイト

rubygems.org

gemっていうのはサードパーティのライブラリを指しており、それぞれのgemの公式サイトは載せられない(2019/07 時点で約15万のgemがある・・!)のでgemを管理しているサイトを公式サイトとします。

概要

Ruby公式サイトライブラリより。

やっと全部日本語のページです・・!

ライブラリ
多くのプログラミング言語と同様に、Ruby にも幅広いサードパーティのライブラリが提供されています。

それらのほとんどは “gem” という形式で公開されています。RubyGems は (Ruby に特化した apt-get と同じようなパッケージングシステムで) ライブラリの作成や公開、インストールを助けるシステムです。Ruby のバージョン 1.9 以降 RubyGems は標準添付となっていますが、それ以前のバージョンの Ruby の場合は自分でインストールする必要があります。

gemというのはサードパーティで開発されたライブラリのようです。

Ruby のライブラリは主に RubyGems.org に gem として置かれています。直接ウェブサイトを閲覧したり、gem コマンドを使用してそれらを探すことができます。

_RubyGems.org_とは公式サイトとして紹介したサイトですね。

Bundler

公式サイト

bundler.io

概要

Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed.

Bundlerは、必要な正確なgemとバージョンを追跡してインストールすることによって、Rubyプロジェクトに一貫した環境を提供します。

gemが出てきました!

Bundler is an exit from dependency hell, and ensures that the gems you need are present in development, staging, and production.

_ Bundlerは依存関係の地獄からの出口であり、あなたが必要とするgemsが開発、ステージング、そしてプロダクションに存在することを保証します。 _

gemsの依存関係を解決するもののようですね。

概要を把握したあとで

ここからは僕自身のまとめとなります。 gem以外のHomebrew/rbenv/Bundlerの3つはすべてパッケージ管理システムと言われるものの一種であることが公式サイトの説明から分かりました。

なぜパッケージ管理システムが必要なのか

環境が複雑になっていくにつれ、それぞのパッケージが人間で管理しきれなくなってくるという問題を解決するためです。

もう一度wikipediaの説明を見てみます。

パッケージ管理システムとは、OSというひとつの環境で、各種のソフトウェアの導入と削除、そしてソフトウェア同士やライブラリとの依存関係を管理するシステムである。

_ 各種のソフトウェアの導入と削除、そしてソフトウェア同士やライブラリとの依存関係を管理する _とあります。

Rubyの開発環境だとこういう導入のモチベーションとなります。

  • 複数のRubyのバージョンで開発や動作テストを行うことになった
  • 複数のバージョン管理がしんどい
  • rbenvで管理することにする
  • rbenvもソフトウェアであり、rbenv自体の管理も必要なのでHomebrewでインストールし、管理する
  • ピュアなRubyだけで開発はできないのでいろんなgemをインストールする必要がある(Ruby on Railsもgem!)
  • ○○のgemをインストールするために○○を先にインストールしておかないという場面が発生した!(いわゆる依存関係)
  • gemの管理もしんどい
  • Bundlerで管理することにする

それぞれ困った場面があり、それを解決したいから導入するわけですね。