Project Euler with Ruby on WSL [Problem 0]
TL; DR : 前説
この記事内では環境構築だけで終わるので Problem 0 本筋から読みたい人は次の節へどうぞ。
紆余が曲折して Project Euler をやる気になった。 どうせなら記録したい。じゃあ5億年ぶりに hatena に書くか。 どうせなら ruby でやりたい。なにしろ「好きな言語は ruby です」と言い続けているが、ここ数年まともに ruby を読み書きしていない。python や Human Resource Machine のアレのほうが触ってる時間は長いだろう。これはまずい。冷静になると別に何もまずくない気もするが、今は冷静になる時ではない。こういうのは勢いが大事だ。
手元の環境(事実上ゲーム機と化してる Windows マシン)で使うことを考えると、ActiveScriptRuby か、VM か、Docker for Windows か、Bash on Ubuntu on Windows か。え、Hyper-V は Windows 10 Home だと使えないの!?マジか…。さよなら Docker Desktop. 勢いが大事なのだから、勢いを削ぐ要素は少ないほうがいい。よって、VM はやめよう。やはりワンテンポ遅れる。ActiveScriptRuby は更新されているか怪しい。Project Euler をやるうえでは何ら問題ない気がするが、後から苦しむのは面倒だ。ついでに、最近の ruby のことがわからないので(なにしろ以前の記事で ruby1.9 とか書いてる)、バージョン切り替えはしたい。 よって、構築目標は以下とする。
構築目標環境
大体の流れは Qiita のこの記事 を真似ることにする。 rails を入れたいわけではないので、node や rails は入れない。
実際の作業
ライブラリ類
とりあえず update する
$ sudo apt-get update
記憶によると readline が入ってないと irb がちゃんと動かなかった気がする 検索したら今もそうらしい が、どうも qiita の記事にあるdevel だけでいいのか? という気になってきたので追加なしで行ってみる
$ sudo apt-get install -y make gcc libssl-dev libreadline-dev zlib1g-dev
rbenv を入れるために本家に書いてあるライブラリを入れる。 えーと ubuntu/debian/mint だと
apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
libreadline, zlib1g, libssl はもう入れたから(autoconf や build essential とかも入ってる気はするけど)
$ sudo apt-get install -y autoconf bison build-essential libyaml-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev libdb-dev Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package libgdbm6
libgdbm6 がないとな。本家の注意書きにあったやつだな。
Depending on your version of Ubuntu/Debian/Mint, libgdbm6 won't be available. In that case, try an earlier version such as libgdbm5.
libgdbm6 -> libgdbm5 で解決。
rbenv
で、rbenv を入れる。本家によれば
Basic GitHub Checkout For a more automated install, you can use rbenv-installer. If you prefer a manual approach, follow the steps below.
ふーむ。別に manual approach を prefer という気分でもないので installer を頼ろう。
$ wget -q https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer -O- | bash
おや。何かエラーが出ておる…。
Running doctor script to verify installation... Checking for `rbenv' in PATH: not found You seem to have rbenv installed in `/home/zampona/.rbenv/bin', but that directory is not present in PATH. Please add it to PATH by configuring your `~/.bashrc', `~/.zshrc', or `~/.config/fish/config.fish'.
PATH がおかしいと言っているようだ。
$ ls -l ~/.rbenv/bin/ total 0 lrwxrwxrwx 1 user user 16 May 4 10:12 rbenv -> ../libexec/rbenv
本当に path が通ってないだけだな これも本家に従おう
For Ubuntu Desktop: $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc いったん ubuntu を抜けて入りなおす(source でよい気もするが) 入りなおして
$ rbenv -v rbenv 1.1.2-30-gc879cb0
どうやらうまくいったようだ いちおう本家に従って rbenv-doctor も走らせておこう
Verify that rbenv is properly set up using this rbenv-doctor script:
$ wget -q https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor -O- | bash Checking for `rbenv' in PATH: /home/zampona/.rbenv/bin/rbenv Checking for rbenv shims in PATH: not found The directory `/home/zampona/.rbenv/shims' must be present in PATH for rbenv to work. Please run `rbenv init' and follow the instructions. Checking `rbenv install' support: /home/zampona/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20200401-9-g3ef704e) Counting installed Ruby versions: none There aren't any Ruby versions installed under `/home/zampona/.rbenv/versions'. You can install Ruby versions like so: rbenv install 2.2.4 Checking RubyGems settings: OK Auditing installed plugins: OK
rbenv init せい、とな。
$ rbenv init # Load rbenv automatically by appending # the following to ~/.bashrc: eval "$(rbenv init -)"
ほい。
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
もう一回 doctor script を走らせたら SHIM も OK になった。
installing ruby
やっとだよ。
$ rbenv install -l 1.8.5-p52 1.8.5-p113 1.8.5-p114 1.8.5-p115 1.8.5-p231 1.8.6 1.8.6-p36 1.8.6-p110 1.8.6-p111 1.8.6-p114 ...
リストが長すぎて笑う。 wc -l
したら 488 あった。
素直に現時点(2020/05/04)の安定板 2.7.1 を入れる
$ rbenv install 2.7.1
結構待たされたが通った。 rbenv の使い方はこっちの記事のほうがいいな。 当面、2.7.1 しか使う気がないので global に指定しよう
$ rbenv global 2.7.1 $ ruby -v ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux] $ irb irb(main):001:0> puts 'a' a => nil irb(main):002:0>
無事動いているようだ。