Rubyで開発するなら、ぜひ、bundlerを使ってください。Rubyには、便利なgemが幾つもあり、それらはWebシステムの開発にも活用されています。
しかし、gemの多くは頻繁にアップデートされており、最新版をインストールすると、本番環境と開発環境が合わなくなることも。その点bundlerなら、gemのバージョンまで細かく管理が可能です。そこで今回は、このようなbundlerの機能と使い方について。詳しく紹介します。
bundlerはgemを管理する仕組み
Ruby on RailsでWebシステムを開発するなら、bundlerの導入は必須と考えてください。今回紹介するbundlerは、Ruby on Railsの開発に利用するgemを管理する仕組みです。
例えば、本番環境と開発環境のgemは、全く同じバージョンが使われているでしょうか。bundlerを使っていれば、同じバージョンの環境が作れます。まずは、bundlerの役割について解説します。
bundlerの役割
bundlerは、gemの依存関係とバージョンを管理するためのツールです。なお、bundlerが管理するgemとは、RubyGemsが公開しているRubyのパッケージ、または、そのパッケージを管理する仕組みの名称で、Ruby on Railsによる開発には欠かせません。
そもそも、Ruby on Railsをインストールする際にも、gemコマンドを利用するくらいです。しかし、利用するgemの数が多くなると、gemコマンドをマニュアル操作で実行するだけでは管理できません。
そこでgemを管理するためのツール、bundlerが使われています。これを利用することで、チーム全員の開発環境を同じgemに統一したり、開発するシステムに合わせてgemのバージョンを切り替える、といったことが可能です。
gemのバージョンによる違いが大きい
先ほど、Ruby on RailsでWebシステムを開発するなら、bundlerの導入は必須と書きましたが、チームで開発する場合、bundlerが特に効果を発揮します。
なお、チームで開発する場合、開発環境にインストールされたgemのバージョンを合わせることが重要です。それは、gemによっては頻繁にバージョンアップが行われており、バージョンが違うことで正常に動作しないことがよくあるからです。
その点、bundlerでは、設定ファイルに利用するgemやそのバージョンを記述しておけば、簡単なコマンドでそのgemをインストールできます。そして、チームで同じ設定ファイルを使っていれば、全く同じ環境の構築が可能です。
bundlerを利用する場合の注意点
何度も説明しているように、Ruby on Railsによる開発ではbundlerの利用は必須です。しかし、このような管理ツールを導入する場合、注意してほしい点が幾つかあります。中でも注意してほしいのが次の2点です。
まず、gemをインストールするフォルダまたはディレクトリに注意してください。幾つかのプロジェクトを並行して進めるような場合は、本番環境に合わせた開発環境の切り替えが必要です。gemをどこに置いたかを、きちんと把握していなと、間違ったバージョンを使ってしまうかもしれません。
また、gemの管理は、gemコマンドでも可能です。そのため、gemコマンドとbundlerコマンドの両方を使っていると、特定のバージョンを使う予定が最新版にアップデートされていたり、また、その逆のケースもあるなど混乱してしまいます。bundlerを使うと決めたら、gemの操作を全てbundlerを使うよう徹底してください。
bundleコマンドの使い方
先ほど説明したように、bundlerは、Rubyの外部ライブラリであるgemを管理する仕組みです。そして、bunderの機能を利用するには、bundleコマンドを利用します。なお、このコマンドは、Rubyがインストールされていれば、Windowsならコマンドプロンプトで、また、macOSやLinuxではターミナルなどで実行可能です。
bundleコマンドの文法
先ほど紹介したとおり、bundlerで使うコマンドは「bundle」です。そして、「bundle」は、第1引数がコマンドを、続けてオプションを指定することで、gemのインストールやアップデートなどを実行します。
bundleコマンドの文法
bundle コマンド オプション
bundleの実行例 $ bundle version Bundler version 2.1.4 (2020-01-05 commit 32a4159325)
bundleコマンドのヘルプを表示する
bundleコマンドでは、キーボードから利用したい機能に合わせてコマンドやオプションを打たなければなりません。もちろん覚えていれば簡単ですが、オプションを確認したいケースもあるでしょう。そのような場合に利用するのが、bundleコマンドに組み込まれたヘルプ機能です。
ヘルプを表示する例 $ bundle install --help
このコマンドを実行すると、bundleのinstallコマンドに続いて指定できるオプションの簡単なヘルプを表示します。
管理ファイルの書き方
bundlerでは、専用の管理ファイルを使用し、このファイルに管理対象のgemの名称やそのバージョンなどを指定します。なお、このファイルはテキストファイルなので、簡単に編集が可能です。
例えば、bundlerの管理ファイルを使って、Ruby on Railsなどで利用するgemをインストールする場合は、次のとおりです。
bundlerの管理ファイルの例 gen 'sinatra' gem 'json', '~> 1.7' gem 'tw', :git => 'git@github.com:shokai/tw.git'
この例では、sinatra、1.7系の最新のjson、githubにある開発版のtwの3つのgemをbundlerで管理します。
よく使うbundlerのコマンド
コマンドプロンプトやターミナルからbundleコマンドを使う場合、マニュアルに書いてある多くのコマンドやオプションから、使いたい機能を選びます。しかし、それをキーボードから打ちこむのは面倒です。
そのため、bundlerを活用しているエンジニアは、よく使う機能のみ覚えておき、それ以外はマニュアルをチェックする、といった具合に使います。次から、Ruby on Railsなどを開発する場合などでよく使われる機能に絞り、その使い方について紹介します。
bundlerの管理ファイルを作るコマンド
先ほど説明したよにbundlerを利用するには、管理ファイルが必要です。まずは、bundleコマンドで管理ファイルを作りましょう。なお、管理ファイルを作成するコマンドは、bundle initです。
管理ファイルを作るコマンド
bundle init
このコマンドで、実行したフォルダまたはディクレトリに管理ファイル「Gemfile」が作られてます。そして、このファイルに使いたいgemを追加しておくことで、bundleコマンドで管理が可能です。
gemをインストールするコマンド
gemの管理でよく使われる機能が、gemのインストールです。gemのインストールは、gemコマンドからもできますが、バージョン管理が必要なケースではbundle installコマンドを利用してください。
bundle install [オプション]
なお、オプションで、gemをインストールするPATH名や、管理ファイルなどを指定できます。また、管理ファイルにgemのバージョンを書いておくことで、最新版ではなく、そのバージョンをインストールできます。
bundle installの例 $ bundle install --path vender/bundle
この例は、gemのインストール先として、「vender/bundle」を指定して、gemのインストールを実行します。
gemをアップデートするコマンド
今も開発が続いている便利なgemが数多くあり、それらは頻繁にアップデートされています。もし、bundlerで管理しているgemの最新版が必要な場合は、bundle updateコマンドで更新が可能です。
bundle update [オプション]
updateコマンドも、オプションでインストールする場所や管理ファイルなどを指定できます。
bundle updateの例 $ bundle update --gemfile Gemfile_projA
この例では、管理ファイルとして、「Gemfile_projA」を指定し、それに記載されたgemのアップデートを実行します。
bundle exec コマンド
bundle installコマンドでインストールしたgemに、PATHが通っているとは限りません。そして、多くの場合、PATHが通っていないことで、gemコマンドの実行、およびrubyのプログラムからの参照に失敗します。
bundle installコマンドでインストールしたgemを利用するには、bundle exec から実行しなければなりません。例えば、railsコマンドを実行する場合、bundlerを使ってインストールしたgemを利用した場合は、次のコマンドを実行します。
bundle execの使用例 $ bundle exec rails s
この例では、「rails s」を実行する際、bundlerを使ってインストールしたgemを利用しているので、「bundle exec」から実行しています。
まとめ
これまで説明したように、bundlerは、Ruby on Rails開発で必要とされるgemパッケージを管理する仕組みで、特にチームで開発する際は必須と言えるでしょう。ただし、コマンドラインやターミナルから実行する仕組みであり、コマンドやオプションが多いので、使い難いと感じる方がいるかもしれません。
しかし、よく使うコマンドは多くありません。また、設定ファイルさえきちんと管理できていれば、とても便利な仕組みです。ぜひ、使い方をマスターして、Ruby on Railsの開発に活用してください。