Ruby Gem

ライブラリ

Ruby には大きく分けて 3 つのライブラリがある

  1. 組み込みライブラリ
  2. 標準添付ライブラリ
  3. Gem

1. 組み込みライブラリ

  • Integer, String, Array, Hash など

2. 標準添付ライブラリ

  • require メソッドを実行してライブラリを読み込む
    • JSON といったクラスが事前に用意されている

3. Gem

  • 使う前に事前のインストールが必要
  • require メソッドを実行してライブラリを読み込む
  • rubygems.org というサイトで利用可能な形で公開されている
  • 10 万を超える数のライブラリが公開されている

Gem の使い方

インストール gem i Gem名

  • すでにインストール済みの Gem を再度インストールしても問題はない
gem i Gem名
# or
gem install Gem名
gem i awesome_print
# awesome_print → 引数に渡したオブジェクトを見やすく表示する

インストール済みの Gem を確認 gem list

  • インストール済みの Gem 一覧とそのバージョン情報を表示
gem list

Gem 読み込み require Gem名

require Gem名
require "awesome_print"
ap [1, 2, 3]

インストールしたはずの Gem が動かない

  • インストールしたはずの pry が動かない
    • gem list では確かにインストール済み
    • 公式を見ても、コマンドラインから pry で動くはず
% pry
zsh: command not found: pry

rbenvというrubyのパッケージマネージャを使用していると、gemでインストールしたコマンドを使う前にrbenv rehashをして $HOME/.rvm/shims 以下の情報を更新する必要があるらしい。

MacでRuby入門 ~pryが起動しない~ - sahishiyoのブログ

% rbenv rehash 
% pry         
[1] pry(main)> p [1, 2, 3]
[1, 2, 3]
=> [1, 2, 3]

Bundler

  • 複数の Gem をまとめてインストールできる
  • 基本的に標準でインストールされている(Ruby 2.6.0 から標準添付)
    • インストールされていなければ gem i bundler
  • bundle -v でバージョン確認

Bundler で複数の Gem をまとめてインストール

  • 大まかな手順
    1. Gemfile の作成
    2. bundle install 実行

1. Gemfile の作成 bundle init

  • Gemfile という名前のファイルを作成し、そこにインストールする Gem を書く
  1. bundle init → Gemfile が作成される
  2. Gemfile にインストールしたい Gem を追記する
% bundle init
# Writing new Gemfile to /Users/username/Gemfile

% c Gemfile 
# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails" 
  • 例として pry という Gem をインストール
    • pry は irb の後発プログラムで、表示が見やすく、多くの機能を持つ
% vi Gemfile 
~ 
% c Gemfile 
# frozen_string_literal: true

source "https://rubygems.org"

gem "pry"

2. bundle i 実行

bundle i
# or
bundle install

Gemfile.lock ファイル

  • bundle install を実行すると、自動で Gemfile.lock というファイルが生成される
    • 使われている Gem 名とそのバージョンが記載されている
    • 編集の必要はない
    • Gemfile と Gemfile.lock はセットで使われるため、プログラムのファイル一式をバックアップする際などは両方を保管する
  • 公開されている Ruby プログラムに Gemfile が入っている場合は、bundle install を実行してからプログラムを実行する
    • 多くの場合、ドキュメントにその旨が記載されているが
    • 当たり前の動作でもあるため、ドキュメントから省略されていることもある

Gem をバージョンアップ bundle update

  • Gemfile に書かれている Gem に新しいバージョンがリリースされたときは、以下実行で新しいバージョンの Gem をインストールできる
    • Gemfile.lock の内容も更新される
bundle update
  • bundle update Gem名 とすることで、その Gem と Gem が依存している Gem をまとめてバージョンアップできる

指定したバージョンの Gem を使う bundle exec

  • 新しいバージョンの Gem をインストールしたとき
    • 古いバージョンの Gem はアンイストールされない
      • 同じ Gem の複数のバージョンがインストールされた状態になる
  • 通常は新しいバージョンが利用される
  • Gemfile.lock に書かれたバージョンの Gem を使って実行したい場合、以下のコマンドを使う

*ここよく分からない

bundle exec