ReactとRiotとVueを触ってみた感想(暫定版)

前置き

なんか新しくつくんべ、っていうときにフロントのフレームワーク(ライブラリ?)を何にするか迷ったんで調べた。
机で調べてたらわかんなかったんで書くべって言ってとりあえず3種類ざっと書いてみたのでその構成と感想を記録しておく。
特に入門記事とかではないのでコード片の類はない。

比較対象

全部データフロー回りのライブラリの使用を前提とする。
界隈で一番スタンダードっぽいのを選んだつもりだけどRiotがわからん。

評価軸

網羅するならこんなんがあるのかなーって思った。
全部についてちゃんと調べたわけではない(ので暫定版としている)

  • 学習コスト
  • 書きやすさ
  • テスタビリティ
  • パフォーマンス
  • その他
    • デザイナーさんとの協業のしやすさ
    • コミュニティの強さ

感想

個別の感想

  • React + redux
    • redux及びreact-reduxの導入がめんどい
    • 他の組み合わせに比べて初期学習コストが高い
    • ストアやイベント群を分けて考えることができるので大きくなればなるほど嬉しい、気がする
    • どこに何を書くべきかが結構わかりやすい気がした
  • Riot + RiotControl
    • RiotControlがめちゃくちゃシンプルでわかりやすい
      • 具体的には onoffonetrigger だけ
    • シンプルでさっと書けるけどその分規約が必要っぽい
      • みんなで適当に書くと死にそう
    • RiotControl使ってる人すくなすぎわろた
      • 「reduxいれたいけどどうしたらいいかな!?」って質問に「お前はシンプルさのためにRiot使ってるんじゃないのかredux使いたければReactやってろ(超意訳」というレスがついててちょっとにやっとした
  • Vue + Vuex
    • Riotより先に触ってて、ええやんって思ってたんだけどRiotのが好き
      • 結局attributeの書き方がVueのお作法に乗っ取る必要がある点が好きじゃない
      • 同じくらい気楽にかけるんだったらRiotでよくない、的な
    • Vuexは結構いい
    • scriptタグ内でexportするやり方が他に比べてなんとなく好きではない
      • Reactでclass作ってexportするのと同じだろって言われるとそうなんだけど……
    • styleタグをcomponent内でscopedで使うという方法は好き
      • 好きだけど後で困るような気もする

全体の感想

  • あるコンポーネント複数回使うような場合に、同じコンポーネントから同じ名前で違うイベントが発行されるのどうやって解決するんだろうって悩んでる
    • まだそういう事態になってないから実際困るのかも謎
    • react-reduxのドキュメントで紹介されてたPresentational ComponentとContainer Componentを分ける手法は結構アリな気がする
    • つまりContainer Componentは再利用可能ではなくstoreとかイベント側にべったりにしちゃう
    • これはRiot + RiotControlでもできそう
      • つらいのかどうかはわかんない
  • ぶっちゃけどれもViewフレームワークとしての書き味はあんまり変わんないなって思った
    • ReactのめっちゃJavaScriptですって中にDOMがあるのはデザイナーさんはつらくないのかなって疑問に思った
      • まあ最近のデザイナーさんはjsくらい読めるものなのかもしれない。知らんけど
    • データフロー制御のためのフレームワークによってだいぶ書き方が変わる気がする
  • テストとパフォーマンスは手がまわんなくてまったく調べてない
    • テストは、どれもstateの変更をtestableにするというところはできる気がする?
      • 一番強力なのはReact + reduxな気がしてるけど
    • dispatchされたイベントとそのときのargumentsを記録しておいたときに、stateがこうなってるはず、みたいなテストって重要だろうか
    • それよりかはkarmaとかで殴りにいったほうがいいんだろうか

まとめ

よくわかんない。
作るやつの規模にもよるし、メンバーの知識量・これからの学習量にもよるしなんともいえない。
めちゃくちゃ月並みな発言になってアレだけどVueよりRiotのほうが好きなのでReactかRiotかどうしようかなってまたうだうだ悩もうと思う。