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

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

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

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

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

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

バージョン指定意味
1.01.0のみ
>= 1.01.0以上
~> 1.01.0以上2.0未満
~> 1.0.01.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


【参考】