Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

(Scala) MetalsのWorksheet気持ち良すぎだろ!

みんなScala書いてる?ScalaはJVM言語なのでコンパイルが当然必要なのと、sbtを起動するのがちょっと面倒で試行錯誤が大変なんだよね。

Scastieっていう便利なオンラインREPLもあるんだけど、もちろんちょっと時間がかかるし、IDEじゃないから補完とか効かないし、なにより業務で使うようなセンシティブなコードを入力できないんだよね。一応Scastieはオープンソースだからローカルで走らせることもできるんだけど、面倒だよね。

scastie.scala-lang.org

そんな中、たまたまMetalsのことを調べていたら id:tanishiking24Scala の開発環境構築 2021 - たにしきんぐダム を読んだんだよね。

tanishiking24.hatenablog.com

読んだ当初はへ〜ッて感じで流してたんだけど、 VSCode + Metals を使うと Worksheetっていう機能が使えるっぽい。ちょっと試してみたけどめちゃくちゃ便利なので、Scala書いてる人全員に教えてあげたい。隠れた名機能だよ。

Worksheet

Worksheetは以下のことができる。

  • 普通にScalaのコードを書くときのように補完などが動作する
  • Worksheet file に書いた記述は全部上から順に評価され、実行結果がオーバレイされる
    • PythonのJupyter NotebookとかGoogle Colaboratoryを想像してもらえると良いと思う!!
  • Worksheet fileのコード本体と実行結果とを合わせてコピーできる
    • ブログに貼り付けるときにめちゃくちゃ便利!!!!!!

順に説明してあげるから今すぐ使ってほしい。Worksheetを使うには、 Command + Shift + P でcommand palletteを表示して Metals: New Scala File... を選び・・・

Worksheet を選んで、ファイル名を指定してやればいい。

Scalaのコードを書くときのように補完などが動作する

普段のコーディングのように補完が動作している。

Worksheetファイルを作成すると、早速 import とかができる状態になるので、適当なパッケージを使ってコードを書ける状態になる。もちろん補完も動作するし、動かないコードには赤線が付く。

Worksheet file に書いた記述は全部上から順に評価され、実行結果がオーバレイされる

めっちゃ便利ポイント1。普通のREPLだと毎度実行しないと結果が反映されないし、同時に1つの式しか評価できないのだけれど、Worksheetは保存するたびに全内容が実行され、式の右側にその実行結果がREPLのように表示される。

実際の画面を見てもらうと想像が付きやすいだろう:

緑色のコメントとして実行結果がオーバレイされる。マウスをホバーするとさらに詳細に表示される

これがとにかくありがたく、保存→実行の手間が省かれて、保存だけで勝手に全部実行されるので最高。緑色の箇所にホバーすると、勝手にPretty-printしてくれたりもする。

Worksheet fileのコード本体と実行結果とを合わせてコピーできる

便利ポイント2。こういう書き捨てのコードを書くときって、最終的にブログに貼り付けたり、他人に説明したり、Stack Overflowに投げたりするときだと思うんだけど、この機能を使うとコードと実行結果とを一緒にコピーすることができる。

実行方法は、エディタ上部の Copy Worksheet outputボタンを使うか、Command paletteから同名の機能を呼び出せば良い。

これを適当な場所で貼り付けると・・・

実行結果がコメントとしてコピーされる

この時点でめちゃくちゃ便利なんだけど、最近ちょっと話題の Polacode - Visual Studio Marketplace ってやつを使うと、これを良い感じの画像にできて便利だ(テキストデータは消えちゃうけど)。

Polacodeと組み合わせることもできる

資料作成のために綺麗なコードの画像が欲しいときはこれで十分だろう(なんかPolacodeの調子が悪くてガバってるけど、本当はもっと良い感じになるはずだ)。

みんな使ってくれ!!!

これからブログ記事でScalaのコードスニペットを貼り付けたいときは絶対にこれを使うと思う。みんなも使ってみてくれよな!!!

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?