Help us understand the problem. What is going on with this article?

Rails初心者が知っておきたい基礎知識|gem、Bundler など…

この記事では、《Rails初心者が知っておきたい基礎知識》について、
業務を通して学習した内容をまとめています。

  • gem とは…?
  • Gemfile とは…?
  • Gemfile.lock とは…?
  • Bundler とは…?

こういった疑問についてまとめています。

※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。

gem とは…?

books-918521_1920.jpg

『gem』は・・・

Rubyのライブラリ(パッケージともいいます)です。

『ライブラリ』とは…
プログラムの部品で、便利な機能をひとまとめにしたものです。

ライブラリを利用することで、自分で1からコードを書くことなく機能を実装することができるので、効率的に開発することが可能です。

Rubyのgemには便利なものがたくさんあり、例えば…

  • Rails(Webフレームワーク)
  • Devise(ログイン機能)
  • Kaminari(ページネーション)
  • unicorn(アプリケーションサーバ)
  • Active Admin(管理画面)

などがあります。
gemを使うことでログイン機能やページネーションといった機能も、簡単に実装可能です。

Gemfile とは…?

『Gemfile』は・・・

gemをインストールするための『設計書』のようなもので、基本的にこのGemfileに自分のアプリケーションに必要なgemを記述します。

Gemfile.lock とは…?

『Gemfile.lock』は・・・

gemをインストールした後の『ログ、記録』のようなもので、インストールしたgemの一覧とバージョンが記載されています。

【比較】Gemfile と Gemfile.lock の違い

Gemfile Gemfile.lock
更新方法 手動 自動
更新タイミング コマンド実行前 コマンド実行後
内容 インストールするgem インストールしたgem

【余談】なぜ Gemfile.lock が必要なのか…?

school-1.jpg

gemは、インストールした時期によってバージョンが変わってしまう可能性があるため…
例えば、本番環境と開発環境でインストールされるgemのバージョンが異なってしまう可能性があります。

しかし・・・

Gemfile.lockが使用するgemのバージョンを管理してくれるため、仮にgemがアップデートされても、使用するgemのバージョンは変更させないということが可能になります。

ちなみに・・・

Gemfile.lockを更新したい時は、bundle updateを使います。

Bundler とは…?

『Bundler』は・・・

gemを管理するためのgemで、Bundlerを使用することで…

bundle install
bundle update

などのコマンドが使用できるようになります。

gem同士は関連し合っていることが多いので、実際はGemfileに書いてあるgemの他にも、gemが必要になります。

そこで・・・

Bundlerは、それらも自動でインストールし、Gemfile.lockに記述してくれます。

bundle_movement.png

Bundlerは、特定のRailsアプリケーションに必要なgemパッケージをリストアップし、複数のコンピュータ間で簡単に同期が取れるようにするものです。

例えば・・・

上記の図のように開発者Bさんが、開発者AさんからRailsアプリのソースコードを受け取ったとします。

この時、Bさんはbundle installを実行するだけで、必要なgemをインストールすることができ、簡単に環境を構築できます。

【一覧】 よく使う Bundlerコマンド のオプション

コマンド 概要
bundle init Gemfileを生成
bundle install Gemfileに記述したgemをインストール
bundle update インストール済みのgemのバージョンを更新
bundle list インストール済みのgemを一覧表示する
bundle exec Bundlerでインストールしたgemを使用して、
コマンドを実行

【コマンド】 bundle install とは…?

bundle install

上記を実行すると・・・

Railsは、Gemfile.lockを元にgemのインストールを行います。

この時…

Gemfile.lockに記述されていなくて、且つGemfileに記述されているgem』

がある場合、『該当するgem』と『該当するgemに関連するgem』をインストールした後、Gemfile.lockを更新します。

反対に、Gemfile.lockに記述されていれば・・・

そこに記述されたgemを見て、それがGemfileの内容に矛盾していない限り、Gemfile.lockの内容に従いインストールします。

【コマンド】 bundle update とは…?

bundle update

上記を実行すると・・・

Bundlerは、Gemfileを元にgemのインストールを行い、その後Gemfile.lockを更新します。

【余談】上記2つのコマンドの使い分けを少し解説

camera-coffee-composition-1509428.jpg

bundle updateは・・・

その言葉通り、gemのバージョンを更新する時に使用します。

なぜなら・・・

bundle installコマンドでは、条件に矛盾が生じない限りGemfile.lockに存在するgemに関しては、更新作業を行わないからです。

bundle updateは、本番環境で安易に実行しないように注意しましょう。場合によっては、gemのバージョンにズレが発生し、クラッシュする可能性があります。

ですので・・・

bundle updateは、必ずローカル環境で実行してください。

また、bundle installに関しては・・・

Gemfileに新しくgemを記述した際に使用します。

yaaabu51
明石高専 → 某重工で4年間ガスタービンの生産技術とか → 退職 →1年勉強(ふらふら)→ IT業界1年生
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした