Ruby のバージョン管理やアップグレード
Ruby のバージョンは毎年 12 月 25 日に新しいバージョンが公開される(3.0.1 → 3.1.0 みたいなアップデートバージョンの公開。もっと細かいバージョンは都度出ている)
その時に Ruby のバージョンアップをするが、そのままアップグレードしてしまうと今まで書いたプログラムが急に動かなくなったりすることもある
なので、 rbenv
というものを使って、使用する Ruby のバージョンを管理する必要がある
まず brew の rbenv をインストールする
$ brew install rbenv
既にインストールしているときは、Ruby のバージョンを上げるのに新しい rbenv が必要になるので、以下のコマンドで rbenv ( インストールしてる brew 全部)のアップデートをする
$ brew update
インストールできる Ruby のバージョンを確認する
$ rbenv install -l
Ruby のアップデートを install するために、 ruby-build
のアップデートをする
$ brew upgrade ruby-build
Ruby のアップデートをする(Mac 上で選択できる ruby のバージョンを install)
$ rbenv install 3.0.3
使用する Ruby のバージョンを変更する
$ rbenv global 3.0.3 # Mac上で動かすリポジトリ全部でdefaultで動かすバージョンの指定
$ rbenv local 3.0.3 # コマンドを打った時にいたリポジトリで使うバージョンの指定
これで Ruby の version が適用できたかどうかは、いつも通り $ ruby -v
で今いる Ruby の version の確認をすれば OK!
バージョンアップがあることとかを考えると、test が書いてあった方が、test を実行するだけですぐに動作の保証ができて楽
また、 Ruby の version up 後はその version の Ruby は gem の内容を知らないので、改めて $ bundle install
をしてあげる必要がある
ローカルでの Ruby バージョン指定のされ方と変更の仕方
$ rbenv local 3.0.3
を打つと、そのコマンドを打ったルートに .ruby-version
が作成され、その中に version 情報が書かれる
また、 $ rails new
した時でも、今は default で .ruby-version
が作成されるようになっている
このファイルのあるリポジトリを動かそうとすると、rbenv がその version の Ruby を有効化して、その version の Ruby でそのプログラムを実行してくれる
Gemfile の中にも、Ruby や Rails の version 情報を書くことができる
こうやって version を指定して書いておけば、 $ bundle install
で以下のように読み込むことができる
.ruby-version
に Ruby の version が 2.7 系って書いてあるのに Gemfile には Ruby の version は 3.0 系って書いてあると、Gemfile で指定している version(= これを使うと宣言している version)と使っている version が違うっていうエラーが起こる
複数人で開発を行うときは、Gemfile に version を明記しておいた方がいい(Gemfile に書いてあれば、そこを見るだけで使っている様々なものの version がすぐにわかる)
Ruby の version を上げる際に、version を固定しておいた方がいいもの
rails と postgresql は特にちゃんと明記しておくべき
Rails は version が変わると仕様が大きく変わるので動作チェックしながら慎重に version up すべきだし、仕様が大きく変わるのでちゃんと誰でもわかる状態にしておくべき
postgresql は自分の手元に入っている brew の version とリポジトリで使う postgresql の version が合わないと動かなくなるので、これもちゃんと誰でもわかるように書いておくべき
また、rails と postgresql に関しては、そういった理由もあるので Ruby の version を上げる時に影響しないように、Gemfile にそもそも version を書いておいて固定するべき
carrierwave とか、あとから自分で入れた上であえて version を指定してるものはそのまま version 指定しておく
なるべくならあえて version 指定するものに関しては version 指定する理由をわかるように書いておくべき
その他の gem は、特に指定せずに Gemfile に書いておき、 bundle update
する