💨

asdfでRubyを使う

2022/05/19に公開約3,500字

本記事では、asdfを簡単に紹介するとともに、asdfでRubyをインストールしたり、使ってみたりします。

asdfとは

asdfは、複数のバージョンを扱えるパッケージマネージャーです。

Manage multiple runtime versions with a single CLI tool
Home | asdf

プログラミング言語のバージョン管理ツールである○○○env(例:ruby-env)のような機能を持つとともに、MacでいうところのHomebrewのようにツールやミドルウェアのパッケージ管理の機能も持っています。

Linux、Windows(WSL2)、macOSで、Getting Started | asdfに従って簡単に導入できます。

プラグイン機構

asdfはプラグインによって個別のパッケージに対応する機構を持っており、有志によってたくさんのプラグインが提供されています。どのようなプラグインがあるかは、以下にリストされているのでご覧ください。

asdf-vm/asdf-plugins: Central plugin repository for asdf

Ruby用のプラグインはasdf-rubyです。ドキュメントにある通り、以下のようにして導入できます。

$ asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git

Rubyのインストールをする前に、必要なライブラリをインストールしておきましょう。

asdfでインストールできるRuby

内部的にruby-buildを用いているので、ruby-buildが対応している様々なRuby実装をインストールできます。

$ asdf list-all ruby
1.8.5-p52
1.8.5-p113
1.8.5-p114
...
3.1.2
3.2.0-dev
3.2.0-preview1
artichoke-dev
jruby-dev
jruby-1.5.6
jruby-1.6.3
jruby-1.6.4
...
jruby-9.3.2.0
jruby-9.3.3.0
jruby-9.3.4.0
maglev-1.0.0
maglev-1.1.0-dev
maglev-2.0.0-dev
mruby-dev
mruby-1.0.0
mruby-1.1.0
...
mruby-2.1.1
mruby-2.1.2
mruby-3.0.0
rbx-2.2.2
rbx-2.2.3
rbx-2.2.4
...
rbx-4.19
rbx-4.20
rbx-5.0
ree-1.8.7-2011.03
ree-1.8.7-2011.12
ree-1.8.7-2012.01
ree-1.8.7-2012.02
truffleruby-dev
truffleruby-1.0.0-rc10
truffleruby-1.0.0-rc11
...
truffleruby+graalvm-21.3.0
truffleruby+graalvm-22.0.0.2
truffleruby+graalvm-22.1.0

Rubyの最新版をインストールする

現状の最新版である3.1.2を入れてみましょう。

$ asdf install ruby 3.1.2
Downloading openssl-1.1.1n.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a
Installing openssl-1.1.1n...
Installed openssl-1.1.1n to /Users/kentaro/.asdf/installs/ruby/3.1.2

Downloading ruby-3.1.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
Installing ruby-3.1.2...
ruby-build: using readline from homebrew
Installed ruby-3.1.2 to /Users/kentaro/.asdf/installs/ruby/3.1.2

また、CRubyの最新版を入れたいのであれば、asdf install ruby latestでもインストールできます。

$ asdf install ruby latest
ruby 3.1.2 is already installed

上記で既に入れてある3.1.2が参照されているのが確認できました。

グローバルで利用するバージョンの設定

グローバルに利用するバージョンの指定は、以下のようにして行います。

$ asdf global ruby 3.1.2

あるいは、CRubyの最新バージョンならlatestを指定してもOKです。

$ asdf global ruby latest

3.1.2が指定されているのが確認できます。

$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]

ローカルで利用するバージョンの設定

プロジェクトごとに、利用するRubyのバージョンを固定したい場合もあります。

インストール済みのバージョンを確かめてみましょう。

$ asdf list ruby
  3.0.2
  3.1.2
  mruby-3.0.0

特定のディレクトリ内において、上記の中にある3.0.2にバージョンを固定したい場合は以下のようにします。

$ asdf local ruby 3.0.2

バージョンを確かめてみましょう。

$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin21]

3.0.2になっています。.tool-versionsというファイルが生成されており、その中に書かれたバージョンが使われるような仕組みになっています。

$ cat .tool-versions
ruby 3.0.2

Homebrewとの使い分け

個人的には、anyenvを使って入れていたような、プログラミング言語のランタイムを管理するためにだけ使っています。ですので、Homebrewにもあるようなツールやミドルウェアについては、Homebrewの方を使うようにしています。asdfになくてHomebrewにあるものの方が多いので、どれをどっちで入れたか混乱するのを防ぐためです。

複数のプログラミング言語のバージョン管理ツールとしては、特に問題もなく使えているように思えます。

Discussion

ログインするとコメントできます