M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

Scala.jsはもはや試験的段階を脱した!との由

ちょっと気になった記事の訳出を。Scala言語の公式サイトで公開されている2015年2月5日付けの記事です。原文は"Scala.js no longer experimental"です(2015/07/19取得)。

          * * *

Scala.jsはもはや試験的段階を脱した!

執筆:Sébastien Doeraene

本日、私たちはScalaコードからJavaScriptコードを生成するコンパイラScala.jsバージョン0.6.0のリリースを発表しました。そしてこのプロジェクトに付けられていた「試験的段階」(experimental)のフラグを倒しました。そうです。そのとおりです。Scala.jsはもはや試験的段階を脱したのです! ちょうど2年にわたる開発の末、ようやく「実用段階」(production-ready)を迎えられて満足しています。

ノート:しかしながらScala.jsはTypesafe リアクティブ・プラットフォームには組み込まれていません。よって、Scala.jsは「実用段階」ですが、Typesafeはその商用サポートを提供していません。

コンパイラを上回る何か、1つのエコシステム

そのコア部分についていえば、Scala.jsはScalaコードからJavaScriptコードを生み出すコンパイラです。このコンパイラは単一のアプリケーションを構成する複数の.scalaファイルを、単一の最適化されシュリンクされた.jsファイルに変換します。生成されたJavaScriptコードは何の変哲もないECMAScript 5.1コードであり、いかなるOS、いかなるブラウザ、そしてまたNode.jsでも、どこでも動きます。通常のScala同様、みなさんが知っていて、愛してもいる、強力な機能を利用できます: 型推論、クラス、トレイトとオブジェクト、(関数の)パターン・マッチング、コレクション・ライブラリ、暗黙型変換、などなど。そしてまた、ScalaJavaとの間で相互運用可能であるのと同じく、Scala.jsはJavaScriptの間で相互運用可能になっています。Scala.jsはJavaScriptとの間で、静的型付けもしくは動的型付けのいずれの方法でもやりとりが可能です。

まったく素晴らしいことですが、ライブラリ群とツール群からなる1つのエコシステムがなければ、このコンパイラも成り立たなかったでしょう。Scala.jsには十分すぎるくらいにそれらが備わっています!

Scala.jsで開発をするにあたり、みなさんはお好みのIDEを使用することができます。そして実際に使ってみたところでは、IntelliJ IDEA とEclipseはいずれも完璧な開発体験を提供してくれたということを報告しておきましょう。その他のエディタもまたうまく動作します。Scala.jsの提供するツール群により、構文強調やコード補完(JavaScriptライブラリとDOM APIですらも!)、定義へのジャンプ、そしてその他の機能──Scalaツール群がそろった環境でみなさんが享受できた多くの機能が得られます。まあようするにScala.jsはScalaなのだってことです。今使っているIDEScala.jsを実行したりデバッグしたりできないかも知れません。でもWebブラウザを使うことができます。Scala.jsはソースマップを生成するので、Webブラウザから〔JavaScriptコードに対応する〕Scalaコードに調査することができます。

Scala.jsライブラリとアプリケーションを構築するのは簡単です。sbtプラグインJVM上のScalaの場合と同じ心地の良さと開発スピードを可能にしてくれます。プラグインによりRhino、Node.jsあるいはPhantomJSなどみなさんが必要とするプラットフォームの上で自動的にユニットテストを実行させることも可能になります。

Scala.jsは成長を続けるライブラリのエコシステムを持っており、Maven依存性(sbtでいうところのlibraryDependencies)を通じてそれを使用することができます。UIフレームワーク、静的型付けされたクライアント−サーバ間通信、Reactive Extensions、その他あれこれ。Shapeless やScalazのようないくつかの有名なScalaコミュニティ・ライブラリはScala.jsによりクロス・コンパイルされています。

最後に。Scala.sjが親切な人びとからなる活発なコミュニティを持てたことを誇りに思います。StackOverflowで質問し、メーリングリストで意見を交わし、Gitterチャットルームで話しあいましょう。
Scala.jsの何がそんなにすごいの?
Scala.jsの何がそんなにすごいのか、Scala.jsを日々利用している開発者に質問してみました。ここに示すのは彼らの回答で言及された事項を多い順に抜粋したバージョンです。メーリングリスト上でのやりとりの全文はこちらで閲覧できます。

  • 5 クライアントとサーバでコードを共有できる。
  • 4 既存のJabaScriptライブラリも含めた強力な型付け。
  • 4 そのツール群: IDEサポート、sbtとの統合、依存性、ユニット・テスト、スタックトレースとソースマップ、プロジェクトのクロスコンパイル。
  • 4 移植性: ScalaJavaScriptエンジンを備えた環境にもたらす。まず何よりもWebブラウザの世界へ、そしてそれだけでなく、例えばReact Nativeのような最新の製品にも。
  • 3 JavaScriptとの統合。
  • 2 高速なコンパイル・サイクル(GWTのような同種の選択肢と比較して)。
  • 2 Autowireによる静的チェックされたクライアント−サーバ間RPC。
  • 2 Scala標準ライブラリが利用できる。
  • 2 おもちゃじゃない。
  • 2 すばらしいコミュニティ、新しいユーザへの歓迎と手助け。
  • 1 すばらしいドキュメンテーション

ここにメーリングリスト上の議論からいくつか引用シておきましょう。〔時間の都合で省略〕

なぜ今「試験的段階」のフラグが外されたの?

多くのScala.jsユーザがすでにずいぶんまえから「実用的段階」にあると述べてきました。たぶん早くも2014年6月にリリースされたバージョン0.5.0のころから。それではなぜ今、「実験的段階」のフラグを外す選択をしたのでしょうか。何が変わったのでしょう。

大きなちがいは安定性の面でのいくつかの変化です:

  • 言語のセマンティックスの安定。後方互換性(まだ適宜されていない挙動の定義)は引続き発展していくとはいえ、その他の部分が変更されることはないでしょう。
  • Scala.jsの標準ライブラリ(scala.scalajs.jsパッケージ)はソースとバイナリの双方に関して後方互換性を維持することになるでしょう。
  • sbtビルドはソースに関して後方互換性を維持することになるでしょう。

もちろん、私たちは標準ライブラリとビルドについて機能強化を続けています。あるものは廃止予定〔deprecated〕となり、いずれは削除されるでしょう。しかしそのペースは以前よりもゆっくりとしたものになります。

全体的に見て、今日みなさんがScala.js 0.6.0向けに書いているコードは、0.6.x系を通じて動作し続け、1.y.y系においてもそれは変わらないでしょう。

「じゃあなんでまだ1.0.0じゃないの? Scala.jsの現状はバージョン1.0.0に求められるものを満たしているように思えるけど。なにか隠してない?」

Scala.jsのうちユーザの目に見える部分は安定したといえますが、1点だけ擬似的な実装の状態のまま残っているものがあり、それは将来のバージョンでは変更される予定です。それはScala.jsの中間ファイル──.sjsirファイルのフォーマットです。これらのファイルはJVMに関して.classファイルが必要なのと同じ意味でScala.jsに無くてはならないものです。私たちはまだこのファイルのフォーマットに関して決めきれていないことがあり、数ヶ月のうちに変更がなされる余地を残しておこうと考えているのです。(当然のことながら)これはバイナリ互換性が崩されることを意味しており、メジャー・バージョンの変更が求められることになります。そういうわけで、私たちはまだバージョン1.0.0に飛躍することはありません。慌てて最初のメジャー・バージョン〔1.0.0〕とせず、Scala.js中間ファイル・フォーマットに最後の変更を加える機会を与えるためです。

でも安心してください! その他の点ではScala.jsは安定性と広範な利用の準備ができているということ私たちは確信を持っています。

Scala.jsをはじめる

Scala.jsをはじめるには主に3つの方法があります:

それでは先へと進みましょう! Scala.jsを使って、それを好きになって、次世代のWebアプリケーションを開発しましょう。

          * * *

原文は"Scala.js no longer experimental"です(2015/07/19取得)。