最近 React + Redux でSPAをやっていて、パフォーマンスとかいろいろ問題が出てきています。 試行錯誤を繰り返す中、チームメンバーが "Getting Out of JavaScript Fatigue - React Edition" というブログ記事を紹介してくれました。
Reading Hacker News comments on JavaScript frontend articles is a depressing task these days. The majority is complaining: Tooling too complex, bundling too complex, Too many different frameworks, best practices change too quickly.
出だしから「最近 Hacker News でフロントエンドJavaScript関連のコメントを見ると気が滅入る」とか書いてあって共感を覚えます。
そして、Reactに関するむず痒い思いをを端的に表すものとして一つのコメントを紹介しています。
When React first started getting popular all you read about was how simple the API was and how it was Easy to Reason About™. Fast forward to today and you need to have working knowledge of WebPack, ES6, Redux, immutable.js, Babel, and a bevy of other dependencies to be aligned with the React ecosystem's ever-evolving best practices.
自分は最近になってSPAを本格的に始めたのですが、Gulp、ES6、Babel、Less、React、Redux、その他React/Redux関連ライブラリと、一気にいろんなものを導入しました。確かに疲れます。
さて、そんなReact界の問題に対してブログではこう言っています。
When people hype patterns or libraries, they do not tell you the most important thing: When you don't need it.
みんな良い手法とかライブラリとか言うけど、どんな場面では使う必要がないか、という一番大切なことが抜けているとのことです。
この点で react-howto は素晴らしいとのこと。私はまだちゃんと読んでませんが、確かに順番に勉強するべきものが示してあって、必須ではないものについては問題が起きたら導入しろとか書いてあります。
ブログポストはこの react-howto をいくつかの点から補足するという位置づけの様です。
以下、内容に関するざっくりとした意訳メモ。
- Reactは本当に必要か
- 他のフロントエンド技術に精通していてそれに満足しているとか、単純なCRUDを普通に作るならReactはいらないだろう
- 逆に、既存のSPAフレームワークに不満があったり、これから新しくフロント周りをイケてる感じにやりたいとか、もしくは単純に新しもの好きな人ならReact使ってもいいんじゃない
- オフィシャルチュートリアルの後に手を付けるべきもの
- 既存のWebアプリがある場合
- インタラクティブ性の高い独立した小さなコンポーネントをReactで置き換えてみよう
- Web開発をこれから始めようとする人は
- Reactそのものに注力するために、これみたいな非常にシンプルなテンプレから始めるべき
- 既存のWebアプリがある場合
- JSXを使うか否か
- 無駄に議論されてるけれど、JSXを使うかどうかは大した問題じゃないので好きにしたら良いよ
- 三ヶ月で全てが古びてしまうのではないか?
- 短期間で劇的な変化があることは無いだろう
- ReactそのもののAPIは既に十分以上に安定している
- 一つの問題に対して大量のライブラリが作られるようならば、それは解決が簡単な些細な問題ということだから気にしなくて良い
- Reduxについてだって、Fluxの基本的なコンセプトの確立からすれば些細な向上でしかない
- 技術に対する正しいマインドセット
- 新しいhotな技術が次々に生まれてくるけれど、それらはある特定の問題を解決するために生まれたものである
- あなたが抱えている問題はあなたしかにしかわからないのだから、coolな人達が開発した技術だからという理由だけでそれに頼ってはいけない
- きちんと自分の問題を把握して、それに合った解決策を探すべきだ
- 頭に中でチームが直面している問題を整理しておく
- 新しい技術がbuzzってきたときは、その品質や、作者が直面した問題が自分の問題と同じようなものなのかを良く確認する
- 開発者が心がけるべきことは "生産性の極大化" であって、"ベストプラクティスを実践すること" でも "coolなものを試すこと" でもない
最近自分が新しい技術に保守的なのを少し反省して、チームを活性化させるためにも新しい物を取り込もうという動きを強めているのですが、慎重さも捨てないように戒めていきたいと思いました。
老害化しているようにも感じますが、若者に向けては、基本をしっかり学んで些細なことに惑わされないようにと願う次第です。