0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyのGemについて

Last updated at Posted at 2025-12-11

はじめに

この記事はUdon Advent Calendar 2025 - Adventarの11日目の記事です。

RubyのGem

9日目の記事でRubyの環境構築について解説しました。その後半でGemについての話にも触れたと思います。

今回の記事では、RubyのGemについてもう少し掘り下げてみようと思います。

Gemとは

Gemとはgem形式にパッケージングされたRuby用のライブラリの総称です。

ある機能を作りたいときに一から実装するのは大変ですが、ライブラリを使うことでそういった機能をすぐに使うことができます。別プログラムで同じことがしたいなら同じライブラリを使えばいいので、再現性も高くなります。

GemはRubyGemsによって管理されます。Pythonで言うpipですね。

Gemの種類

Gemは大きく分けて二種類あります。

標準ライブラリ

Rubyのインストール時に同時にインストールされるGemです。Rubyのバージョンごとに

Rubyをインストールしたら、以下のコマンドを実行してみましょう。

gem list

そうすると、以下のように現在あるGemがリストアップされます(Ruby3.4.7の場合)。

$ gem list

*** LOCAL GEMS ***

abbrev (0.1.2)
base64 (0.2.0)
benchmark (default: 0.4.0)
bigdecimal (3.1.8)
bundler (default: 2.6.9)
cgi (default: 0.4.2)
csv (3.3.2)
date (default: 3.4.1)
debug (1.11.0)
delegate (default: 0.4.0)
did_you_mean (default: 2.0.0)
digest (default: 3.2.0)
drb (2.2.1)
english (default: 0.8.0)
erb (default: 4.0.4)
error_highlight (default: 0.7.0)
etc (default: 1.4.6)
fcntl (default: 1.2.0)
fiddle (default: 1.1.6)
fileutils (default: 1.7.3)
find (default: 0.2.0)
forwardable (default: 1.3.3)
getoptlong (0.2.1)
io-console (default: 0.8.1)
io-nonblock (default: 0.3.2)
io-wait (default: 0.3.2)
ipaddr (default: 1.2.7)
irb (default: 1.14.3)
json (default: 2.9.1)
logger (default: 1.6.4)
matrix (0.4.2)
minitest (5.25.4)
mutex_m (0.3.0)
net-ftp (0.3.8)
net-http (default: 0.6.0)
net-imap (0.5.8)
net-pop (0.1.2)
net-protocol (default: 0.2.2)
net-smtp (0.5.1)
nkf (0.2.0)
observer (0.1.2)
open-uri (default: 0.5.0)
open3 (default: 0.2.1)
openssl (default: 3.3.0)
optparse (default: 0.6.0)
ostruct (default: 0.6.1)
pathname (default: 0.4.0)
power_assert (2.0.5)
pp (default: 0.6.2)
prettyprint (default: 0.2.0)
prime (0.1.3)
prism (default: 1.5.1)
pstore (default: 0.1.4)
psych (default: 5.2.2)
racc (1.8.1)
rake (13.2.1)
rbs (3.8.0)
rdoc (default: 6.14.0)
readline (default: 0.0.4)
reline (default: 0.6.0)
repl_type_completor (0.1.9)
resolv (default: 0.6.2)
resolv-replace (0.1.1)
rexml (3.4.0)
rinda (0.2.0)
rss (0.3.1)
ruby2_keywords (default: 0.0.5)
securerandom (default: 0.4.1)
set (default: 1.1.1)
shellwords (default: 0.2.2)
singleton (default: 0.3.0)
stringio (default: 3.1.2)
strscan (default: 3.1.2)
syntax_suggest (default: 2.0.2)
syslog (0.2.0)
tempfile (default: 0.3.1)
test-unit (3.6.7)
time (default: 0.4.1)
timeout (default: 0.4.3)
tmpdir (default: 0.3.1)
tsort (default: 0.2.0)
typeprof (0.30.1)
un (default: 0.3.0)
uri (default: 1.0.4)
weakref (default: 0.1.3)
yaml (default: 0.4.0)
zlib (default: 3.2.1)

HashArrayなども標準ライブラリですが、これらはrequireなしでも使えます。これはRuby本体としてインストールされている「組み込みライブラリ」です。その証拠に、上記のリストには入っていません。

これらのライブラリはrequireを用いることでプログラム内で利用することができます。例としてjsonを利用してみましょう。サンプルは以下の通り。

require "json"

p JSON.parse('{"name": "Test"}')

JSONparseメソッドは、文字列として受け取ったjsonをハッシュに変換してくれるものです。

実行すると、以下のようになります。

$ ruby example.rb
{"name" => "Test"}

また、組み込みライブラリではありません(上記リストに入っています)が、timeはよく使われるからなのかrequireしなくても最初から使えます(明示的にrequireしてもOK)。

$ irb
irb(main):001> puts Time.now
2025-12-11 13:14:00 +0900
=> nil

外部ライブラリ

外部ライブラリはいきなり使うことはできず、使う前にインストールが必要なライブラリです。

インストールは以下のように行います。記法はaptに似ていますね。

gem install [name]

nokogiri(例)

HTMLやXMLを解析しパースする機能を持つライブラリです。スクレイピングの際によく利用されます。

サンプルはこんな感じ。標準ライブラリと同様に利用前にはrequireが必要です。

require 'nokogiri'

html = '<div><p>Hello World</p></div>'

doc = Nokogiri::HTML(html)
puts doc.css('p').text # => Hello World

GemをBundlerで管理する

Gemをグローバルにインストールするだけでなく、プロジェクトごとに使うGemの種類やバージョンを管理したいときがあります。特に他のGemに依存しているGemを使う際は依存関係もしっかりと管理しなくてはなりません。

そんな時に便利なのがBundlerというGemです。これはGemのバージョンをディレクトリごとに

rbenvのRubyバージョン機能と組み合わせることで多彩な仮想環境を用意することができます!

Gemfile

Bundlerは以下のようなGemfileを利用してGemのバージョン管理を行います。これが含まれているパス以下がバージョン管理の対象となります。

Gemfile
source "https://rubygems.org"

gem "nokogiri"

どこからダウンロードするのかを明記した後、gem "[name]"の形式で必要なGemを列挙します。

インストールするGemのバージョンを以下のように細かく指定することもできます。

Gemfile
gem "nokogiri", "~> 1.18" # 1.18以降の互換性のあるバージョンを指定
Gemfile
gem "nokogiri", ">= 1.18.10" # 最低でも1.18以上のバージョン

今回は以下のように1.18.9を狙ってインストールしてみます。これによってグローバルにインストールしたnokogiriと区別します。

Gemfile
gem "nokogiri", "1.18.9"

準備できたら、以下のコマンドで指定したGemをインストールします。

bundle install
$ bundle install
Fetching gem metadata from https://rubygems.org/.......
Resolving dependencies...
Bundle complete! 1 Gemfile dependency, 3 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

実行後、Gemfile.lockというファイルができています。ファイルの中には依存関係が記入されています。raccというGemに依存しているようですね。

各ライブラリのどのバージョンがインストールされたのか、という情報も載っています。

GEM
  remote: https://rubygems.org/
  specs:
    nokogiri (1.18.9-aarch64-linux-gnu)
      racc (~> 1.4)
    nokogiri (1.18.9-aarch64-linux-musl)
      racc (~> 1.4)
    nokogiri (1.18.9-arm-linux-gnu)
      racc (~> 1.4)
    nokogiri (1.18.9-arm-linux-musl)
      racc (~> 1.4)
    nokogiri (1.18.9-arm64-darwin)
      racc (~> 1.4)
    nokogiri (1.18.9-x86_64-darwin)
      racc (~> 1.4)
    nokogiri (1.18.9-x86_64-linux-gnu)
      racc (~> 1.4)
    nokogiri (1.18.9-x86_64-linux-musl)
      racc (~> 1.4)
    racc (1.8.1)

PLATFORMS
  aarch64-linux-gnu
  aarch64-linux-musl
  arm-linux-gnu
  arm-linux-musl
  arm64-darwin
  x86_64-darwin
  x86_64-linux-gnu
  x86_64-linux-musl

DEPENDENCIES
  nokogiri (= 1.18.9)

CHECKSUMS
  nokogiri (1.18.9-aarch64-linux-gnu) sha256=5bcfdf7aa8d1056a7ad5e52e1adffc64ef53d12d0724fbc6f458a3af1a4b9e32
  nokogiri (1.18.9-aarch64-linux-musl) sha256=55e9e6ca46c4ad1715e313f407d8481d15be1e3b65d9f8e52ba1c124d01676a7
  nokogiri (1.18.9-arm-linux-gnu) sha256=fe611ae65880e445a9c0f650d52327db239f3488626df4173c05beafd161d46e
  nokogiri (1.18.9-arm-linux-musl) sha256=935605e14c0ba17da18d203922440bf6c0676c602659278d855d4622d756a324
  nokogiri (1.18.9-arm64-darwin) sha256=eea3f1f06463ff6309d3ff5b88033c4948d0da1ab3cc0a3a24f63c4d4a763979
  nokogiri (1.18.9-x86_64-darwin) sha256=e0d2deb03d3d7af8016e8c9df5ff4a7d692159cefb135cbb6a4109f265652348
  nokogiri (1.18.9-x86_64-linux-gnu) sha256=b52f5defedc53d14f71eeaaf990da66b077e1918a2e13088b6a96d0230f44360
  nokogiri (1.18.9-x86_64-linux-musl) sha256=e69359d6240c17e64cc9f43970d54f13bfc7b8cc516b819228f687e953425e69
  racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f

BUNDLED WITH
  4.0.0

また、下の方にはどのバージョンのBundlerでインストールされたか、の情報も書いてあります。

この管理されたバージョンでRubyプログラムを実行してみましょう。サンプルとして以下のRubyファイルを利用します。requireした外部ライブラリのバージョンを出力するというものです。

require 'nokogiri'

puts Nokogiri::VERSION

Bundleを使ってRubyを実行する時は以下のようにします。

bundle exec ruby example.rb

結果は以下の通りです。1.18.9が出てきました。

$ bundle exec ruby example.rb
1.18.9

逆に、以下のようにやるとグローバルなGemが参照されます。

ruby example.rb

実行すると、グローバルの方のバージョンになりました。

$ ruby example.rb
1.18.10

こうして、ライブラリに関しても仮想環境を用意することができました。Gemfileを共有しておくと別のマシンでも同じ環境が作れるのでチーム内で足並みを揃えることができます。

おわりに

Gemを使いこなすことで、Rubyでできることが格段に増えます。

皆さんも標準のGemだけでなく、外部Gemもどんどん利用してみてください!

それではまた、明日の記事でお会いしましょう!

参考文献

RubyGems - Wikipedia

【Ruby】 gemの仕組みを図解形式で学ぼう | Pikawaka

【Ruby】ライブラリまとめ(標準ライブラリ?組み込みライブラリ?外部ライブラリ?) #Gem - Qiita

【Ruby入門】Rubyで外部ライブラリを読み込む:require - ポップインサイト

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?