Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

RubyGemsのバージョン違いによりGemfile.lockに差分が出ることがある

デプロイ先の環境で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のバージョンを疑ってみると良いかもしれません。


BPSアドベントカレンダー2025


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。