ジョブカン事業部のアドベントカレンダー6日目です!
昨日に引き続き、DONUTS札幌オフィスでジョブカン採用管理の開発インターンをしている@knotです。
新・RPG ジョブ診断が流行っているのでやってみました。リスクマネジメントが強みらしいです。
ということで、今回はリスクマネジメントの一環としてRubyバージョンアップを任せて頂けたので、この機会にやったこと・感想ナドナドを雑にまとめてみようと思います。
バージョンアップの概要
ジョブカン採用管理では、Ruby
を採用しています。
今回はRuby 3.1系
からRuby 3.2系
へのバージョンアップに挑戦しました。
なんでバージョンアップしなきゃいけないの?
せっかくなのでバージョンアップをする理由から、考えをまとめてみます。
以下の3観点が主かと思います。
- バグ修正
- セキュリティ向上
- 新機能の追加
言語側が原因のバグを踏んで万が一サービスが止まったりしてしまったら大変ですし、脆弱性を放置し続けたせいで何らかのセキュリティ事故が起こってしまうのは怖いです。したがって、言語アップデートによるバグ修正とセキュリティ向上は、長く使われるソフトウェアにとって大切なことだと思います。
また、言語の新機能追加は、新機能の開発やリファクタリングなどの役に立つかもしれません。
やったこと
現在の安定版を調べる
Rubyのダウンロードページに現在の安定版が載っているので、まずこちらを確認しました。
現在は3.2.6
と3.3.6
が安定版のようです。
Ruby 3.2.0からの変更点を知り、調査する
Ruby 3.2.0のリリースノートを読む
Ruby 3.2.0のリリースノートを読みに行きました。
(日本語でリリースノートを解説している記事もあったので、併せて参考にしました)
3.2.0のリリースノートには、マイナーバージョンが上がるにあたっての変更点がいろいろ書いてあります。メソッドや定数の削除や、今回だと3rdパーティライブラリの同梱廃止などもあるので、影響がありそうなものには注意します。
ソースコードに影響があるものがないか調査する
リリースノートに書いてあったもので、動作に影響があるものはないか調査しました。
今回は3.1 -> 3.2
なので、例えばFile.exists?
やKernel#=~
を使用していないかを調べることになります。(Kernel#=~
は{変数} =~ /hoge/
のパターンがあるのでわかりにくい)
Gemをバージョンアップする
使用しているGemがRubyのバージョンアップの影響を受けて動かなくなってしまっては困るので、対象になりそうなGemを調査してバージョンアップをかけます。
Gemの調査
RubyGemsで使用しているGemのリポジトリを探して、リリースノートなどを読みました。Ruby 3.2への対応をしているGemがあれば、そのGemのバージョンを上げます。
また、CIなどの設定にRuby 3.2が追加されている場合もRuby 3.2での動作が保証されているということになるので、Gemを該当のバージョンへ上げるようにします。
Rubyのバージョンを上げる
Gemのバージョンアップを済ませたら、Rubyのバージョンを上げます。
バージョンの上げ方は環境によっていろいろあると思うので、rbenv
なりimageのバージョンを変えるなりして上げましょう。
動作確認する
バージョンアップができたら、動作確認をします。
RSpecを回してバージョンアップが原因でテストが落ちたりしないか確認します。また、RSpecや手動で動作確認しているときに、ログに警告などが出てこないかにも注意します。
おわり
ここまでできれば作業は終了です。
まとめ・感想
こうして書いてみるとそこまで量がありませんでしたが、初めてだったこともあり中々カロリー高めではありました。Rubyバージョンアップを通して感想や勉強になったこと書いてみます。
OSSへのコントリビュート勘所がなんとなくわかる
あらゆるGemのリポジトリを見て回るので、リリースノートやプルリクからどんな感じでコントリビュートされているかがわかりました。ドキュメントのリンクが壊れていたから直したというような簡単なものから、がっつり機能追加している難易度の高そうなものまでありました。また、OSS開発にもいろいろ事情があるということも知ることができました。
ユニットテストのありがたみ
ユニットテスト(RSpec)が用意されていれば、Rubyバージョンアップの影響確認がかなり楽にできるということがわかりました。これからもサボらずユニットテストは書いていこうと思います。
普段見る機会のない箇所への理解
影響確認のために、普段見ないところの内部処理を見に行くことがあります。Gemのちょっと深いところを見たりもしたので、自分のプロジェクトやGemのあまり見ないところを見ることができて勉強になりました。
使用しているGemについての知識
前の項目と被るところがありますが、プロジェクトで使用しているGemについていろいろ知ることができました。名前だけは見たことあるけど具体的な使い方を知らなかったものや、めったに登場しなくてほとんど何も知らないGemについてもいくらか触れる機会があるので、こちらも勉強になりました。
さいごに
DONUTSでは新卒中途問わず積極的に採用活動を行っています。
インフラエンジニアの募集などもあるので、ご興味あればぜひご覧ください!