しふみんのブログ

しふみんのブログです。

Heroku+RailsでLine botを作る 第5回 Bundlerの導入

前回までのあらすじ

第1回: http://shifumin.hatenablog.com/entry/2018/04/20/000500
第2回: http://shifumin.hatenablog.com/entry/2018/04/22/002000
第3回: http://shifumin.hatenablog.com/entry/2018/04/23/000500
第4回: shifumin.hatenablog.com

LINEデベロッパー登録を終え、必要なAPIキーである「Channel Secret」と「アクセストークン」を手に入れました。
また、必要なパッケージの導入し、Rubyをインストールしました。
そして、プロジェクトディレクトリをバージョン管理できるようにGitリポジトリ化しました。
今回は、Bundlerの導入を行っていきたいと思います(また、Railsアプリの作成まで辿り着けなかったよ……)

Bundlerとは

Rails(Ruby)アプリはBunlderというgem管理システムを導入することが多いです。
Ruby用のライブラリ(便利ツール的なもの)は「gem」という形で提供されています。
例えば、Railsもgemの形で提供されています。
このgemをGemfile(とGemfile.lock)というファイルで管理するためのシステムがBundlerです。
インストールするgemの種類・バージョン管理しているGemfile(Gemfile.lock)さえあれば同じgemの環境を整えることが容易であるため、複数人や複数の環境で開発を行う場合に役立ちます。

詳しくは下記を見てください(いつも通りの投げ)

Bundler: The best way to manage a Ruby application's gems qiita.com

Bundlerのインストール

そういうわけで、Bundlerをインストールしていきます。
念のため、gem自体をアップデートしてからBundlerをインストールします。

gem update --system
gem install bundler
bundle --version # bundle -v でも可
Bundler version 1.16.1

Bundlerがインストールされました。

Gemfileの準備

続けてBundlerで使用するGemfileの準備に進みます。
Gemfileとはインストールするgemの種類やバージョンを記載するファイルです。
まず、 bundle init でGemfileを作成します。

bundle init
Writing new Gemfile to /Users/shifumin/project/line_bot/Gemfile

Gemfileが作成されましたので開いて内容を確認します。

vim Gemfile # お使いのエディタでGemfileを開いてください(以下略)
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# gem "rails"

上記のようなGemfileになっているはずです。
まず、Railsアプリを実行するRubyのバージョンを明示するために ruby "2.5.1" の行を追加しましょう(バージョンは適宜ご変更ください)
次に、Railsをインストールするために gem "rails"コメントアウトを外しましょう。
また、一応Railsのバージョンを固定しておきましょう。
バージョンを固定する理由は、バージョンを固定しないとBundlerでgemをインストールする時期によってインストールされるgemのバージョンが左右されてしまうためです(やや曖昧な説明。許して)
バージョンが異なるとgemの挙動が変わって意図しない挙動をする場合があります(バグの温床になる)
例えば、現在(2018年4月24日)はバージョンを固定しない場合はRailsは5.2.0がインストールされますが、もう少し先の未来にはそれが5.2.1, 5.2.2, あるいは5.3.0になったりするはずです。
それでは、下のようにGemfileを修正しましょう。

# frozen_string_literal: true
ruby "2.5.1"

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails", "5.2.0"

rails gemのインストール

下記の bundle install コマンドでrails gemをインストールします。

bundle install --path vendor/bundle

--path vendor/bundle のオプションを付けています。
pathを指定する理由は、pathを指定しないとシステム配下にgemがインストールされてしまうためです。
今回インストールするgemはこのbot作成のためだけにインストールするので、プロジェクトディレクトリ配下にインストールされるようにpathを指定します。
詳しくは下記の公式ドキュメントの真ん中らへんをご参照ください。

Bundler: The best way to manage a Ruby application's gems

初回のインストールには数分かかるはずです。

Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rake 12.3.1
Fetching concurrent-ruby 1.0.5
(中略)
Fetching rails 5.2.0
Installing rails 5.2.0
Bundle complete! 1 Gemfile dependency, 41 gems now installed.
Bundled gems are installed into `./vendor/bundle`

Rails gem(とその依存関係のgem)は ./vendor/bundle/ にインストールされました。

終わりに

今回はBundlerを導入し、rails gemをインストールしました。
次回こそ、本当の本当にRailsアプリの作成を行なっていきましょう(三度目の正直)
この次に実行するコマンドが rails new であるため次回の記事で大丈夫(?)なはずです。。。

参考

Bundler: The best way to manage a Ruby application's gems
http://bundler.io/

Bundlerの使い方 - Qiita
https://qiita.com/oshou/items/6283c2315dc7dd244aef

bundle install - Bundler: The best way to manage a Ruby application's gems http://bundler.io/v1.16/bundle_install.html