あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

【Bundler】Gemfileのバージョン指定の書き方

GemfileはBundlerでgemの依存関係を管理するために必要な設定ファイルです。

Gemfileにはgem名とバージョンをgem 'rails', '~> 6.1.5'のようなフォーマットで記述します。

~> 6.1.5の正確な意味わかりますか?

~>の呼び方知ってますか?(トゥウィドルワッカと呼びます)

この記事ではGemfileのバージョン指定の書き方を解説していきます。

1. Gemfileのバージョン指定子の意味

バージョン指定 意味
1.0 1.0のみ
>= 1.0 1.0以上
~> 1.0 1.0以上2.0未満
~> 1.0.0 1.0.0以上1.1未満
指定なし 最新版
  • ~> 1.0はマイナーバージョン(0.x.0)は上がってもいいがメジャーバージョン(x.0.0)は上げたくないことを意味する
  • ~> 1.0.0はパッチバージョン(0.0.x)は上がってもいいがマイナーバージョン(0.x.0)は上げたくないことを意味する
# 以下二つは同じ意味
gem 'rails', '~> 6.1'
gem 'rails', '>= 6.1', '< 7.0'
# 以下二つは同じ意味
gem 'rails', '~> 6.1.5'
gem 'rails', '>= 6.1.5', '< 6.2'

2. twiddle wakka(トゥウィドルワッカ)とは

~>がtwiddle wakkaです。

Gemfileのバージョン指定にはoptimistic version constraint(楽観的なバージョン指定)とpessimistic version constraint(悲観的なバージョン指定)があります。*1

  • optimistic version constraint
    • gem 'library', '>= 2.2.0'
  • pessimistic version constraint
    • gem 'library', '>= 2.2.0', '< 3.0'

このpessimistic version constraintの省略記法としてできたのが~>(twiddle wakka)です。

gem 'library', '>= 2.2.0', '< 3.0'をtwiddle wakkaを使って書くとgem 'library', '~> 2.2'になります。

Jim Weirich氏により当初は>*という書式で追加されたのちに、現在の~>に変更されたみたいです。*2

~>をなんでtwiddle wakkaと呼ぶようになったかについては、プログラマーたちの間で~(チルダ)をtwiddleと呼び、<>(山括弧)をwakkaと呼ぶようになったことからきてるらしいです。*3


【参考】