gemとは
RubyGemsで管理されるrubyのアプリケーションやライブラリのことです。
gemはコンソールから簡単にインストール・削除することができます。
さっそくgemをインストールしてみます。今回はprawnというpdfを作るライブラリをいれます。
gemのインストールはgem installでできます。
gem install prawn
Fetching: ttfunk-1.4.0.gem (100%)
Successfully installed ttfunk-1.4.0
Fetching: pdf-core-0.6.1.gem (100%)
Successfully installed pdf-core-0.6.1
Fetching: prawn-2.1.0.gem (100%)
Successfully installed prawn-2.1.0
Parsing documentation for ttfunk-1.4.0
Installing ri documentation for ttfunk-1.4.0
Parsing documentation for pdf-core-0.6.1
Installing ri documentation for pdf-core-0.6.1
Parsing documentation for prawn-2.1.0
Installing ri documentation for prawn-2.1.0
Done installing documentation for ttfunk, pdf-core, prawn after 3 seconds
3 gems installed
うまくいきました。削除はgem uninstallです
gem uninstall prawn
Successfully uninstalled prawn-2.1.0
この方法でインストールするgemはgem environmentのINSTALLATION DIRECTORY以下にインストールされます。
gemコマンドでgemを入れることによるデメリット
gemの更新によってそのgemを使用しているアプリケーションが動かなくなる場合、gemコマンドはその問題を回避できません。
そこでbundler
bundlerもgemを管理するツールですがgemと違うのは、他のgemに依存され続けているgemの更新を認めません。そうすることによって、gem間の依存関係による問題を回避します。
bundlerのメリットはそれだけではありません。プロジェクト毎にgemを管理できるので、そのプロジェクト専用のgemの環境を構築できます。更に、bundlerではinstallするgemをGemfileに記述するので、そのGemFileをgit等で管理すれば複数人の開発者の開発環境を同期させることができます。
bundlerを使ったgemのインストール
bundlerではインストールするgemをGemfileに記述します。
Gemfileはbundle initで作成できます。
作成されたGemfileにインストールしたいgemを記述していくのですが、この時いろいろなバージョン指定の方法があります。
| version specifiers | meaning |
|---|---|
| = | 指定されたバージョンのみ |
| > | 指定されたバージョンより大きいもの |
| >= | 指定されたバージョン以上のもの |
| < | 指定されたバージョンより小さいもの |
| <= | 指定されたバージョン以下のもの |
| ~> | ~> 2.2 の場合は 2.2.beta.12の様なプレスリリースのバージョン |
source 'https://rubygems.org'
gem 'bootstrap-sass', '3.2.0.0'`
の様にGemfileに書いたあと、
bundle installをすることでGemfileに記述されているgemをsourceの後に指定されたurlにgemを見に行きます。
bundlerで入れたgemの保存場所
デフォルトではgemコマンドで入れた場合と同じ場所にインストールされる。インストール先を指定したい場合はbundle -install --path hoge/hugaのようにすることで指定できる。
bundleは指定された場所を覚えるので次からは指定する必要はない。
よく使うbundlerのコマンドやそのオプション
| コマンド | 処理 |
|---|---|
| bundler install --path | 指定されたpathにGemfileの内容に もとづいてXgemをインストール |
| bundler exec | bundlerでインストールされたコマンドを そのコンテキストに基づいて実行する。 |
| bundler list | インストールしたgemの一覧 |
bundler execの意味はこの記事を書くまで知らなかった。