8.1 RubyGemsの概要と使い方
RubyGemsとは、Rubyのパッケージマネージャのことである。パッケージマネージャは世界中のプログラマが投稿したパッケージ(ライブラリやフレームワーク)をローカルな環境で利用することを支援するツールのことで、パッケージのインストール(プログラムをシステムで利用可能な状態にすること)や削除、また依存関係の解決を行う。
依存関係とは、ある、パッケージを含む様々なプログラムを利用する際に、そのプログラム以外にも必要なプログラムがある状態のことを言う。例えば以下の図のような状態のことである。
この図では、あるXというWebサービスをRubyで書くときにrailsというライブラリを利用しているので依存関係が発生している。このとき、Xはrailsに依存しているという。この図だけ見ると、railsをインストールすればXは実行可能になるように見える。では次の図を見てみよう。
実はrailsもnokogiriやmail、jsonなどの別のライブラリに依存していたとする。この場合、railsをインストールするにはそれらのライブラリが必要になるので、Xはrails以外にもパッケージをインストールしなければならない。このように、依存関係から必要になったライブラリをインストールして、ライブラリを利用可能な状態にすることを依存関係を解決するという。この依存関係の解決は、利用するライブラリの依存関係が複雑になってくると自分の手で行うのは困難である。
パッケージマネージャはこの依存関係の解決を自動で行ってくれる。具体的には、上の図のAというパッケージをインストールするときに、依存するa、b、c、dなど他の依存しているパッケージも一緒にインストールしてくれるので、Aの利用者は依存しているパッケージを意識的にインストールする必要はなくなる。
では、実際にRubyGemsを使ってパッケージを使ったプログラムを書いてみよう。
まず、RubyGems利用するためにはgemコマンドを環境にインストールしなければならない。OSごとのパッケージマネージャからインストールするか、RubyGemsのソースコードを直接ビルドしてインストールすると良い。これ以降はgemコマンドが使える状態という前提で説明していく。
gemコマンドを利用してgemをインストールする時には以下のコマンドを実行する。
gem install [gem名]
では実際にTitleizeというライブラリをインストールして利用してみよう。 Titleizeとは文字列を単語ごとに区切ってそれぞれの頭文字を大文字に変換する、titleizeメソッドを提供するgemライブラリである。
gem install titleize
次に、インストールしたパッケージを使ってプログラムを書いてみる。
require 'titalize'
puts 'this is the lecture text of ruby for SCCP2016'
#=> this is the lecture text of ruby for SCCP2016
puts 'this is the lecture text of ruby for SCCP2016'.titleize
#=> This Is the Lecture Text of Ruby for SCCP2016
requireはC言語での#includeの役割をするが、Rubyのrequireは構文ではなくメソッドである。
ただし、このページで説明したgemコマンドは学校の環境では使えないので、個人で使っているパソコンにインストールして使ってみよう。