Slide 1

Slide 1 text

各所に分散しがちな Rubyのバージョンを 上手に管理する

Slide 2

Slide 2 text

Inspired by

Slide 3

Slide 3 text

あなたのRubyバージョン、 散らばってませんか?

Slide 4

Slide 4 text

.ruby-version $ cat .ruby-version 3.4.2

Slide 5

Slide 5 text

CI # .github/workflows/setup-ruby.yml name: My workflow on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: '3.4'

Slide 6

Slide 6 text

Gemfile source "https://rubygems.org" ruby "3.4.1" gem "rails"

Slide 7

Slide 7 text

Dockerfile FROM ruby:3.4 WORKDIR /usr/src/app COPY Gemfile Gemfile.lock ./ RUN bundle install

Slide 8

Slide 8 text

あなたのRubyバージョン、散らばってませんか? 1. .ruby-version 2. CI 3. Dockerfile 4. Gemfile

Slide 9

Slide 9 text

課題 様々な場所にRubyのバージョンが書かれていて、アップデートのときに書き換えが大変 😩 更新箇所がたくさんあると、アップデート時に書き換え漏れが発生するリスク 💣 各環境(本番環境・開発環境・CI環境 etc.)でRubyのバージョンをパッチバージョン含めて完全に一致させたい...!

Slide 10

Slide 10 text

ソリューション .ruby-version で一元管理する

Slide 11

Slide 11 text

.ruby-version Rubyのバージョンを指定するためのテキストファイル rbenv, mise などのバージョンマネージャーは.ruby-versionを自動的に読み取ってRubyバージョンを切り替えてくれる

Slide 12

Slide 12 text

GitHub Action: setup-ruby ruby-versionを明示的に指定せずとも、ruby/setup-ruby は.ruby-versionからRubyバージョンを自動で設定してくれる。 inputs: ruby-version: description: | Engine and version to use, see the syntax in the README. Reads from .ruby-version, .tool-versions or mise.toml if unset. default: 'default' see. https:/ /github.com/ruby/setup-ruby/blob/master/action.yml

Slide 13

Slide 13 text

actions/setup-rubyは非推奨 歴史的には actions/setup-ruby 👉 ruby/setup-ruby の流れ どちらも公式から出されているActionで正しいように見えるが、前者のactions/setup-ruby はもうメンテされていないので、使わないように ‼️

Slide 14

Slide 14 text

Dockerfile Rubyバージョンを含むイメージタグを環境変数(RUBY_VERSION)に切り出しておくと扱いやすい ARG RUBY_VERSION FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base こうすることでRubyバージョンを.ruby-versionから受け渡すことが可能に $ docker build --build-arg RUBY_VERSION=$(cat .ruby-version) .

Slide 15

Slide 15 text

TIPS: Rails 7.1 でDockerfileが自動生成されるようになった 下記のようなDockerfileが生成される。 # Make sure RUBY_VERSION matches the Ruby version in .ruby-version ARG RUBY_VERSION=3.4.2 FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base (定義が重複してしまうものの)RUBY_VERSIONのデフォルト値として、.ruby-versionと同じバージョンを指定しておくと、いちいちRUBY_VERSIONを指定しなくて楽。

Slide 16

Slide 16 text

TIPS: Dockerfileのイメージタグの更新はdependabotにお任せすることも可能

Slide 17

Slide 17 text

Gemfile 実は、Bundlerに.ruby-versionからRubyバージョンを指定する機能があったりする。 If you wish to derive your Ruby version from a version file (i.e. .ruby-version), you can use the file option instead. ruby file: ".ruby-version" ref. Bundler: Ruby Directive see also. GemfileでのRubyバージョン指定を.ruby-versionから読む - koicの日記

Slide 18

Slide 18 text

まとめ Rubyバージョンは.ruby-versionで一元管理できる

Slide 19

Slide 19 text

END