Lambdaカクテル

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

Invite link for Scalaわいわいランド

Scastie(ScalaのオンラインIDEみたいなやつ)をセルフホスティングする

Scalaユーザの間ではよく知られた存在であるScastieはOSSで、自分でソースをクローンしてくると手元で動かすことができる。自宅サーバで動かすことができないか試してみたところ割とあっさり動いたので手順のメモ。

Scastie

scastie.scala-lang.org

今更説明するまでもないが、Scastieはオンラインで動作するScalaのIDEみたいなやつで、だいたいなんでも動かすことができる。「IDEみたいなやつ」と書いたのは、ファイルを保存したりプロジェクトを組むといった上等な機能があるわけではなく、あくまでブラウザで手軽にScalaのコードを試すくらいに留まっているためである。とはいえこのくらいでもネットで見たコードサンプルをすぐ動かせるから非常に便利。

手元で動かす

手元で動かすのは案外簡単。より詳しい手順はCONTRIBUTING.mdに記載されているのでこれを参照すること。

  • yarnが使える環境にしておく
  • sbtを起動する
  • startAll する

これだけで各種のライブラリ類が落ちてきて、すぐ動くようになる。デフォルトの設定では、http://localhost:8080/にWebサーバが立つ。

f:id:Windymelt:20220206202300p:plain
動作は高速だ

もちろん自宅サーバで動作させているので、公式のインスタンスよりも数段速い。動作のテンポはかなり快適だ。ただし、 自宅サーバの中で動作するので当然だが、危ないコードを実行させると怖い。

と思っていたら、Scastieは実際にプロジェクトが走るsbtサーバと、そのフロントエンドである箇所を分離した設計になっていて、sbtサーバだけdocker環境内に隔離して動かすこともできるようだ(デフォルトでは、全て筒抜けになっている)。

f:id:Windymelt:20220206202953p:plain
デフォルトではすべて見えてしまう

Docker環境下で動かす

筒抜けだとヤバいコードを動かしたときに大変なことになるので、またもやCONTRIBUTING.mdを参考にDocker環境で動作させてみる。まずはsbtサーバだけ動かす。

$ docker run \
--network=host \
-e RUNNER_PORT=5150 \
-e RUNNER_HOSTNAME=127.0.0.1 \
-e RUNNER_RECONNECT=false \
-e RUNNER_PRODUCTION=true \
scalacenter/scastie-sbt-runner:`git rev-parse --verify HEAD`

別窓でwebサーバ+フロントエンドを実行する。

$ sbt
> ~server/reStart;client/fastOptJS/startWebpackDevServer

するとsbtサーバだけDocker環境に隔離された状態で動作させることができる。

f:id:Windymelt:20220206210059p:plain
あんしん

あとは良い感じにDNSなどを整備すればオレオレScala実行環境を作ることができそう。

github.com

このあたりのconfをいじったら良い感じにホスト名を変更できそう。

f:id:Windymelt:20220206210853p:plain
Docker環境でもきっちり動く

社内便利サーバみたいな扱いで立てると便利かもしれない。

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