Gemfile.lockのDEPENDENCIESの!
自前のgemサーバーを立てたプロジェクトでGemfileを修正したところ、Gemfile.lockのDEPENDENCIESに!が差分として入るようになったのでその理由を調べてみた。
一応それらしい情報は見つかったものの、説明にバラツキがあり今一つピンと来ない。
https://stackoverflow.com/questions/7517524/understanding-the-gemfile-lock-file
Bundlerは一体何をやっているのか?
仕方ないのでbundlerのソースを確認してみると、こんな感じで!を付けてました。
def to_lock
out = super
out << "!" if source
out << "\n"
end
sourceの判定
def source
(defined?(@source) && @source) || Gem::Source::Installed.new
end
なるほど・・・
つまりsourceの判定結果次第で!が付く仕組みになっているので、先ほど見たStack Overflowに書いてある内容はどれも概ねあっているけど実際の挙動と微妙に違う、ということになりそうな気がします。
気になるので、一応挙動を確認しておきます。
動作確認
Global Sourceで rubygems.org を指定た状態で、意味はないけどあえてインストールするgemにsource
オプションをつけて同じ rubygems.org を指定してみます。
source "https://rubygems.org"
gem 'rails', source: "https://rubygems.org" # あえてsourceオプションをつけてみる
この状態でbundle install
すると、予想通り DEPENDENCIESに ! が付きました。
DEPENDENCIES
rails!
bundler1.0.0の頃から変更は入ってないようなので大体どのバージョンでも同じ結果になると思います。
まとめ
Global Source以外に:source
オプションやsource
ブロックを使用すると、Gemfile.lockのDEPENDENCIESに!が付くようになる。