使い方

参考:

初心者は覚えておきたい RubyGems のコマンドまとめ – Qiita

Gem コマンドの使い方まとめ | TASK NOTES

RubyGems の使い方 | WebOS Goodies

Bundler を使った RubyGems の管理について | 30歳からのプログラミング

そろそろ整理しておきたい、Gemコマンドの使い方 | ばくのエンジニア日誌

gem install コマンド

gem コマンドで Gem をインストールする。

$ gem install nokogiri

参考:

gem install | RubyGems Guides [Official]

gem list コマンド

インストール済み Gem の一覧を確認する。

$ gem list

参考:

gem list | RubyGems Guides

How do I list all versions of a gem available at a remote site? – Stack Overflow

gem update コマンド

インストール済み Gem のバージョンを更新する。

$ gem update

参考:

gem update | RubyGems Guides [Official]

gem cleanup コマンド

Gem の古いバージョンをアンインストールする。

$ gem cleanup

参考:

gem cleanup | RubyGems Guides [Official]

gem search コマンド

名前が完全に一致する Gem のみを表示する。

$ gem search rails -e

全てのバージョンを表示する。

$ gem search bundler -ae
オプション

-a / --all全てのバージョンを表示する。

-e / --exact名前が完全に一致する Gem のみを表示する。(指定しない場合は部分一致を含む。)

参考:

gem search | RubyGems Guides [Official]

ビルド/インストール

$ git clone https://github.com/user/gem_name.git -b v1.2.3 --depth 1
$ cd gem_name
$ gem build gem_name.gemspec
$ gem install gem_name-1.2.3.gem

参考:

Git で clone した Gem をインストールする | DIGITAL SQUADブログ

git clone でもってきたローカル Gem をインストールする方法 | DQNEO 起業日記

gem build | RubyGems Guides [Official]

ヘルプ

ヘルプを表示する。

$ gem help

コマンド一覧を表示する。

$ gem help commands

参考:

gem help | RubyGems Guides [Official]

環境を確認する

$ gem environment

もしくは、省略して

$ gem env

参考:

Ruby が参照してる Gem のパスやインストール済 Gem を確認する方法 – Qiita

インストール先を確認する

$ gem env gemdir

もしくは、

$ gem env home

参考:

Gem パッケージのインストール先を調べる | まくまくノート

Where do gems install? – Stack Overflow

--no-document

参考:

Gem のインストールで `--no-document` を付けると77倍早い – Qiita

gem install --no-ri –no-rdoc は gem install -N にした方が良い – Qiita

gemrc の --no-ri と --no-rdoc、deprecated な option なのでみなおしたほうがいいかもですよ – Qiita

.gemrc

参考:

Gem のインストール先に rbenv が指すものと Gem.user_dir があることを知らなくてハマった話 | わすれっぽいきみえ

peco で Gem のディレクトリに移動する

参考:

peco で Bundler 管理下にある Gem のディレクトリに移動する – Qiita

依存を考慮せずに一つの Gem だけをインストールする

参考:

Removing a dependency while installing a gem? – Stack Overflow

ローカルの Gem をインストールする

参考:

Is it possible to bundle / install gems from a local cache? – Stack Overflow

デフォルト Gem

  • デフォルト Gem は、$(gem env gemdir)/specifications/default ディレクトリに gemspec がある。
  • アンインストールできない。(更新はできる。)
  • gem list でバージョン番号が default: x.y.z と表示される。
  • デフォルト Gem は bundle していなくても require で読み込める。(新しい Gem を bundle でインストールした場合、新しいバージョンの Gem に存在しなくてデフォルト Gem に存在するファイルが読めてしまう。バグ?仕様?)

デフォルト Gem の gemspec を確認する。

$ ls "$(gem env gemdir)/specifications/default"

参考:

bundled gem と default gem の違い | @znz blog

bundled gem と default gem の違いの具体例 | @znz blog

Default Gems Bundled with Ruby | zzz.buzz

Standard Gems (stdgems.org)

Default Gems Hinder Bundler | Josua Schmid

Two default versions of rake installed – how to delete one · Issue #2157 · rubygems/rubygems – GitHub

Behaviour changes with default gems installer by hsbt · Pull Request #2166 · rubygems/rubygems – GitHub

rg v3 – gem update behavior · Issue #2349 · rubygems/rubygems – GitHub

improve gem install --default · Issue #677 · rubygems/rubygems – GitHub

How to make a specific gem version as default? – Stack Overflow

バージョンコンフリクト

  • Gemfile.lock に記述されているバージョンと矛盾がある。→ bundle update で可能な範囲で最新バージョンの Gem に解決する。(Gemfile.lock を更新する。)
  • Gemfile に記述したバージョンに矛盾があり解決できない。→ Gemfile を編集する。(もしくは、必要に応じて各 Gem の gemspec を修正する。)
  • Bundler のバージョンが合っていない。→ gem install bundler で必要なバージョンの Bundler をインストールする。もしくは、gem update bundler で Bundler のバージョンを更新する。
  • 何かがバグっている。→ vendor/bundle と Gemfile.lock を削除して、最初から bundle install をやり直す。

参考:

Rails 5 で bundle install をするときにバージョンコンフリクトでつまったメモ – Qiita

不要な Gem をまとめてアンインストールする

デフォルトではないインストール済み Gem の一覧を作成する。

#! /usr/bin/env bash

# ---------------------------------------------
#   Script to Manage RubyGems (v1.0.0)
# ---------------------------------------------

gem list > all_gems.txt
gem list | grep -v "default:" | cut -d " " -f 1 > gem_list.txt

IFS=$'\n'
for gem in $(cat gem_list.txt); do
    gem dependency $gem \
        | grep -v -E "^Gem\\b" \
        | grep -v -E "\\bdevelopment\\)" \
        | awk '{ print $1 }'
done | sed '/^$/d' > dependency.txt

sort dependency.txt | uniq > uniq_dependency.txt
cat gem_list.txt | grep -v -f uniq_dependency.txt > requirements.txt

rm dependency.txt uniq_dependency.txt

echo
gem list $(cat requirements.txt) | catCode language: Bash (bash)
  • all_gems.txtインストール済み Gem のリスト
  • gem_list.txtデフォルトではない Gem のリスト
  • requirement.txt環境を再現するのに最低限必要な Gem のリスト
アンインストール

デフォルトではない Gem を全てアンインストールする。

$ xargs -a gem_list.txt gem uninstall -aIx
$ gem list > minimum_gems.txt
再インストール

環境を再現する。(※ Gem のバージョンが変わる可能性があり、また、間接的な依存 Gem が変更される可能性がある。)

$ xargs -a requirements.txt gem install
$ gem list | diff -u -w all_gems.txt - | tee gems_diff.txt
$ gem list > all_gems.txt
更新

インストール済み Gem を全て更新する。

$ gem update
$ gem list | diff -u -w all_gems.txt - | tee gems_diff.txt
$ gem list > all_gems.txt

参考:

Gem をクリーンにする – Qiita

インストールされている Gem を全て削除する。- Qiita

あえて言うほどではないけれども Gem を一括削除する方法 | TECHSCORE BLOG

Gem を間違えてグローバルにインストールしてしまった場合 | Technical Notes

Removing all installed Gems and starting over – Stack Overflow

specific_install

GitHub から Gem をインストールするための gem specific_install コマンドを追加する。

リポジトリ:

rdp/specific_install: RubyGems Plugin to Allow You to Install an “Edge” Gem Straight from its GitHub Repository – GitHub

参考:

gem install で GitHub リポジトリにある最新版をインストールする – Qiita

GitHub のリポジトリから直接 gem install する | deadwood

GitHub のブランチにある gem をインストールする方法 | noanoa 日々の日記

FileUtils が二重にロードされる

参考:

rails c した際に fileutils の警告が大量に出た場合 | 約束の地

「rails s」で warning: already initialized constant が出る | 新人SEの気まぐれ日記

fileutils conflict in Ruby 2.5.1 · Issue #22 · ruby/fileutils – GitHub

`warning:` `already` initialized constant FileUtils::VERSION – Stack Overflow

キャッシュ

参考:

キャッシュを削除して Gem を復旧する | やってみる

仕組み

参考:

RubyGems の install は何をやっているか | freedom-man.com

ドキュメント

Command Reference | RubyGems.org [Official]

gem_dir

※メンテナンスされていない。

リポジトリ:

mperham/gem_dir: Adds the ‘gem dir’ Command to RubyGems to Display the Root Directory of a Given Gem – GitHub

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA