はじめに
私のメイン開発環境はさくらVPSなので、CLI環境でScalaを開発する必要があり、本稿を作成した。具体的には、以下の環境を構築するためのメモをまとめた。
- Vim + Eclim + Eclipse(Scala-IDE) on CentOS6 , OpenJDK 7
Eclim は Vim からEclipseの機能 --- 例えば補完 --- を利用するためのデーモンプロセスである。Eclipseは Scala-IDE と呼ばれる Scala プラグインがあるのでそれを利用する。
なお、CLI 環境でのScala開発環境として SBT もあり、どちらかというとそちらの方が軽量に動作するのだが、本稿では触れない。
本稿はDocker環境でCentOS6 のイメージから手順を確認している。
全体の流れ
以下のような順序で進める
- 必要なパッケージのインストール
- Scalaのインストール
- Eclipseのインストール
- EclipseにScala-IDEプラグインの機能追加
- eclimのインストール/コンパイル
- eclimd の起動とプロジェクトの作成
- Hello, world
手順
まずは必要なパッケージをインストールする
sudo yum -y install java-1.7.0-openjdk.x86_64
sudo rpm -ivh http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.rpm
sudo yum -y install vim ctags curl wget git tar gcc xorg-x11-server-Xvfb
2015/08 現在OpenJDK8ではEclimは動作しなかったので仕方なくOpenJDK7を利用している。また、EclipseはGUIアプリなので仮想的なディスプレイを提供する Xvfb をインストールしておく必要がある。ScalaのRPMは公式サイトから最新のstable版(Mがついていないやつ)ものを利用した。
続いてvimのシンタックスハイライトの設定を行う。Vundleを利用する。
mkdir -p ~/.vim/bundle/
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
cat << 'EOF' >> ~/.vimrc
set nocompatible " be iMproved, required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'derekwyatt/vim-scala'
call vundle#end() " required
filetype plugin indent on " required
EOF
上述のように derekwyatt/vim-scala というVimプラグインによってシンタックスハイライトが可能となる。上記のvimrcを設定したら、vimを起動し :PluginInstall
でプラグインをインストールする。
続いて ctags の設定。ctagsはScalaをサポートしていないが、以下のように簡単に自前で定義をしてしまえばよい。
cat << 'EOF' > ~/.ctags
--langdef=scala
--langmap=scala:.scala
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private|protected)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\4/c,classes/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private|protected)?[ \t]*object[ \t]+([a-zA-Z0-9_]+)/\4/c,objects/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private|protected)?[ \t]*case class[ \t]+([a-zA-Z0-9_]+)/\4/c,case classes/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private|protected)?[ \t]*case object[ \t]+([a-zA-Z0-9_]+)/\4/c,case objects/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private|protected)?[ \t]*trait[ \t]+([a-zA-Z0-9_]+)/\4/t,traits/
--regex-scala=/^[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*def[ \t]+([a-zA-Z0-9_]+)/\3/m,methods/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*val[ \t]+([a-zA-Z0-9_]+)/\3/l,constants/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*var[ \t]+([a-zA-Z0-9_]+)/\3/l,variables/
--regex-scala=/^[ \t]*package[ \t]+([a-zA-Z0-9_.]+)/\1/p,packages/
EOF
Eclipseのインストールに移ろう。Eclipse本体はダウンロードして展開すればOK。p2と呼ばれるパッケージ管理コマンドのようなものでScala-IDEの機能をインストールする
wget http://ftp.yz.yamagata-u.ac.jp/pub/eclipse/technology/epp/downloads/release/mars/R/eclipse-java-mars-R-linux-gtk-x86_64.tar.gz
tar zxf eclipse-java-mars-R-linux-gtk-x86_64.tar.gz
~/eclipse/eclipse -consolelog -debug -nosplash \
-application org.eclipse.equinox.p2.director \
-repository "http://download.eclipse.org/releases/mars/,http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site" \
-installIU "org.scala-ide.sdt.feature.feature.group"
あとはeclimをダウンロードして、インストール作業を行う。
wget "http://downloads.sourceforge.net/project/eclim/eclim/2.5.0/eclim_2.5.0.jar?r=http%3A%2F%2Feclim.org%2Finstall.html&ts=1439707451&use_mirror=jaist" -O eclim_2.5.0.jar
java -Dvim.files=$HOME/.vim -Declipse.home=$HOME/eclipse -jar eclim_2.5.0.jar install
これでOK。Scala-IDEのインストール前にEclimをインストールすると、Scala対応じゃなくなってしまうので注意。
あとはEclimを起動する。仮想ディスプレイを立ち上げ、eclimを起動という順序
Xvfb :1 -screen 0 1024x768x24 &
DISPLAY=:1 ~/eclipse/plugins/org.eclim_2.5.0/bin/eclimd -b
いくつかエラーメッセージは出るが、これでOK。Vimを立ち上げて、:ProjectCreate /tmp/scalatest -n scala
で正常にプロジェクトができることを確認する。
これで、Ctrl+x + Ctrl+u
でeclimdを経由したEclipseの補完機能が使えるようになる。ここから先はEclimの話なので http://eclim.org/vim/scala/あたりを参考にがしがしコードを書く。
最後に
まぁこれはこれでいいが、若干重いなあと感じた