デプロイ先の環境でbundle installした際にGemfile.lockに差分が出るということが発生しました。
Gemfile.lockの差分
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -141,9 +141,10 @@ GEM
railties (>= 6.1.0)
faker (3.5.1)
i18n (>= 1.8.11, < 2)
- ffi (1.17.2-aarch64-linux-gnu)
+ ffi (1.17.2)
+ ffi (1.17.2-aarch64-linux)
ffi (1.17.2-x86_64-darwin)
- ffi (1.17.2-x86_64-linux-gnu)
+ ffi (1.17.2-x86_64-linux)
...略
このようにデプロイ先の環境でbundle installを実行したところgemのバージョンは同じでもプラットフォーム表記に差分が発生していました。
原因
Dependabotで使用するRubyGemsとデプロイ先環境のRubyGemsのバージョンが異なっていたためでした。
今回差分が発生したGemfile.lockの該当箇所はGitHubのDependabotによって更新したものでした。DependabotがどのバージョンのRubyGemsを使用しているかはわかりませんが割と新しめのバージョンが使われていたのだと思います。それに対しデプロイ先環境のRubyGemsはしばらく更新していない古いバージョンを使用していました。つまりは以下のようなことが起きていました。
- デプロイ先環境でbundle install後に
ffi (1.17.2-x86_64-linux-gnu)からffi (1.17.2-x86_64-linux)にプラットフォーム表記が変更されている。 - デプロイ先環境ではRubyGems 3.3.7を使用している。
- Dependabotが更新した
ffi (1.17.2-x86_64-linux-gnu)はRubyGems 3.3.22以上が必要である。
参考: ffi | RubyGems.org | コミュニティのgemホスティングサービス
ということで、DependabotはRubyGems 3.3.22以上を利用していたのに対し、デプロイ先環境では3.3.7を利用していたためGemfile.lockに差分が発生していました。
対応
デプロイ先環境のRubyGemsをアップグレードすることで差分を解消しました。
おわりに
RubyGemsのバージョン違いによってGemfile.lockに差分が発生する事例を紹介しました。今回の事例はレアケースかもしれないので今後発生することは少ないかもしれませんが異なる環境でGemfile.lockに差分が生じていたらRubyGemsのバージョンを疑ってみると良いかもしれません。
