TL;DR
gemfileが更新されていない場合gemfile.lockにあるrevision
のcommit hashを見に行ってしまうので
console
bundle update gem-name
しましょう
問題
社内で使っているライブラリにfork -> PR -> merge
まで行っていざ確認してみようとすると追加したはずのmethodが未定義と言われてしまっていた。
解決までしたこと
まず何なら使えるのかを確認
rails_console
# respond_to?はメソッドが存在するかどうかを確認するやつです
GemName respond_to? :configure #-> true
GemName respond_to? :new_added_method #-> false
# PRで入れたはずのメソッドがないことに気づいてgem自体は問題なく入っているかどうかを確認
GemName.added_a_lomng_time_ago_method #-> 通った
ここでPRの内容がまるっと入っていないことに気づいてHEADがずれてるんじゃないかみたいなことを検討した
console
git clone git@github.com:my-org/gem-name # forkではなく大元のリポジトリをclone
git rev-parse HEAD #-> 00ff0012345
git rev-parse master #-> 00ff0012345(HEADと同じなのを確認)
ずれてないねってことで試しにcommit hashでgemを指定
gemfile
gem 'gem-name', git: 'git@github.com:my-org/gem-name', ref: '00ff0012345'
# bundle install する
rails_console
GemName.new_added_method #-> 通った!
ので、gemfile.lock
を確認した所、revision
が変わってた。ここが原因やったんやな…………
この後
gemfile
gem 'gem-name', git: 'git@github.com:my-org/gem-name', branch: 'master'
にしても問題なかったです。まあcommit hash指定時にrevision
がHEADになったから想定内。
本来すべきこと
まあそもそもinstallはgemfile.lock
を元に行われることなので当たり前といえば当たり前なのですが、bundle update
を使う必要がありました。リポジトリを直接指定していることにばかり気を取られて完全に忘れてました。
もしbundle installと同時にupdateを行いたい場合はまとめて行う実行ファイルを作成する必要があります。