しびら

技術ネタのメモとか。

Play frameworkを使ってscala.jsを試してみる

   

scala-js

Scala.jsとは

ScalaをJavaScriptに変換して実行してくれるものです。なんとScala本体のコードを丸々JavaScriptにコンバートして実行しているようです。圧縮前は22MBのコード。圧縮すると200KB近くになるようですが、最適化処理に結構時間がかかるようです。こちらは日々性能改善されている模様。

 

Playframework2.4で実行

Play Frameworkを導入して以下のコマンドで新規プロジェクトを作成します。

次に、project/plugins.sbtファイルを作成して、以下の内容を書きます。Eclipseでプロジェクトをインポートできるようにするプラグインとscala.jsのプラグインを追加しています。

次にbuild.propertiesに記述されているsbtのバージョンを変更します。

次にbuild.sbtにscala.jsを追加します。

activator eclipseでeclipseにインポートできる状態にします。

eclipseのプロジェクトをインポートして、src/main/scala/com/example/Hello.scalaを編集します。

js.JSAppをextendsします。

その状態で「activator fastOptJS」コマンドまたは「activator fullOptJS」を入力すると

するとtarget/scala-2.11/scala-js-fastopt.jsが出来上がります。

次にプロジェクトのルートにindex-dev.htmlを作ります。先ほど生成した「target/scala-2.11/scala-js-fastopt.js」をロードするように設定してscript要素に先ほど作成したHello.scalaを実行できるようメソッドを作ります。

さあ、作製したindex-dev.htmlをブラウザで開いてみましょう。なんとこのindex-dev.htmlをビルドする必要はありません。scalaのコードはjavascriptに変換されており、「com.example.Hello().main();」で実行することができます。

コンソールログに以下が出力されます。

scalaのprintlnがjavascriptのconsole.logに変換されているようですね。

jQueryを使ってみる

jQueryを導入することもできるようです。build.sbtにscalajs-jqueryを導入します。

eclipseに追加

Hello.scalaにjQueryっぽい文字列を書きます。

最後にindex-dev.htmlにjqueryをロードするように記述。

(activator fastOptJSを忘れずに実行して)index-dev.htmlを開くと、ブラウザ上に文字列が出力されます。これでscalaでクライアントサイドの動きも記述できてしまいそうですね。

無理にScalaで書く必要があるかといわれるとうーん・・。関数型っぽい記述がしたいだけならlodashで事足りるだろうし、それよりもScalaとJS間のやりとり等々の学習コストが高そうだなぁという印象です。あとはフロントエンドエンジニアがScalaの勉強するのに使えたり・・・?するかもしれませんね。

 - Playframework(Scala), 未分類 , ,