UbuntuにRubyとRailsのインストール

長らくrubyを使っておらずすっかり忘れていて少し時間がかかってしまったのでメモ。

環境

Ubuntu18.04

インストールするもの

Ruby2.4.5 Ruby on Rails 4.2.8

方法

Ruby

ビルドに必要なライブラリをインストールする。

$ sudo apt-get install git gcc build-essential libreadline-dev zlib1g-dev
$ sudo apt-get install libssl-dev # Ruby 2.3以下をインストールしたい場合、「libssl-dev」ではなく「libssl1.0-dev」をインストールする必要があるらしい

rbenvのインストールと設定

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc

rbenvを使ってruby2.4.5をインストールしてデフォルトでそのバージョンを使うように設定

$ rbenv install 2.4.5
$ rbenv global 2.4.5

$ ruby --versionでバージョンを確認するとよい。

Rails

gemを使ってインストールしていく。(gemはデフォルトで使えるっぽかったので何もせずに使った)

$ sudo gem i -v 4.2.8 rails --no-document

はじめ、次のようなエラーに遭遇したので対処した。

Building native extensions. This could take a while...
ERROR:  Error installing rails:
    ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/nokogiri-1.10.1/ext/nokogiri
/usr/bin/ruby2.5 -r ./siteconf20190221-8653-16v0um0.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/nokogiri-1.10.1 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/nokogiri-1.10.1/gem_make.out

ruby-devをインストールすればよい。

$ sudo apt install ruby-dev

これでいけるはず。

$ sudo gem i -v 4.2.8 rails --no-document 

$ rails -vで望みどおりのバージョンがインストールされていればok。

railsをインストールする際、「Installing ri documentation」に非常に時間がかかるので「--no-document 」を引数に渡しておくと早くてうれしい

考察

Scalaを使うときにsbtを、Pythonを使うときはpyenvを使って管理しているのだけれど、rbenvは同様に必須だと感じた。

参考

qiita.com

Jupyter notebookでRを使う

以前Jupyter notebookでScalaを使えるようにしたが、最近Rも使えることを知り、Rも使えるようにしました。ちなみにJupyter notebookはC++も使えて、私の環境だとC++11とC++17も使えるようになっています。やり方はおそらく調べればすぐに出てくると思います。

Rを使えるようにするのは非常に簡単で、まずはinstall.packagesで必要なパッケージをインストールし、続いてdevtoolを使ってIRkernelをインストールするだけです。環境はUbuntu18.04でやっていますが、ここではOSは関係ないはずです。

$R
> install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
> devtools::install_github('IRkernel/IRkernel')
> IRkernel::installspec()

これでJupyter notebookを起ち上げて新しくファイルを作るときにRが選択肢に入っているのでそれを選べばokです。

今後

しばらく技術的なことをネットに書かない感じになってしまったのでこちらを使おうかと。Qiitaを使おうかと思ったがテキトーなことを書いて記事を上げると「技術的なこと意外を書くな」みたいなwarningが出てイラッとしたのではてなを使うことにする。

 

自分向けではなくて読み手がいることを想定して書くつもりです。

Jupyter NoterbookでScalaを使う

簡単に出来たのでメモ.

現在は違うやりかたで行うことが一般的なようです。(2019年4月15日追記)

以下のシェルスクリプトjupyter-scalaを実行.(実際には公式からDLしてきたものを実行することを強くおすすめします)

#!/bin/bash
set -e

VERSION=0.4.2
AMMONIUM_VERSION=0.8.3-1
SCALA_VERSION=2.11.11 # Set to 2.12.2 for Scala 2.12

TYPELEVEL_SCALA=false # If true, set SCALA_VERSION above to a both ammonium + TLS available version (e.g. 2.11.8)

EXTRA_OPTS=()

if which coursier >/dev/null; then
  GLOBAL_COURSIER=true
  COURSIER=coursier
else
  GLOBAL_COURSIER=false
  COURSIER="$(mktemp -t coursier.XXXXXXXX)"
  trap "{ rm -f \"$COURSIER\"; }" EXIT
  echo "Getting coursier launcher..." 2>&1
  curl -s -L -o "$COURSIER" https://github.com/coursier/coursier/raw/v1.0.0-RC1/coursier
  echo "Done" 2>&1
  chmod +x "$COURSIER"
fi

if [ "$TYPELEVEL_SCALA" = true ]; then
  EXTRA_OPTS+=(
    -E org.scala-lang:scala-compiler \
    -E org.scala-lang:scala-library \
    -E org.scala-lang:scala-reflect \
    -I ammonite:org.typelevel:scala-compiler:$SCALA_VERSION \
    -I ammonite:org.typelevel:scala-library:$SCALA_VERSION \
    -I ammonite:org.typelevel:scala-reflect:$SCALA_VERSION \
  )
fi

"$COURSIER" launch \
  -r sonatype:releases -r sonatype:snapshots \
  -i ammonite \
  -I ammonite:org.jupyter-scala:ammonite-runtime_$SCALA_VERSION:$AMMONIUM_VERSION \
  -I ammonite:org.jupyter-scala:scala-api_$SCALA_VERSION:$VERSION \
  ${EXTRA_OPTS[@]} \
  org.jupyter-scala:scala-cli_$SCALA_VERSION:$VERSION \
  -- \
    --id scala \.
    --name "Scala" \
    "$@"

if [ "$GLOBAL_COURSIER" = false ]; then
  rm -f "$COURSIER"
fi

これでjupyter(ipython notebook)を立ち上げた時に以下のように「New」->「Scala」が追加されているはず.

f:id:ksnt:20170621134234p:plain

ipyhon notebook(jupyter)でサーバ起動時にブラウザが勝手に起動しないようにした

/home/[user]/.jupyter/jupyter_notebook_config.pyを書き換える.


なお,設定ファイルがない場合は以下で作成.

$ipython3 notebook --generate-config


因みに,諸事情があって$ipython3 notebookとしているが$jupyter notebookを使うのが一般的だと思われる.

設定ファイルが存在する場合は以下のとおり.jupyter_notebook_config.pyの中で

#c.NotebookApp.open_browser = True

となっている箇所を以下のように'#‘を削除して'True'を'False'に書き換えればok.

c.NotebookApp.open_browser = False

とする.これでサーバを起動する度にブラウザが起ち上がることはない.

なお,設定ファイル内の

#c.NotebookApp.browser = ''

を例えば

c.NotebookApp.browser = '/usr/bin/chromium-browser'

と書き換えればデフォルトのブラウザを設定できる(らしい).ブラウザの実行ファイルの場所はwhichとかで調べればok.

Scalaのパターンマッチとガード

すぐに忘れるのでメモ.コードはリストから最大値を取ってくるよくあるやつ.

def max(xs: List[Int]): Int = xs match {
    case Nil => throw new java.util.NoSuchElementException
    case x :: Nil => x
    case x :: tail => x.max(max(tail))
    }