Scala
VisualStudioCode
Dotty
ScalaDay 5

Dotty x Visual Studio Code によるお手軽な開発環境の構築

この記事は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

参考: Mac への sbt のインストール - sbt

Javaのインストールが要求された場合はJavaもインストールします。

Visual Studio Codeのインストール

Visual Studio Codeの公式サイト からダウンロードとインストールを行います。
一度起動したら、 ~/.bash_profile

~/.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 と入れて、 タスクの構成 から作ると楽です。

tasks.json
{
    "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 とあるのでそちらをクリックします。

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 による定義場所へのジャンプ

12月-05-2017 02-00-50.gif

シンタックスエラーハイライト

12月-05-2017 02-02-24.gif

戻り値にStringを期待しているのに、型が間違っているとエラー

12月-05-2017 02-01-43.gif

最後に

軽く触ってみた感じですがとても軽いです!
たまには軽い環境でScalaを触ってみたいな、という時におすすめです。Dotty自体も、もっと深掘りしていきたいと思います。