ruby gem bundlerの使い方


rubyにはgemと呼ばれるサードパーティ製 パッケージを管理する仕組みが存在します。このページでは、パッケージ管理のgemと、プロジェクト単位でgem操作が可能なbundlerの使い方について説明します。

gemの使い方

gemのインストール方法

ソースコードをコンパイルしてrubyをインストールした場合は、rubyと同時にgemがインストールされます。RVM, rbenvを使用した場合も同様です。

RPMパッケージを使用する場合は、rubyとgemは別パッケージで提供されていますので、rubyのインストールとは別にgemのインストールが必要になります。gemをインストールするには、以下のようにyumコマンドを使用して下さい。

gemの基本操作

gemを用いてパッケージをインストールするには、”gem install <packege>”コマンドを使用します。使用例は以下の通りです。

インストール済のgemパッケージを確認するには、”gem list”コマンドを使用します。

よく使用するgemコマンドの一覧は以下の通りです。

gemコマンド説明
gem installパッケージのインストールを行ないます。
gem uninstallパッケージの削除(アンインストール)を行ないます。
gem listインストール済のパッケージを表示します。
gem list --remoteインストール可能なパッケージ一覧を表示します。

詳細はhelpを見つつ、使用方法を確認して下さい。”gem help”でgemコマンドの使い方の概要を把握する事ができます。

“gem help commands”で使用可能なgemコマンド一覧が分かります。

“gem help”の後にコマンドを入力すると、各コマンドの詳細な使い方を把握する事ができます。

gem プロキシ環境下 対応

大企業ではよくある話ですが、インターネットアクセスはプロキシサーバの経由が必要となる事があります。 プロキシサーバを指定するには、–http-proxyオプションを指定して下さい。以下はWindows環境のcygwinを用いた動作確認例です。

–http-proxyを入力するのを手間と感じる方は、環境変数HTTP_PROXY, HTTPS_PROXYを利用しても差し支えございません。環境変数HTTP_PROXY, HTTPS_PROXYにプロキシサーバのURLを指定する事によって、プロキシ経由の通信が可能になります。

なお、現時点(2014/10/07)ではgemのダウンロードはhttpを使用するので、HTTP_PROXYのみの設定で差し支えございません。しかし、時代の流れから推測するに、近い将来httpsを使用するように仕様変更される可能性がありますので、HTTP_PROXY, HTTPS_PROXYの両方を設定する手順を掲載しております。

bundlerの使い方

ruby gemは非常にバージョン依存が強い仕組みです。「とあるパッケージを使用するには、別パッケージのバージョンいくつ以下が必要」という事態がよく起きます。そのため、動作可能なバージョンを探すのは、試行錯誤のひと苦労が必要です。

また、gemをシステムに対してインストールしてしまうと、異なるバージョンのgemを使用する事ができません。例えば、あるアプリケーションはrails 2.Xを使用し、別のアプリケーションがrails 3.Xを使用するような場合は、競合が起きてしまいます。

このようなトラブルを解決する仕組みがbundlerです。bundlerは単純なgem操作では出来ない、以下の仕組みを備えています。

  • パッケージの柔軟なバージョン指定 ( 例 : 等しい、以上、以下)
  • プロジェクト単位のgemインストール

bundlerの基本的な使い方

bundlerを使用するには、まずbundlerをgemコマンドによってインストールします。

bundlerはgemパッケージを管理する仕組みです。インストールするパッケージは、Gemfileという定義ファイルによって管理する事ができます。定義ファイルは単にインストールするパッケージだけでなく、インストールするパッケージのバージョンが、「いくつ以上」「いくつ以下」という情報を記述する事ができます。

以下は、バージョン2.0.0以上のserverspecをインストールする設定例です。

Gemfileに基づいたインストールを行なうには、Gemfileが存在するディレクトリに移動し、”bundle install”コマンドを使用します。

Gemfileによって定義されたパッケージがインストールされた事を確認します。

bundler アプリケーション単位のインストール

システム単位でgemをインストールすると、アプリケーション毎(プロジェクト毎)に異なるバージョンのgemを使用する事ができません。システム単位でgemをインストールしてしまうと、もしgemのバージョン変更が必要になった時に、バージョン変更の影響範囲を他アプリケーション担当者と調整しなければなりません。このような調整業務を避けるための仕組みが、アプリケーション単位のgemインストールです。

アプリケーション単位のgemインストールを行なうには、”gem install”コマンドに引数–pathでgemのインストール先を指定します。インストール先は慣例で”vendor/bundle”とする事が多いです。コマンドの実行例は以下のようになります。

“–path vendor/bundle”を指定すると、以下のような.bundle/configという設定ファイルが自動的に作成されます。なお、2回目以降の”bundle install”は.bundle/configの設定を読み取ってくれますので、–pathの指定は省略して差し支えございません。

実行例は以下の通りです。以下は、ruby, gemを使用したソフトウェア redmineをインストールした時の操作ログです。”It was installed into ./vendor/bundle”とのメッセージが出力されていることから、確かにシステム単位ではなく、アプリケーション単位でgemをインストールしていることが分かります。

“vendor/bundle”以下を確認すると、gemの実態であるファイルが確認できます。

システム単位ではなく、アプリケーションに対してインストールされたgemパッケージを確認するには、”bundle show”コマンドを使用します。

アプリケーション単位でインストールしたgemを使用するには注意が必要です。bundle execを頭に付けてからgemパッケージを実行して下さい。以下は、rakeをシステム単位とアプリケーション単位の2重でインストールした構成ですが、確かにbundle execの有無によって実行されるバージョンが異なる事が読み取れます。

アプリケーション単位でインストールしたrakeを実行する例は以下の通りです。以下はredmineのインストールを行なった時の操作ログです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする