LoginSignup
1
0

More than 1 year has passed since last update.

Ubuntu 20.04 LTSにtruffleruby 21.1.0をインストールする

Last updated at Posted at 2021-06-12

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

Ruby好きです。あまり得意ではないのですが、Ruby好きです。
しかし、ここ6年ほど触ってきませんでした。
特段、必要なかったというのもありますが、簡単なスクリプトを書くにはBashで十分だったのとディストリビューションに入っているRubyが古かったりして使いづらくなったり、スピード的に満足できなかったりして使わなくなっていました。一時期JRubyも使ってみようとしましたが、1回目の起動時間の重さに使わなくなっていました。

しかし、GraalVMで動くtrufflerubyというのがあると知りました。
パフォーマンスがよかったりするらしいので久しぶりに使ってみるかと思ったのが発端です。

Ruby
https://www.graalvm.org/ruby/

1. 環境とインストールするtrufflerubyのバージョン

  • OS
    • Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-74-generic x86_64)
  • truffleruby
    • 21.1.0

2. 必要なパッケージをインストール

$ sudo apt update && sudo apt upgrade 
$ sudo apt install -y build-essential curl file git libssl-dev zlib1g-dev

3. brewをインストール

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)" 
$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv) 
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) 
$ echo "eval $($(brew --prefix)/bin/brew shellenv)" >>~/.profile 

4. ruby-buildをインストール

ruby-build は --HEADでインストールしないと途中でエラーが出ます。

$ brew install ruby-build --HEAD

5. rbenvをインストール

同時にruby-buildのpluginもいれておきます。

$ brew install rbenv 
$ mkdir -p "$(rbenv root)"/plugins 
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

6. trufflerubyをインストール

$ rbenv install --list | grep truffleruby 
$ rbenv install truffleruby-21.1.0 

6-1. trufflerubyの動作確認

$ ls -la /home/ubuntu/.rbenv/versions/truffleruby-21.1.0/bin/ruby
$ /home/ubuntu/.rbenv/versions/truffleruby-21.1.0/bin/ruby --version
truffleruby 21.1.0, like ruby 2.7.2, GraalVM CE Native [x86_64-linux]
$ /home/ubuntu/.rbenv/versions/truffleruby-21.1.0/bin/ruby -e 'print RbConfig::CONFIG["prefix"]'
/home/ubuntu/.rbenv/versions/truffleruby-21.1.0

7. rbenvの設定

$ ruby_home=$(/home/ubuntu/.rbenv/versions/truffleruby-21.1.0/bin/ruby -e 'print RbConfig::CONFIG["prefix"]') 
$ echo $RBENV_ROOT 
$ rbenv root 
$ RBENV_ROOT=$(rbenv root)
$ eval "$(rbenv init -)" 
$ rbenv init
$ ln -s "$ruby_home" "$RBENV_ROOT/versions/truffleruby" 
$ echo "eval \"$(rbenv init -)\"" >> ~/.profile

7-1. 確認

$ rbenv shell truffleruby
$ ruby --version 
truffleruby 21.1.0, like ruby 2.7.2, GraalVM CE Native [x86_64-linux]

8. trufflerubyをデフォルトのrubyに設定

$ rbenv local truffleruby

9. ベンチマークテスト

こちらのベンチマークをやってみる

TruffleRubyを動かしてみた - Qiita

以下のファイルを作成

hoge.rb
#!/usr/bin/env ruby

require 'benchmark/ips'

def call
  i = 0
  while i < 1000
    i += 1
  end
end

call; call; call; call; call # JITを効かせたいがために複数回呼び出す

Benchmark.ips do |x|
  x.report('call') { call }
  x.compare!
end

gemでbenchmark-ipsをインストール

$ gem install benchmark-ips

9-1. ベンチマーク結果

ubuntu@tuffleruby:~$ ruby ./hoge.rb
Warming up --------------------------------------
                call   306.675k i/100ms
Calculating -------------------------------------
                call      3.147M (±14.4%) i/s -     15.334M in   5.063475s

■ベンチマーク環境

  • CPU:
    • model name: AMD Ryzen Embedded V1605B with Radeon Vega Gfx
    • number: 4 CPU
  • Memory
    • Total: 4G

10. まとめ

Rubyは生産性の高い言語だと思います。

死んだとかなんだか言われることもありますが、JavaもGraalVMで起動時間が短くなりシングルバイナリーで動くCloud Nativeな時代にフィットするものとして復活してきました。
Rubyもtrufflerubyにより起動時間が短くてシングルバイナリーで使いやすくなれば逆転のチャンスがあると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0