JavaScriptは「一本で何でも作れる」言語になった
今回のテーマは、JavaScriptを身につけたことの良い面と悪い面です。効果と弊害、という切り口で話が進みます。
キースさんはまず、JavaScriptの良さを「フロントエンドの第一言語である」ことだと話します。
フロントエンドだと第一言語というか、これしかないよねっていう話がまず一つです。
HTMLやCSSも言語のカテゴリーには入りますが、キースさんはCSSを言語っぽく感じない、という個人的な捉え方も添えています。
現在フロントエンドはTypeScriptで書くのが普通ですが、ブラウザが理解できるのはHTML、CSS、JavaScriptです。TypeScriptは最終的にJavaScriptにトランスパイルされます。
さらにバックエンドにはNode.jsがあるため、JavaScriptが書ければフロントもAPIバックエンドも作れます。データベースとやりとりするライブラリもあり、表から裏まで一気通貫で作れると話します。
フロントとバックで同じ型定義を使えるフレームワークもあり、アプリケーション全体を一つの型定義ファイルに集約できる点もメリットだと挙げられました。
ネイティブアプリまで作れる全能感
クロスプラットフォームのアプリを作るフレームワークもあります。React NativeやIonic、かつてのApache Cordovaなどが例に挙がりました。
つまりJavaScriptが書ければネイティブアプリも、スマホもデスクトップアプリも作れる。思いつくものは大体作れる世界になっている、とキースさんは話します。
つまり何でもできるねという感じです。思いつくものは大体JavaScriptで作れるようになるっていう世界線に今来てます。
この万能さこそが魅力であり、生存戦略としても大きいと語ります。
ライブラリの乱立とReactへの収束
一方で、JavaScript界隈には尖ったエンジニアも多く、毎年のようにブログやライブラリが出てきます。何がベストプラクティスかはまだわからない、というのが実情です。
毎年のように俺が作った最強のライブラリーだフレームワークだっていうのも出てくると。これはもう仕方ないと思ってます。
ただしフロントエンドのフレームワークはReactで一旦落ち着いている、とキースさんは見ています。Solid、Vue、Svelteなどもありますが、使用率でReactが頭一つ二つ抜けている状況です。
ReactをラップするフレームワークとしてはNext、SolidにはSolidStartがあります。キースさんはスピード重視の観点からQwikも好きだと話します。
バックエンドはPHP、Python、Go、Ruby、Rustなど言語が豊富です。それでもNode.jsの存在があるため、JavaScriptさえ書ければ作れる現実は変わっていないと語ります。
プログラミング講師もしているキースさんは、学生にもこう伝えているそうです。
学生さんたちにも最悪困ったらJavaScriptを極めろと。そうすると少なくともそんな食いっぱぐれることはないだろうっていうのは今も思ってますね。
JavaScriptに偏りすぎた弊害
ここから話は弊害へ移ります。キースさんはJavaScriptに偏りすぎたせいで、新しい言語が頭に入ってこなくなったと打ち明けます。
学ぶ意欲はあるのに、「これってJavaScriptだとこう書くよね」と、翻訳機のようにJavaScriptを使い始めている自分がいると言います。
逆に言うとJavaScript置き換えられるんだったら、じゃあJSで良くないっていう風に考えがち。それが良くなくて、頭に入らないんですよ。
去年からGo言語を勉強しているものの、なかなか頭に入ってこないそうです。子育てや寝不足、他に学ぶべきものの多さもありますが、それ以上にJavaScriptが染み出してくると表現します。
JSがどんどんなんか染み出してくるので、お前ちょっと隠れてくれとか落ち着いてくれみたいな気分で最近思ってます。
パフォーマンスと「引き出しの狭さ」
作るだけならJavaScriptで良いのですが、言語そのものはパフォーマンスがそれほど良くない、という問題があります。
ウェブアプリはユーザーの目が肥え、遅いアプリは離脱率が高くなります。求められる要件も増え、アプリケーションは複雑化しているため、速度の遅さが響いてきます。
アクセシビリティやスタイリング、起動時の体験も考慮が必要です。FCPのような指標も満たさなければなりません。
重い処理をバックエンド側で計算させ、フロントは色をつけて出すだけにするなど、選択肢はいくつもあります。しかしJavaScriptしか知らないと、その引き出し自体がないとキースさんは指摘します。
キースさん自身、PHPは以前触れていたものの、本格的に書いたのはバージョン5.6が最後で、今のバージョンもわからないと振り返ります。
現在はエンジニアリングマネージャーとしてGo言語を勉強していますが、やはり書かないと頭に入らないと話します。
使わないと刻まれない。また次の瞬間また調べるのかって。いや、非効率ですよね。
理解していなければ、AIが書いたコードもきちんとレビューできない、という現実的な理由も挙げられました。
フロントからバックエンド、ネイティブアプリまで一気通貫で作れる。生存戦略として食いっぱぐれにくい
他言語が頭に入りにくくなる。パフォーマンスや解決手段の引き出しが狭まり、エンジニアとしての幅が広がりにくい
広がりすぎた適用範囲と学習コスト
JavaScriptは適用範囲が広くなりすぎた、とキースさんは言います。何でもできるからこそ、距離感を保つのに苦労していると語ります。
フロントエンドに求められるものは多岐にわたり、複雑度が増しています。JavaScriptはそれにサクッと対応できる手段の一つでもあります。
以前配信したJavaScriptの歴史回でも触れたように、プログラマーでない人でも触れつつ、玄人ががっつり開発もできる言語を目指したのがJavaScriptです。その世界観は満たされていると話します。
一方で、両方に触れられる使い勝手の良さが人間の欲望を止まらなくさせます。あれもこれもという要求を天才エンジニアたちが実現し、抽象化してライブラリとしてNPMに公開していきます。
結果、ライブラリの数も種類も広がりすぎ、同じ分野に複数のライブラリが乱立します。学習コストは高く、フロントエンドは今マジで大変だとキースさんは言います。
若い方とか新卒エンジニアの人たちがフロントエンドに本当に足を踏み入れるって、かなり高い山に登っていかなきゃいけない。
言語を学ぶだけなら良いが、それを使って何かをするのが本題です。ウェブアプリを作ろうとすると、言語だけでなくエコシステム全体を学ぶことになり、それが大きな山になって返ってくると指摘します。
古い仕様のお掃除と、それでも残る面白さ
言語そのもののパフォーマンスは抜本的に変わるのは難しいとキースさんは考えています。そこで提案するのが、使われていない古い仕様のお掃除です。
もう使われていないAPIがあるなら、下位互換を気にせず落としてもいいのではないか。TC39が全世界にアンケートを取って消せば、言語をもう少し軽くできるのではないかと話します。
ブラウザのWindowオブジェクトやドキュメントオブジェクトの下にも大量のAPIがあり、本当に使っているのかと問いかけます。歴史的に残されたものをお掃除してほしい、という希望です。
deprecatedになった機能もすでにたくさんあるとしつつ、もう少し加速してほしいと語ります。
フロントエンドは人間の欲望との戦いであり、複雑度は常に高まっていく。それでもキースさんは、想像したものは大体JavaScriptで作れるという全能感こそが面白みだと語ります。
挑戦する人の背中は押したいし、手助けもしたい。いろんな良し悪しがあるよ、というのが今回の話でした。エンディングでは、自身も取捨選択をしてインプットしなければ、という戒めが語られました。
まとめ
JavaScriptはフロントからバックエンド、ネイティブアプリまで一気通貫で作れる万能な言語で、その全能感が面白さでもあります。一方で、偏りすぎると他言語が頭に入りにくくなり、パフォーマンスや解決手段の引き出しが狭まる弊害も生まれます。キースさんは自身の実感を交えながら、JavaScriptとの距離感の取り方を語りました。
- JavaScript一本でフロント・バックエンド・アプリまで作れる万能さが最大の魅力であり生存戦略になる
- フロントエンドのフレームワークは使用率でReactに一旦収束しつつある
- JavaScriptに偏りすぎると、Goなど他言語をJavaScriptに翻訳して考えてしまい、頭に入りにくくなる
- 言語そのもののパフォーマンスや広がりすぎた学習コストが、フロントエンドを高い山にしている
- 使われていない古い仕様のお掃除が進めば、言語をもう少し軽くできるのではという期待がある
