Posted by Hiroshi SHIBATA on 8 Nov 2018
Ruby の公式 snap パッケージをリリースしました。
https://snapcraft.io/ruby
snap は canonical が開発している新しいパッケージシステムです。独自のファイルシステムを利用して、バイナリの動作に必要なライブラリを全てパッケージングして配布することができます。snap を利用することで、 yum や apt のような Linux ディストリビューションのパッケージシステムを利用した時に、任意のバージョンをユーザーが自由に使うことができない問題を解決しました。
Ubuntu 16.04 以降のディストリビューションなら以下のコマンドで snap ruby を使うことができます。
sudo snap install ruby --classic
Ubuntu 以外のディストリビューションで snap を利用する場合の準備については https://docs.snapcraft.io/installing-snapd/6735 を参照してください。
Ruby の snap パッケージは channel と呼ばれる機能を用いて、現在メンテナンスしているバージョンを配信しています。例えば、2018/11 現在 channel を指定しない場合は 2.5.3 がインストールされますが、2.4 を利用したい場合は以下のように指定します。
sudo snap install ruby --classic --channel=2.4/stable
snap の機能を使うと複数の Ruby のバージョンを利用することができます。例えば、Ruby 2.3 に切り替えるには以下のコマンドを実行します。
sudo snap switch ruby --channel=2.3/stable
sudo snap refresh
また、snap の制限事項として、RubyGems は $HOME/.gem
にインストールされるように GEM_HOME と GEM_PATH を設定しています。そのため、rails や rspec などのコマンドを bundle exec
を用いずに実行したい場合は以下の行を .bashrc
などに設定する必要があります。
eval `ruby.env`
$HOME/.gem
は複数のバージョンで共有されるため、バージョンを切り替えて利用した場合、C 拡張などは gem pristine --extensions
コマンドを用いて再コンパイルする必要があります。
この ruby snap は 11/6-8 にロンドンの canonical オフィスで開催された snapcraft summit で初めて公式バージョンをリリースしました。不具合やフィードバックは https://github.com/ruby/snap.ruby で受け付けています。お楽しみください。