この記事はOpal Advent Calendar 2016の一日目の投稿として書いています。
OpalというのはRubyからJavaScriptへソースコードを変換するコンパイラです。
RubyをJavaScriptに!ずいぶんキワモノ感がありますね。私も最初はそう思っていました。
しかし実際に使ってみると、割とRubyとして書けるということが分かりました。
RubyとOpalの違いについては別稿にゆずるとして、わたしがなぜOpalをすすめるのかについて書こうと思います。
一言で言ってしまうと、言語としてJavaScriptが好きでないというのが一番の理由なのですが、それならばAltJSというのも世の中には沢山存在しています。
そういえば数多くあったAltJSたちは今どうしているのでしょうか?私もかつてはRubyistらしくCoffeeScriptなぞ嗜んでいました。
ところが、ES6(今はES2015、ES2016などと呼ばれていますね)の出現により駆逐されていってしまいましたね。
たしかにES6はJavaScriptの欠点を補い大分マシになりました。CoffeeScriptのようなシンプルなトランスパイラに対してなら十分置き換えるメリットはあるでしょう。実際にES6は大分CoffeeScriptを参考にしているようですし。
それでも互換性のためにJavaScriptとしての言語仕様を壊すわけにはいかないでしょう。falsyな値の扱いや===
の存在とかJavaScriptのダメなところを挙げはじめたらいまだに暗澹たる気持ちにさせられます。
それでもES6の出現から多くのAltJSが捨てられていきました。本当にAltJSは滅びるのでしょうか?
私はそうは思いません。私のような気持ちでJavaScriptつらいと思っている人はたくさんいるはずです。現にTypeScriptはいまだに勢力を振るっています。
さて、そんな中Opalです。Opalの他のAltJSと違うところはRubyというすでに普及している言語で書けるということです。
特にRubyは気持ちよく書ける、手に馴染む言語としてそのファンは多いです。もちろん私もファンのひとりです。
AltJSはJavaScriptをもっとマシな言語で置き替えようというものですが、OpalはRubyで書きたいということのほうが大きいと思います。
実際に私はフロントエンドもRubyで書けると気持ちよく書けるという経験を何度もしました。
そのひとつの例がHyaliteというgemです。HyaliteはReactライクなVirtual DOMの実装ですが、これを使うとさくさくとフロントエンドを書けます。React自体、フロントエンドを大分書きやすくしましたが、JSXという特殊な記法を導入しなければならなかったのはJavaScriptの表現力が足りていなかったせいだと思います。(HyaliteではRubyのままショートハンドなメソッドを用意しています。)
そういうわけで個人的にあるいはRubyistにとってOpalは良いものだと思っているのですが、実際に使うにはあまりにもアンダーグラウンドすぎるのではという気もします。しかし、海外ではすこしずつOpalが盛りあがりつつあるように思います。
私は明日RubyConf Taiwan 2016でOpalに関するトークをしますが、RubyConf Taiwan 2016の2日目にも[David Chang](https://2016.rubyconf.tw/#David Chang)によるOpalに関するトークがあります。
どちらもReactライクなUIフレームワークだったり、Isomorphic programmingに関する話題なので被っている感はありますが、OpalでIsomorphic programmingするということに関していくつかのアイデアが実装されています。
それだけ盛りあがっているということでしょう。
他にもOpalで動くさまざまなライブラリがあります。awesome-opalにまとまっているので見るとよいでしょう。
また、最近GitResolveがOpalを採用したというニュース(Deciding to Build an Isomorphic Ruby App with Opal)が飛びこんできました。
このように海外では注目されつつあるOpalですが日本ではさっぱりです。
私はこのアドベントカレンダーでOpalのことをいろいろ紹介して普及活動をしようと思っています。
Rubyは日本人が作った言語で日本でコミュニティーが盛んで、私もそのコミュニティーが大好きでRubyistになりました。
願わくば、Opalも日本でコミュニティーが盛りあがってこの技術を日本人がリードしていけるようになれたら良いなと思います。