規約重視なフロントエンドフレームワークにはまっている
以下日曜の夜に書いたポエムです。
最近、Ember.jsというRails的なフロントエンドフレームワークにはまっている。(Rails的、ということは設定より規約が重視され、アプリケーションの構造が決められたものになる、ということである)
かなり前から存在しているフレームワークで、英語版WikipediaのEmber.jsの記事によると、2011年の暮れに最初のバージョンがリリースされたようだ。
さらに同じ記事の歴史の項目を見てみると、
History In December 2011, the SproutCore 2.0 framework was renamed to Ember.js, to reduce confusion between the application framework and the widget library of SproutCore 1.0.[59][60] The framework was created by Yehuda Katz, a member of the jQuery, Ruby on Rails and SproutCore core teams. Like many of Katz's other projects, it advocates convention over configuration.
とあり、SproutCoreという前身があってそれがEmber.jsにリネームされたのだという。さらに豆知識で、そのSproutCoreというのはAppleも開発にかかわっていたようだ。
Appleは今もEmber.jsを利用しているようで、Apple Musicのブラウザ版はEmber.jsで作られている。
あと有名どころとしては、NASAのトップページもEmber.jsである。まぁアメリカ/ヨーロッパ圏では色んなところで使われているようだ。
日本で流行っていない
アメリカ/ヨーロッパ圏はそこそこ使われていそうなEmber.jsであるが、私が住む日本ではほぼ聞かない。QiitaのEmber.jsタグも、最近の私の投稿を除けば、2018年が最後である。2年ほど記事が投稿されていなかったということになる。
なぜこれほど流行らなかったのだろうか?
実を言うと弊社が提供しているidobataというサービスではEmber.jsを使っている。だから全く使われていない、ということではない、と思う。ただあまり盛り上がることなくReact/Vueが開発者をかっさらっていった、ということなのだろう。理由になっていないような気がするが、ウェブ技術は水物であり流行ったものが基本的には勝ちである。
ではなぜ今更そんな流行らなそうなフレームワークに興味を持ってしまったのか?
それは私がもっとフロントエンドフレームワークの開発者生産性の部分に焦点を当てたいと思ったからである。
今仕事ではReactNative/Reactをずっと触っているが、なんというか生産性が悪い。確かにエコシステムは巨大だし情報も腐るほど広がっている。ただ、新規(初学者)の人やフロントエンドフレームワークにそれほど熱意がない人が入ってきたときに説明が面倒くさいのである。ReactはViewしか面倒を見ないので、当然Redux/React-Router-Domなどなど色んなライブラリを突っ込んで肥やしていく。それぞれにドキュメントがあり、こういうやり方でやれば良いよね、という思想がある。
それを全部見てもらうというのは当然不可能なので、こちらがかいつまんで説明する。もしくはコードを見様見まねでコピペして使ってもらう。
これで良いんだっけ?と思ってしまったのだ。
よくカスタマイズ出来るということはアプリケーションごとに最適なものを探そうとしてしまう。もちろんNext.jsなどを使えば少し規約が入ると思うので、カスタマイズの幅も狭まるだろう。が、そもそもSSR/SSGなんて必要としてない案件も多い。そんなCDNにファイルを置いて爆速でやる必要がない案件では当然create-react-appでアプリを作ってしまうわけだがそうするとカスタマイズしないといけなくなる。(ちなみにcreate-react-appすら使わずにParcelでやってしまったこともあります、テヘペロ)
ほえええ
俺が思う最強のReactアプリの構造を作ったとして、それを誰かにメンテさせるのか。長期的にアプリをメンテしていく状況で、Class/Hookが混在し、テストはEnzyme/React-Testing-Libraryが混じり合った混とんを誰かに任せるのか。(それはちゃんと統一しないのが悪い)
ほえええ
俺たちはどれだけ学び、人に学ばせれば満足するのだ。(ウェブエンジニアは学ぶことを忘れたら死ぬかもしれない)
ほえええ
というわけで、Ember.jsならオールインワンで楽チンだなと思ったわけです。ただ多分これから先も日本で流行ることはないでしょう。でも好きなんだ、このemberコマンドの使い勝手が、アプリケーションの規約が、Handlebarsというテンプレートシステムの柔軟さの塩梅が(Angularのテンプレートは複雑すぎて諦めた)、Octaneコンポーネントの書き味が、日本語の訳をPR出しただけでContributorsに入れて紹介してくれるコミュニティのスモールさが、そしてTomsterとZoeyという謎ハムスターたちが。