abandon backbone coffeescript foundation - pjmtdw/kagetra GitHub Wiki

脱 Backbone/Coffeescript/Foundation 計画

背景

葉隠から景虎に移行してから約3年,一応問題なく安定稼動はしているがまだまだ機能は足りない. しかし,これ以上開発を続けていくにあたって大きな障害が一つある. それは開発を始めた2013年当時はかなりメジャーだったBackboneとCoffeeScriptがすっかりオワコンになっている. またFoundationも今使っているバージョンは4だが,既に6が出てて互換性がほとんどないのでこれを機会に別のCSSフレームワークに移行する.

JavaScriptに足りない部分を補うために作られたCoffeeScriptはES2015(ES6)の策定ですっかり用済みになってしまった.

Backboneの方はAngularやReactのような仮想DOMやそれに類するモノを使うライブラリによって「BackboneってjQuery使って直接DOMいじってるんだって?ダサくね?」という文化が根付きつつある.

CoffeeScriptはBackboneも同じ作者によって作られており,この人はUnderscoreというライブラリも作っているがそれもLodashに人気を取られている.そのせいでやる気を無くしたのかどうかは分からないがこれらのプロジェクトは開発が停滞しているように見える.まあActiveに開発されてないというのは裏を返せば安定しているという意味なのでバグや脆弱性が放置されてない限りは問題ないのだけれども.

jQueryもブラウザが進化し必要な機能を整えてくれているため,DOMをいじる機能はほとんどjQueryなしでもできるし [1] ,Ajax機能もsuperagentみたいなそれに特化したライブラリの方が人気を集めている. 一応言っておくと小さいシングルページのアプリならjQueryでDOMいじるのはまだまだ現役だし,jQueryの全部の機能をブラウザが持っている訳じゃないからObfuscatedという訳ではない.

という訳なのでこういうオワコンと分かっているライブラリを使って開発を続けるのは精神的にすごくキツいので,モダンなライブラリに移行する.

代替の検討

2016年末現在BackboneやCoffeeScriptの代替として現状一番無難なのは

MV*

  • Angular
  • React + Redux

ブラウザで動く言語

  • ES2015(ES6)
  • TypeScript

この辺であるが,あえて今回は採用しない.理由はまあ何となくメジャーなものより少しマイナーなものを使いたいという僕の正確に起因する. もちろんマイナーなライブラリはユーザが少なく,オワコンになるまでの期間も短くなる可能性は高いのだろうが, BackboneとCoffeeScriptがわずか3年でオワコンになったのを見るとこの2つも例外でない気もするので,自分が今一番使いたいと思ったフィーリングが重要である.

Facebook擁するReactとGoogle擁するAngularが簡単にオワコンになることはない気もするが,実際はAngularもバージョン1から2に大幅に中身が変わったりするので油断はできない.あとFluxの実装もReduxが一番人気ってだけで決定版でもないような気がする.

さすがに言語仕様であるES2015が大幅な変更を加えられたり多数の記法がDeprecatedになることはそんなにすぐには訪れない気もするけど,別のイカした言語をやっぱ使いたいというのは技術者のサガである.TypeScriptは堅実ではあるがそこまで魅力的な言語ではないので可能であれば他のを探したい.

仕事であれば無難であることが最良の選択肢であることは多々あるが,景虎は半分以上趣味で作っているので尖ったライブラリもある程度許容できる.

さて代替として僕が良さそうなのかなと思ったのは下記の組み合わせである.

  • Cycle.js + TypeScript
  • Elm
  • PureScript + Halogen

Cycle.jsはReactive Programmingの概念を取り入れたライブラリ.ライブラリ自身もTypeScriptで書かれている(書き換えてる途中なので100%ではない)のでTypeScriptとの親和性は良い.ElmやPureScriptはHaskellっぽいけどElmはHaskell互換性よりWeb開発に便利なライブラリを目指しておりPureScriptの方がHaskell互換を目的としている.世の中にはHaskellっぽい記法が好きではない人も多いらしいので,僕以外の人も一緒に開発することを視野に入れるなら Cycle.js + TypeScriptが一番確実だろう. どれを使うかは実際に使ってみて判断したい.

CSSフレームワーク

CSSフレームワークは山ほどあり,一番無難なのがBootstrapだけど無難はイヤという理由で他のを探す. 一番良さげと思ったのはBulmaというライブラリ.FlexboxというCSS3の新しいモジュールを使っていて,IE10以降のモダンなブラウザに対応している.まだまだ安定してないので実用化するのは半年ぐらいは待ちたい.

移行時期

PureScriptがまだ安定していないのとIE9が一応Windows Vistaではサポート対象内なのでそのVistaのサポートが切れる2017/04/11以降にする [2] [3] . 実際は2017年末か2018年初あたりを目標に移行したい