共通化を指針にするのはおすすめできない
「共通化」というワードはプログラマーであれば誰しもが一度は聞いたことがあるだろう。そしてもうひとつ、それと対称であるかのように語られるのが「コピペは悪」だ。
ここで僕が異議を唱えたいのは共通化を善とする教義についてだ。世間的に共通化を良いものだとする風潮があるようなので石を投げるために書き殴ろうとおもう。
「共通化」というワードはプログラマーであれば誰しもが一度は聞いたことがあるだろう。そしてもうひとつ、それと対称であるかのように語られるのが「コピペは悪」だ。
ここで僕が異議を唱えたいのは共通化を善とする教義についてだ。世間的に共通化を良いものだとする風潮があるようなので石を投げるために書き殴ろうとおもう。
ざんねんです…… サポートにメールしてたときはあんなにフレンドリーだったのに……。
代わりと言ってはなんですが、Koolertronというところがほぼほぼ同じ物(ていうか同じ場所の製品なんじゃねえのという疑いもなくはない)を販売しているので、同じような物がほしい人は試してみてもいいかもしれないですね。
こちらは4年くらい前から米国Amazon.comで販売されているのを確認してるので、まぁ割と信頼できるんじゃないかなとおもいます。
Parbloという中国で液タブなどのイラストレーター向けの製品を作っているメーカーが出している左手専用のキーボードです。
価格設定が揺れているようですが、最近は5500円で安定しているように見えます。
(右手用のものも存在するようなのですが、日本の人が入手するには現地に行くか公式の通販ページから頼むしかないのかな?)
ちなみに僕はスプラトゥーンでは長らくパブロを愛用していました。
続きを読む
これは以前に書いたhachibeechan.hateblo.jpの続きになります。
また、この記事を書くにあたってはLoctekさんから製品の提供を受けております。
ずっと感じてたもやもやを書き連ねたら長くなってしまったが、ぼんやりとReactとかなんか難しそうだしめんどくさいから新規案件だけどjQueryでやろっかなどうしよっかなーと迷っている人の指針になってくれればうれしい。
出た時から延々と言われ続けているものの、やっぱり今でもjQueryとReactを「比較」するようなことは行われていたりする。
これらは「DOMを操作する便利API集」と「GUIを構築するためのViewライブラリ」で、両者は戦場が同じだから下レイヤの操作はブラウザのDOMを叩いているというだけで、そもそも思想や目指している部分は全く違う。
そして今やWebアプリというものは、本格的なGUIアプリケーションを作る場所へとなりつつ(あるいはすでに)ある。
そういう世界観で、ブラウザAPIが簡単に叩けるだとか、タイプ数が少なくて済むという話があまり本質的でないのはお分かりいただけるだろう。各ブラウザベンダーが少しづつ足並みを揃えて標準化が進み、リッチなユーザ体験を提供するという段になって必要になるのは思想でありアーキテクチャであり、それを落とし込んだフレームワークだ。Win32 APIとMMVMのどちらが優れているかという議論をする人はいないだろう。それと同じである。
GUIアプリケーションを構築する際のハードルについては色々と存在するが、まずStateとViewの関係性を健全に保つことの重要性は皆同意するところだとおもう。MVCがやりたいことも突き詰めればそれだ。
ReactはViewがもつState*1とそのPresentation(ブラウザであればDOM)の流れを管理するというのがその目的で、addEventListenerは長いから短くしましょうとか、DOMの操作をメソッドチェインでクールにキメるぜというのはその思想の外側に存在する。
後述するが、つまるところReactの目的は状態の管理と、そこからレンダリングされるViewが常に再現可能なことにある。ReactがシンプルにしたいのはStateをどうレンダリングするかの流れで、テンプレートのシンタックスなんかはその本質から少しはずれる。
なのでJSXは、単純にJavaScript側でオブジェクトのツリーを人間にやさしい形で構築できるようにするためのDSLで、それは目的でも手段でもない。
一時期、Riot.jsとかが炎上マーケティングっぽいものをしかけてきててもイマイチ盛り上がらなかったのも恐らくそこが原因で、当時Reactにうおーすげーってなっていた人が見ていたのは関数型的な思想をWebのViewの世界へ良い感じに持ち込んできたところで、そこに「HTMLの中に書けるシンタックスでコードが短い!」というぶつけ方はまるで見当違いだったのだ。もちろんイケてるシンタックスでコードが短いのは大事なことだけど、その下敷きになっている思想がセクシーであることが重要になる。
*1:誤解を招きそうな表現だが、Storeで管理されているStateとComponent特有のStateというのは管理されてしかるべきで、ReactがStateを持つのもそういった理由による