Bundlerを使ってgemをインストールする
RubyからPostgreSQLを操作するためのライブラリをインストールする。
目次
RubyGemsとは
Rubyには標準添付ライブラリ以外にも、インストールして使うライブラリがある。
それらインストールして使うライブラリをRubyではgem(ジェム)と呼ぶ。
gemを管理するシステムがRubyGems。
RubyGemsはRubyに標準添付されているシステムなのでRubyが使える状態ならすぐに使うことができる。
RubyGemsの操作はターミナル/PowerShellからgem
コマンドを使って行う。
gemをインストールする書式は次のようになる。
ターミナル/PowerShell
gem install gem名
RubyGemsについてのWebページ
RubyGemsのWebサイト
https://rubygems.org/
RubyのWebサイトにもRubyGemsについて書かれている。
Ruby Webサイト
ライブラリ
https://www.ruby-lang.org/ja/libraries/
Bundlerとは
Bundlerはgem。
Bundlerはgemの依存関係を管理してくれるシステム(gem)。
gemの中には複数のgemが関連しあって動くものもある。Bundlerを使ってgemをインストールすると、そのgemと関連するgemも自動で束ごとインストールしてくれる。
BundlerのWebサイト
https://bundler.io/
Bundlerをインストールする
ターミナル/PowerShellからRubyGems(gemコマンド)でBundlerをインストールする。
手順は次のとおり。
RubyGemsをアップデートする。
gem update --system
試しにRubyGemsのバージョン確認してみる
gem -v
次のような返答がある。
2.7.6
Bundlerをインストールする。
gem install bundler
インストールしたらバージョンを確認してみる。
bundler -v
次のようにバージョンが返ってくればインストールは成功。
Bundler version 1.16.1
Bundlerを使ってgemをインストールする
Gemfileとは
BundlerはGemfileをもとにgemをインストールする。
GemfileについてはBundlerのWebサイトに詳しく載っている。
Bundler Docs
http://bundler.io/gemfile.html
Gemfileをつくる
Bundlerにはディレクトリ単位でgemを管理できるオプションがある。
今回はそのオプションを使ってgemをインストールする。
ターミナル/PowerShellのcdコマンドで管理したいディレクトリに移動する。
今回はruby_lessonというディレクトリにgemをインストールする。
ディレクトリに移動したらGemfileをつくる。
まずBundlerを最新にする。
gem update bundler
Gemfileをつくる。
bundle init
返答
Writing new Gemfile to /Users/username/ruby_lesson/Gemfile
上のように返答があればディレクトリ内にGemfileがつくられている。
初期に書かれている内容は次のとおり。
Gemfile初期状態
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
# gem "rails"
Bundle install
gemをインストールするにはGemfileにインストールしたいgemを記入する。
今回はPg、Active Record、dotenvという3つのgemをインストールする。
その場合、次のようにGemfileに追記する。
Gemfile
上の初期状態に追記
gem 'pg' gem 'activerecord' gem 'dotenv'
Gemfileに追記したら次のコマンドを入力。
今回はgemをシステムにインストールするのではなく、ディレクトリ内で管理する。
そのためにpathオプションをつける。
bundle install --path vendor/bundle
これで3つのgemがruby_lessonディレクトリ内にインストールされる。
--path
オプションつきのインストールでおきたこと。
.bundler/configの内容
Macで不可視ファイルを表示するにはcommand + shift + .
キーを同時に押す。
---
BUNDLE_PATH: "vendor/bundle"
Gemfile.lock
bundle installするとGemfile.lockというファイルがつくられる。
ここにはBundlerが実際にインストールしたgemの詳細が書かれる。
Bundlerはgemの依存関係を考慮して必要なgemを自動でインストールするので、Gemfileに書いていないgemもインストールされる。
Gemfile.lockをコーピーして別のディレクトリで使えば、書かれた内容と同じgem環境がつくれる。
今回つくられたGemfile.lockの内容は次のとおり。
3つのgemを使うのに関連するgemの多さに驚く。
Gemfile.lock
GEM
remote: https://rubygems.org/
specs:
activemodel (5.2.0)
activesupport (= 5.2.0)
activerecord (5.2.0)
activemodel (= 5.2.0)
activesupport (= 5.2.0) arel (>= 9.0)
activesupport (5.2.0)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
arel (9.0.0)
concurrent-ruby (1.0.5)
dotenv (2.3.0)
i18n (1.0.1)
concurrent-ruby (~> 1.0)
minitest (5.11.3)
pg (1.0.0-x64-mingw32)
thread_safe (0.3.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
PLATFORMS
Ruby
DEPENDENCIES
activerecord
dotenv
pg
BUNDLED WITH
1.16.1
上記はmacOS10の場合。
Windows10の場合はPLATFORMSがx64-mingw32となる。
pathオプションつきbudle installしたgemの実行
pathオプションをつけてbudle installしたgemを実行する場合はコマンドの頭にbundle exec
コマンドをつける。
Rubyコードを実行する例は次のとおり。
bundle exec ruby ファイル名
Windows10 Ruby2.4.4でbundle install失敗
今回、Windows10のRuby2.4.4でbundle installがエラーになった。
concurrent-rubyのインストールがうまくいかないのが原因。
仕方ないのでRubyのバージョンを2.5.1に変えたらインストールが成功した。
次回はActive Recordを使ってRubyからPostgreSQLを操作します。
今回の動作確認環境
macOS 10.13.3
Ruby 2.4.4p296
ターミナル 2.8.2
Windows10 1709
Ruby 2.5.1p57 [x64-mingw32]
Windows PowerShell 5.1.16299.251