iOS開発で利用するcocoaPods、Fastlane、BundlerなどはRubyのGemです。プロジェクトの立ち上げやバージョン更新時しか触る機会がないため忘れないようにまとめておきます。
目次
macOS同梱のRubyについて
macOSにはRubyがプリインストールされています。下記コマンドでバージョン確認が可能です。
ruby -viOSアプリ開発ではこちらのRubyは利用しません。理由としてはシステムのRubyバージョンは固定されているため切り替えることができないためです。例えばcocoaPodsなどは最新のRubyバージョンなどを要求するので古いバージョンだと利用できません。OSアップデートなどで勝手にバージョンが変わってしまう場合もあります。
Rubyをインストールする
プリインストールのRubyは先のようなデメリットがあるため、iOSアプリ開発では任意のRubyをインストールしてプロジェクトで利用できるようにします。
Homebrewで直接Rubyをインストールする場合
brew install rubyHomebrewから直接Rubyをインストールする方法です。この場合はシステムに1つのRubyを追加することになるため、プロジェクトを分けてrubyバージョンを切り替えることができません。
保存先は/opt/homebrew/opt/rubyなどになるはずです。
rbenvでRubyをインストールする場合
brew install rbenvこちらが最も利用されている方法でHomebrewからrbenvというGemをインストールし、rbenv経由でRubyをインストールします。rbenvはRubyを複数バージョン管理できるGemでプロジェクトごとにRubyバージョンを指定することが可能です。
Rubyをインストールする場合は下記コマンドを実行します。
rbenv install 3.2.5rbenvの設定について
rbenvを利用してインストールしたRubyは/usr/local/や/opt/homebrew/にインストールされます。気をつける点としてはシステムにもRubyが存在するためrbenvでインストールしたRubyを優先的に拾えるようにパスを通す必要があります。
Rubyの保存先を確認
rbenv which ruby
// ~/.rbenv/versions/3.x.x/bin/rubyこちらはRubyの実態が保存されているパスを確認することができます。パスを通すときにこちらを指定してしまうと切り替えができなくなるためshimsを含む別のパスを通します。
shimsとは
rbenvが管理するRuby実体への中継ファイルです。Rubyやgemコマンドを実行するときshimsの内容を読み取ってどのRubyバージョンを使うかを決めます。
shimsは次の順で実行するRubyを決めます
- カレントディレクトリの.ruby-version
- rbenv localの設定
- rbenv globalの設定
shimsのパスの通し方
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"まずrbenvを利用することができるようにPATHに追加し、そのあとrbenvのinitを実行することでshimsまでのパスを先頭に追加してくれます。
グローバルとローカルで利用するrubyバージョンを設定する
rbenv global 3.2.5
rbenv local 3.2.6globalはシステム全体でlocalはプロジェクト単位です。プロジェクトのルートに.ruby-versionファイルがある場合はそちらが優先されます。
バージョンを確認したい場合は下記コマンドを実行します
rbenv global
rbenv local インストールしているすべてのRubyバージョンを確認したい場合は下記を実行します
rbenv versions新しいRubyバージョンをインストールしたとき
shimsの状態を最新にするために下記コマンドを実行します。
rbenv rehashBitrise上での注意点
BitriseのmacOSスタックにはrbenvがプリインストールされており、選択したスタック(Xcodeのバージョン)によってデフォルトのRubyバージョンが異なります。そのためプロジェクトで指定していた.ruby-versionを使おうとしても、デフォルトではインストールされておらずビルドに失敗することがあるため必要に応じてRubyバージョンの更新を検討する必要があります。
asdfでの指定について
Rubyのバージョンを管理するツールはrbenvのみではなく、asdfとオープンソースのバージョン管理ツールがあります。
Bitriseでwhich rubyでrubyの保存先を確認すると下記のパスが出力されました。これはBitriseがRubyバージョンの管理方法をrbenvではなくasdfで行っているためです。
/Users/vagrant/.asdf/shims/rubyasdfでのRubyバージョンの指定は.tool-versionsで行うのですが、.ruby-versionで記述しても読み取ってくれます。