ローソンデジタルイノベーション(LDI)のiOS/Android開発リーダーの阪口です。
iOSアプリの開発環境で、fastlaneの導入やCI/CDの環境構築など、Gemfileが必要になる機会がいくつかあるかと思います。
今回は、Gemfile.lockの設定で発生したトラブルと、その解決方法について紹介します。
動作環境
Mac OS:Sequoia 15.2
Xcode:16.1
Ruby:2.7.5(rbenv経由でインストール)
Bundler:2.4.22
発生したトラブル内容
最近、Mac Book proをM1チップのものから、M4チップのマシンへ変更しました。 M4に変更してから、iOSアプリで利用しているライブラリをビルドしようとすると、Gemfile.lockファイルで予期せぬ変更が自動で発生する状態になっていました。
今回は、この予期せぬ変更が発生しないように実施した解決方法を紹介します。
Gemfile.lockで発生した差分
- ライブラリA (x.xx.x-arm64-darwin) ライブラリA (x.xx.x-x86_64-darwin) ... - ライブラリB (x.xx.x-arm64-darwin) ライブラリB (x.xx.x-x86_64-darwin)
MacのM4など、Apple Siliconのハードウェアアーキテクチャ(CPU アーキテクチャ)は「arm64」ですが、上記のGemfile.lockでは、ライブラリAとライブラリBの「arm64」用のライブラリのバージョン指定が削除されており、Apple Siliconの環境でビルドしてほしいバージョン指定ができていない状態であることが分かります。
ハードウェアアーキテクチャに合ったバージョンでビルドされるようにするには、Gemfile.lockへ対象のBundlerのPlatformを追加する必要があります。
補足:マシンのハードウェアアーキテクチャ確認方法
ターミナルで uname -m
を実行すると、マシンのハードウェアアーキテクチャを確認することができます。
ハードウェアアーキテクチャがApple Siliconの場合は「arm64」、Intelの場合は「x86_64」が表示されます。
例:
% uname -m arm64
マシンのPlatformの確認方法
Rubyのバージョン情報を表示すると、後ろにBundlerのPlatformを確認することができます。
% ruby -v ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [arm64-darwin24]
arm64-darwin24
の部分がPlatfomの名称です。
Gemfile.lockへPlatformを追加
Gemfile.lockへPlatformを追加するには、bundle lock --add-platform <Platform名>
のコマンドをターミナルで実行します。
追加されると、下記のような記述がGemfile.lockへ追加されます。
PLATFORMS arm64-darwin-24
補足:<Platform名>に「arm64-darwin」を指定しない理由
bundle lock --add-platform arm64-darwin
で、「arm64」系全体を指定する設定もできますが、今回はこれだけだと解決しませんでした。
そのため、bundle lock --add-platform arm64-darwin-24
と後続の数値も指定しています。
最後に
今回は、Gemfile関連で発生したトラブルとの解決方法を紹介させていただきました!
こちらの情報が誰かのお役に立てれれば幸いです。
また、LDIに興味が出てきた方、または応援いただける方は是非「読者になる」で応援していただけますと嬉しいです!
よろしくお願いいたします。