この記事はScala Advent Calendar 2017の5日目の記事です。前回はokapiesさんのAkka HTTP クライアントを使う でした。
はじめに
本日は、Dottyによる開発環境の構築とをVisual Studio Codeを使って行う方法についてご紹介したいと思います。
また、この記事はMacユーザーを対象にしていますので、Windowsでも可能ではありますが一部手順に違いがありますことご了承下さい。
Dottyとは
物凄く簡単になりますが、将来のScalaの型システムの目標に Dependent Object Types(DOT) があり、Dottyでは、その新しい型システムを試行するために現在のScalaとの後方互換性の制約がない状態で試すことが出来る実験的なプラットフォームです。
現行のScalaの型システムにはパス依存型がありますが、Dottyではそれに加えてリファインメント、インターセクション型、ユニオン型(他にも、リテラルレベルのシングルトン型)が記述出来るようになります。
Dottyは今後、scala 3になるロードマップになっているので、今のうちから勉強してもいいかもしれません。
(PS: あまり勉強出来てないので強い人教えてくださいmm)
Scala怖くないよ
Scala怖くないよを推奨していきたいので、初心者向けにVisual Studio CodeでDottyを書けるようになる手順を書いていきたいと思います。
また自分としてもScalaのコンパイルはどうしても時間がかかると思う部分があります。最近では sbt-coursierによってMaven / Ivyリポジトリから依存関係のfetchを高速化するものも出てきてはいますが、もっと気軽にscalaを扱いたい重いが強くなってきたので、調べてみようと思いました。
なぜ Visual Studio Codeか
IDE vs テキストエディター の戦いもありますがテキストエディタだけでもVim, Emacs, Atom, SublimeText と多くの選択肢がある中悩んだのですが、とある勉強会で聞いた話Visual Studio Codeがよさそうだったのでこちらを選びました。
それでは手順に入りたいと思います。
dotty のインストール
brew で入れてしまいます。Homebrewがない方は、ここからインストールします。
brew install lampepfl/brew/dotty
もしも、エラーが出たら xcode関連で足りていない依存関係があるので、下記の通り実行します。
xcode-select --install
sbtのインストール
brew install sbt@1
Javaのインストールが要求された場合はJavaもインストールします。
Visual Studio Codeのインストール
Visual Studio Codeの公式サイト からダウンロードとインストールを行います。
一度起動したら、 ~/.bash_profile
に
function vscode() {
open -a /Applications/Visual\ Studio\ Code.app/ "$@"
}
と書いておくと、ターミナルから直接プロジェクトが開けて便利です。 ( vscode .
で開く )
続いて、
公式に書いてあるように、PATHを通します。
cat << EOF >> ~/.bash_profile
# Add Visual Studio Code (code)
export PATH="$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"
EOF
で入ると思います。
code
で実行できるようになるのでちょっと不安ですが、Dotty Language Server によると必要な手順だそうです。
Dotty Language Server をインストール
ここから インストールします。
Visual Studio Code の MerketPlaceが開くので、インストールボタンを押すことで直接インストールすることが出来ます。
Visual Studio CodeでScalaを実行する場合は、Ensimeに依存していたのでちょっと重かったのですが、どうやら必要なさそうなので地味に嬉しいです。
Dottyプロジェクトの作成
これで一通りの準備が整ったので、sbt new
で新規プロジェクトを作成します。sbt new
は、 0.13.13
から使えるようになっているのでsbtをアップデートする必要があります。
dottyのシンプルなテンプレートは二つあり、
sbt new lampepfl/dotty.g8
がおすすめで、もっと凝ったテンプレートを試したい方は、
git clone https://github.com/lampepfl/dotty-example-project
で落としてきます。
dotty language serverの起動
一度 Visual Studio Codeを終了させてから(重要)
sbt launchIDE
を実行します。これで、Visual Studio Codeでの開発を行う準備が整い、
code
によって自動的にVisual Studio Codeが立ち上がります。
ps aux | grep dotty
すると、裏でdotty-compilerが起動していることが確認できました。
タスクの作成
早くコードが書きたい気持ちを我慢しながら、ビルド用のタスクを作成します。
cmd + shift + p
で出てきたコマンドボックスに task
と入れて、 タスクの構成
から作ると楽です。
{
"version": "2.0.0",
"tasks": [
{
"label": "run",
"type": "shell",
"command": "sbt run"
},
{
"label": "test",
"type": "shell",
"command": "sbt test"
}
]
}
キーバインディングの設定
続いて、タスクを楽に実行できるように、ショートカットキーの設定を行います。
cmd + K → cmd + S
を押して、キーボードショートカット画面を開きます。
そこに、 高度なカスタマイズを行うには、次を開いて編集: keybindings.json
とあるのでそちらをクリックします。
[
{ "key": "ctrl+r", "command": "workbench.action.tasks.runTask", "args": "run" },
{ "key": "ctrl+t", "command": "workbench.action.tasks.runTask", "args": "test" }
]
これで、Ctrl+R と Ctrl+T で 実行とテスト実行が行えるようになりました。
以上で、DottyによるVisual Studio Codeの開発がお手軽にできるようになりました!
Visual Studio Code でできること(一部)
Cmd+Click による定義場所へのジャンプ
シンタックスエラーハイライト
戻り値にStringを期待しているのに、型が間違っているとエラー
最後に
軽く触ってみた感じですがとても軽いです!
たまには軽い環境でScalaを触ってみたいな、という時におすすめです。Dotty自体も、もっと深掘りしていきたいと思います。