Edited at

Bundlerの使い方

More than 1 year has passed since last update.


gemとは?


  • 決まったフォーマットで提供されるRuby言語用のライブラリを「gem」と呼びます。

  • 「gem」には例えば以下のようなものがある。


    • Rails(Webフレームワーク)

    • Sinatra(Webフレームワーク)

    • omniauth(認証機能)

    • unicorn(アプリケーションサーバ)

    • Rspec(テストフレームワーク)
      ...etc



  • PerlでいうCPAN、phpでいうpear等にあたる


Rubygemsとは


  • yumやaptと似た、gem専用のパッケージ管理システム。

  • 以下サイトにてgemの情報公開、提供を行っている。
    https://rubygems.org/


Bundlerとはなんぞや


  • gemは以下のように個別に手動インストールする事が可能です。


    • gem install "sinatra"

    • gem install "unicorn"

    • gem install "omniauth"



  • しかし、様々なgem(ライブラリ)を組み合わせて使っていると「gemAのver1とgemBのVer2はうまく動くけど、最新バージョン同士だとうまく動かない。」という互換性の問題が出てくる場合があります。

  • また、複数人、複数環境で開発を行う場合は、各環境で使うライブラリの名前、バージョンを合わせる必要があります。

  • こういった場合に、gem同士の互換性を保ちながら各gemの導入、管理を行ってくれるのがBundlerです。

  • Gemfileというファイルにインストールしたいgemを記述し、それを元にbundlerを使ってインストールを行います。

  • bundler本体以外のgemは基本的にbundler経由でインストールを行うのがおすすめです。


Bundlerのインストールの仕方


  • Bundlerのインストール


    • Bundlerもgemの1つです。手動ダウンロードしましょう


      • gem install bundler



    • 導入後はバージョンが表示される事を確認してください。


      • bundler -v






Bundlerの使い方


  1. Gemfileの作成


    • bundle init

    • 上記実行するとGemfileという雛形ファイルが作成されます



  2. 使用したいgemをGemfileに記述する


    • Gemfileを編集する


      • vi Gemfile



    • Gemfileの先頭に、インストール元はrubygemsですよ、と宣言を行います。


      • source "rubygems"



    • 続けてインストールしたいgemを記述します


      • gem "sinatra"

      • gem "unicorn"

      • gem "omniauth"



    • gemの指定の際に、バージョンの指定も可能です


      • gem 'rails', "~> 4.2.4"





  3. Gemfileにリスト化したgemを一括インストール


    • 一括インストール


      • bundle install --path vendor/bundle



    • --pathでインストール先を指定可能。一度でも--path指定でインストールしたら、次回以降はpath指定無しでbundle installを行っても同じpathが選択されます。

    • この時、インストールしたgemの名前とバージョンを記載した「gemfile.lock」というファイルが作成されます。



  4. インストールしたgemをプログラムソース上でロード


    • まずソース上でrubygemsをrequireします。


      • require "rubygems"



    • 以下のように記述するとインストールした内容からrequireを行うように(指定無しだとシステム最新のgemを使ってしまいます)


      • require "bundler/setup"





  5. プログラムを実行する際は、最初にbundle execを実行します。(指定無しだと互換性を考慮せずにシステム最新のgemを使ってしまう)


    • bundle exec ruby foo.rb




参考