Reactに心酔してjQueryを捨てるべきか、或いはいつ古道具を売り払うかの話
この辺を読んでbh.mgzl.jpでもReactを使っているので思ったことなどを書いてみる。雰囲気的には増田に概ね同意したい。
SPA前夜
SPAが使える道具になったのはlocation.hashを使ったテクニックやHistoryAPIが実際にモダンブラウザで動くようになったこの数年の話で、それまではそういう選択肢すらなかった。あったとしても、URLが変わらない不完全なものだった。 だから、1つのURLで1つの状態を表現するためには実際にページ遷移をさせるしか無かった。もちろんGmailとか例外的な物はあったけれど誰にでも実装できるようなものではなかった。
それが誰にでも使えるようになったのは、jQuery.pjaxのようなライブラリ(のプラグイン)が出てきてからだったと思う。だがjQueryのDOM書き換えは単純であまり効率的ではないので、例えば1000行あるリストをテキストボックスに入力した文字で逐次絞り込むみたいな機能はパフォーマンスが出なかった。特にCPUとメモリの限られるスマホでは。
だからこそ、SPAという選択肢は非常に限られたものだったし、jQueryMobileで巨大なWebアプリケーションを作るのは色々な面で難しかった。
我々は新たな道具を手に入れた
そこにAngularJSやReact.jsが登場したことによって、誰もが選びうる選択肢の1つとしてSPAが加わった。今まで自分のような凡人が作れなかった物が作れるようになったのだ。歓喜以外の何物でもない。
だがライブラリは道具だ。道具は必要な時に必要な物を選んで使わなければならない。4tトラックを手に入れたからといって原付きバイクが不要にはならないだろう。
AngularJS 1.xの失望もあり、もしかするとReact.jsが空飛ぶ車ではないかという希望を持ちたい気持ちは分かる。実際にjQueryは空飛ぶ車だったし、それに乗ることができたことに感謝もしている。
React.jsに乗るべきか
今はまだReact.jsが空飛ぶ車であるかは分からない。だが少しぐらい乗っておいて損はない。JavaScriptを書ける(≠jQueryを書ける)人間にとっては学習コストも大したことが無いし、今乗っておくことに損はない。
だが実際にその道具を使うかどうかはまた別の話だ。SPAという概念やReact.jsといったライブラリは単に選択すべき道具の1つに過ぎない。
新たな道具を手に入れたからと言って、古道具を捨てて新しいものしか使わないのは愚かである。ことさら技術という道具においては、実際に場所をとるわけでもないのだから本当に不要になったその時に捨てればいい話だ。
「5年後のビジョンは何だ?」「あ?ねぇよそんなもん。」
しかしフロントエンドをやっている人間で、5年後のビジョンを持っている人は少ないだろう。それを持っている人は非常に優れたエンジニアとして賞賛していい。
昔から(当時は単にWebデザイナーやコーダーと呼ばれていた)フロントエンドエンジニアは常に「今」と戦ってきた。ブラウザは更新され続け、新たな概念のデバイスが誕生する。
そもそも「今どきのアプリケーション」は環境の変化によって5年も持たない。どうせ5年後には作りなおすことになるので、だったらいま使える道具は使っても構わないだろう。そういう意味でReact.jsはよい道具である。
つまり5年後のビジョンなどくそ食らえだ。これだけ環境の変化が激しいと5年後の保守コストを見積もることなど不可能に近い。少なくとも自分は諦めた。5年後の話は5年後にしよう。まずは明日の納期の話だ。
(そう言って5年後にまた受注する、というのは別のお話。)