Rubyのダウンロードにはリリースされたアーカイブの他に毎日作成している snapshot tarball があって、 rbenv install 2.8.0-dev
のような git
からのインストールだと ruby
コマンドが必要なので、 ruby
コマンドがない環境や autoconf
などがない環境で開発版の ruby
を試したい時などに便利です。 それを rbenv install
でインストールできるようにするプラグイン ruby-build-snapshot を作りました。
動作確認環境
インストール
rbenv/rbenv を参考にして rbenv
をインストールしておきます。
プラグインとして ruby-build
に加えて ruby-build-snapshot
をインストールします。
$ mkdir -p "$(rbenv root)"/plugins
$ git clone --depth=1 https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
$ git clone --depth=1 https://github.com/znz/ruby-build-snapshot.git "$(rbenv root)"/plugins/ruby-build-snapshot
使い方
ruby-build
に同梱されている definitions
でインストールできるバージョンに加えて ruby-build-snapshot
の definitions
で定義されているバージョンがインストールできるようになるので、 rbenv install snapshot-master
や rbenv install snapshot-ruby_2_7
のようにインストールできます。
snapshot tarball なので、インストールに失敗する可能性がありますが、 その場合は ruby/actions の GitHub Actions のログを確認して そもそも tarball がちゃんと出来ていないようなら、別の日に試してください。 ちゃんと出来ているようなのにうまく動かないようならバグ報告してもらえると直せるかもしれません。
$ rbenv install --list | grep snapshot
snapshot-master
snapshot-ruby_2_5
snapshot-ruby_2_6
snapshot-ruby_2_7
$ rbenv install snapshot-master
$ rbenv install snapshot-ruby_2_7
実験的ブランチ対応
Ruby3 さみっと online で Guild から Ractor (Reactor ではない) に名前が変わって、 説明は https://github.com/ko1/ruby/blob/ractor/ractor.ja.md にあります。
ブランチからビルドするのは多少面倒なので、 これも RUBY_CONFIGURE_OPTS=CFLAGS=-Wno-error=shorten-64-to-32 rbenv install ractor
でインストールできるようにしました。 ractor
を試した記事を検索すると情報が出てくるように、 今のところ CFLAGS
の指定をしないとビルドが失敗するようです。
試すには、自分でビルドしなくても wakaba260/ruby-ractor-dev という docker イメージを使うという手もあります。
ruby-build as a standalone program
ここからはおまけの ruby-build
自体の話です。
Dockerfile
などで単一のバージョンの ruby
を入れるのに rbenv
+ ruby-build
を使っているのを見かけることがありますが、 わざわざ別々になっていることからわかるように、複数バージョンの切り替えが不要なら rbenv
なしで ruby-build
だけを使えば良いです。
実際の ruby-build
だけでの使い方は rbenv/ruby-build で「As a standalone program」と 書いてある方の説明を参考にしてください。
ruby-build-snapshot も README には standalone の ruby-build
と組み合わせる方法を書いてあります。
ruby-build の definitions 追加方法
rbenv-installの32行目あたりをみると、 rbenv
のプラグインとして "$RBENV_ROOT"/plugins/*/share/ruby-build
があれば追加の definitions
として使ってくれるようだったので、 そのように作りました。
standalone の時は環境変数 RUBY_BUILD_DEFINITIONS
でパスを指定するのですが、 rbenv
プラグインとしての自動認識と実装を共有する都合で、 export RUBY_BUILD_DEFINITIONS=/path/to/ruby-build-snapshot/share/ruby-build
のように share/ruby-build
までつける必要がありました。
definitions の更新
ruby-build
の share/ruby-build/2.8.0-dev
などを元にしているので、 openssl
のバージョンの更新などに追随して更新する必要があるので、 update.rb というスクリプトを作って definitions
を生成しています。
これを GitHub Actions の on schedule で実行すれば、 自動的に追随できる予定です。