Skip to content

Instantly share code, notes, and snippets.

@mizchi
Created April 12, 2017 06:04
Show Gist options
  • Save mizchi/842bdf0f41d632751fdc25186e1587fa to your computer and use it in GitHub Desktop.
Save mizchi/842bdf0f41d632751fdc25186e1587fa to your computer and use it in GitHub Desktop.

Reactの難しさを分解しよう を読んで。

n番煎じの話題。今更な話題、それはわかってる。自分の周りの環境が変わったので、書き下すことで、再度整理したい。

抽象

サーバーが生成するHTMLが一つの粘土の像だとしたら、jQueryがナイフで、Reactは設計図を持った3Dプリンタ。

鼻が大きすぎるから削るとか、ちょっとしたことをやるのが jQuery の主な用途。しかしあるいは、職人的に、大きな塑像から、一つの像を切り出すこともできる。

Reactは、胴体、頭、腕を個別に生成できる3Dプリンタ。

ナイフで削った場合は、どのような過程でそこに至ったかの記憶は残らないが、3Dプリンタは設計図の出力過程として残るので、任意の設計地点まで巻き戻って、そこから再生成することができる。パーツを交換することができる。つなぎ目は、多少見苦しいかもしれない。

素人と職人のナイフの使い方の違い

素人考えの削りだしと、職人のそれの主な違いは、頭に設計図があるかどうかで、設計図があって一貫しているなら、結果として出来上がるそれは、おそらく違いはないか、むしろその一点ものの方が無駄がなく優れていることもあるだろう。

ただ、スクラッチで破綻のない設計図を作るのは難しい。ましてやそこに込められた意図・思想を共有することはもっと難しい。それがわかる人なら、その努力はあまり本質的ではなく、別のもっと大きなレイヤーに注力するために、そこに3Dプリンタがあるなら、使うのではないだろうか。

僕も結局、Reactエンジニアではあると自覚しているんだけど、環境構築と統合はともかく、Reactそれ自身は「難しくないので」それ自身に触れることが減ってきていて、より大きなアーキテクチャの視点で頑張ってることが多い。

一つ上のレイヤーからみたときに、設計が簡単、これがReactが選ばれる背景の一つ。その視点がないと、Reactへの批判はあまり意味がない。物事を無駄に考えている、という批判はわかるが、そうせざるをいけないぐらい今の一部のウェブはゴリゴリと、しかしさり気なく動くことを要求されている。

そうそう、自己満足だ、と言われる設計は、そう悟られる時点で失敗していて、僕もダメだと思ってるけど、上手い設計は空気のように馴染んで存在を悟られないようにもできる。大多数が目指すべきは、派手なものではなく、空気や水のようなもの。言ってはみたが、僕もできてるかというと微妙。

React を使えという話ではない

あなたに必要なのは、初心者にとってのナイフで、それで jQuery を使うのなら、そのスタンスは正しい。ただ、職人のナイフの粋に、素人考えで踏み込んでしまってる場合、考え直したほうがいい。そこに踏み込んでるかどうかは、客観的に気づけなかったりするのが、もっとも大きな問題なのだが…。

僕は昔、jQuery/Backbone を仕事でやりこんで、 他人の書いた jQuery がいかに辛いか、そして自分の書く jQuery もいかに見苦しいか、を学んだと思う。その結果、習熟した jQuery を捨てたほうが幸せになれると思って、魂が震えるやつを書いた。

また、クライアントが入力値に対する写像としてのビューを生成する、という視点が達成されるのなら、別にReactでなくてもいい。

縄張り争い

いろんなフレームワークがHTMLのテンプレート機能を持っていて、サーバーサイドの連携(とくにForm周り)をやっていると、そのメリットを手放すことになり、どちらのレイヤーから生成するのがいいか、綱引きになる。その所作は、あまり合理的ではないことが多く、実質的に政治だったり、信仰だったりする。

ここまで書いてみて

そもそも粘土の像という例えた時点で、引き算しかできないから抽象に失敗していて、話の出だしから失敗してるなと思った。

何かオチてないという感覚はあるが、書きたいことは書いたので、おわり。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment