Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

CLI環境でのScala開発環境構築

$
0
0

はじめに

私のメイン開発環境はさくら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/あたりを参考にがしがしコードを書く。

最後に

まぁこれはこれでいいが、若干重いなあと感じた


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>