Ruby設定２　

## 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

## 参考
- Rubygemsのススメ | Rubyに慣れていない初心者さんへ
http://qiita.com/sumyapp/items/5ec58bf3567e557c24d7
- Bundler概要
http://qiita.com/hisonl/items/162f70e612e8e96dba50
- Bundlerとは
http://shokai.org/blog/archives/7262

[GemコマンドとBundlerの基礎 \- BlueTechNote](https://bbbbruno.qrunch.io/entries/7TY7oOCc0lWnXLrE)



## Gemコマンドを使用
```console
$ gem install
$ gem update
$ gem uninstall

```


## bundler
- Bundler をインストールする
- Gemfile にインストールするGem を書く
- bundle installコマンドでインストールする
- bundle updateコマンドでGemをバージョンアップする
```console
- Bundler をインストールする
(m・_・bp) 17:50 ~/Desktop/vsnote2.0/ruby % gem install bundler
Fetching bundler-2.1.4.gem
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Installing ri documentation for bundler-2.1.4
Done installing documentation for bundler after 2 seconds
1 gem installed

- Gemfile にインストールするGem を書く

(m・_・bp) 17:51 ~/Desktop/vsnote2.0/ruby % bundle init
Writing new Gemfile to /Users/uekiyoshihiro/Desktop/vsnote2.0/ruby/Gemfile

- bundle installコマンドでインストールする

(m・_・bp) 17:53 ~/Desktop/vsnote2.0/ruby % bundle install
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Using bundler 2.1.4
Fetching coderay 1.1.2
Installing coderay 1.1.2
Fetching method_source 1.0.0
Installing method_source 1.0.0
Fetching pry 0.13.1
Installing pry 0.13.1
Bundle complete! 1 Gemfile dependency, 4 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

- bundle updateコマンドでGemをバージョンアップする

(m・_・bp) 17:58 ~/Desktop/vsnote2.0/ruby % bundle update
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Using bundler 2.1.4
Using coderay 1.1.2
Using method_source 1.0.0
Using pry 0.13.1
Bundle updated!
```

## よく使うコマンド集
```console
$ bundle init #Gemfileを生成
$ bundle install	#Gemfileに書かれたgemパッケージをインストール
$ bundle exec	#Bundlerでインストールされたgemパッケージを使用してコマンドを実行
$ bundle list	#インストール済みのgemパッケージの一覧を表示
$ bundle update	#インストール済みのgemパッケージのバージョンを更新


```