Blog

【Scala.jsではじめるScala道】第一回・HelloWorld


こんにちは!編集部の新卒の小林です。普段は JavaScript をよく書くので Scala はあまり詳しくないのですが編集部で手伝いをしています。以後よろしくお願いします!

さてみなさん JavaScript は好きですか?え?嫌い?そうですか、そうですよね…。そんなみなさんにオススメなのが Scala.js です。Scala を書いたら JavaScript が出てくるので、サーバサイドで Play を使ってるんだけどフロントは JavaScript なのでロジックが二重化していて…みたいなときとかに嬉しい気がします。

Scala のセットアップ

それでは、さっそくチュートリアルをやってみて雰囲気を掴んでいこうとおもいます。Scala 初心者なのでそもそもマシンに Scala の環境が整っていないので、まずはそのセットアップからはじめます。

Mac + Homebrew を使っているので brew で Scala まわりのパッケージをインストールします。

おもむろに sbt -v するといろいろダウンロードがはじまるので待ちます。

とおもったら sbt の REPL が立ち上がるので Ctrl+C で抜けます。

HelloWorld やっていくぞ

チュートリアルに従って、HelloWorld のアプリケーションを作っていきます。指示どおりにファイルを作っていきます。

src/main/scala/tutorial/webapp/TutorialApp.scala:

普段 Atom をエディタに使っているので、いつもどおり Atom で .scala のファイルを作ったらシンタックスハイライトが効かなかったので Scala の Language Pack をインストールしました。IntelliJ とかいう高級な IDE は持ってません。Atom でがんばります。

sbt でビルドします。

そうするとなにやらエラーが出ます。

ほうほうなるほど、scalajs がないっぽいですね。そういえば、sbt のセットアップのところをすっ飛ばしていました。セットアップします。

project/plugins.sbt:

build.sbt:

project/build.properties:

ふう、設定ファイルが多いですね。それでは、もう一度 sbt の REPL を起動しなおしてビルドしていきます。

どうやら、project/build.properties で指定した sbt のバージョンと違うようで sbt のダウンロードがはじまりました。sbt のダウンロードが終わると scalajs のダウンロードがはじまりました。

scalajs のダウンロードが終わると準備完了っぽい感じになりました。

今度こそ run します。

そうすると、まだ足りないようでダウンロードがはじまりました。それが終わると

おおお、やったぜ!

さらに、fastOptJS というタスクを実行すると JavaScript のコードが吐き出されるようなので実行してみます。

ふむふむ、target/scala-2.11/scala-js-tutorial-fastopt.js というファイルが生成されたようです。おもむろに実行してみると

なにも出ずに終了するのですが、どうやら main メソッドを呼んでやらないといけないようです。チュートリアルでは HTML を書いてブラウザで実行するように書かれていますが、面倒くさいのでファイルに追記してささっと確認します。

今度こそ

やりました!3000行の HelloWorld の JavaScript のコードが錬成されました。ランタイムのコードを追おうとおもったんですが、長すぎて普通に心が折れそうになったのでとりあえず main っぽいところを読んでみると

println__O__V を読んでみると

print__O__V があやしいですね。

どうやら jl_JSConsoleBasedPrintStream$class__print__jl_JSConsoleBasedPrintStream__T__V というどえらい長い関数がそれっぽいです。

doWriteLine__T__V が書き出しをしている気がします。

ScalaJS.g までたどりつきました!!

これらをつかって console.log('Hellow world!!') のようなものを再現しているようですね。悪魔的だ…。

まとめ

Scala.js を使って JavaScript で HelloWorld するところまでチュートリアルに沿って確認しました。どうでしょう、Scala.js を使いたくなってきましたか?ん?まだ?そうですよね、僕もまだ全然使いたくなるところまで達していません。しかし!Scala.js の真価はこれから紹介できる(はず)なのでがんばります( ・ㅂ・)و ̑̑

次回は DOM のライブラリを使って DOM を操作する JavaScript のコードを見ていきたいとおもいます。

Author

アバター
admin

関連記事