HN 日本語サマリー

← 一覧へ戻る
プログラミング

JavaScriptのミッドライフクライシス

The JavaScript Midlife Crisis (maroun-baydoun.com)

34 pointsby maroun-baydoun12 コメント

要約

JavaScriptのエコシステムは、その普及とツールの進化により、開発者にとって奇妙な時代を迎えています。かつてはJavaScriptで書かれていたツール群が、RustやGoなどのより高速な言語で書き直される傾向にあり、パフォーマンスは向上するものの、メンテナンス性や貢献の敷居が高くなるというトレードオフが生じています。この「キラキラした新しいもの症候群」は、JavaScriptが本来得意としていた領域でさえ、その優位性を揺るがし始めています。

全文翻訳

しばらく前、私はLinkedInで半ば冗談、半ば真実のようなことを投稿しました。JavaScriptのツールチェーンの大規模な書き換えが押し寄せたのです。かつて、この言語を私たちのスタックにおける確固たる地位に押し上げるのに役立った古いツールは、疑わしいとまではいかなくても、クールではなくなりました。 それらの遅いパフォーマンスは、何百万行ものコードが本番環境に到達するのを遅らせたという非難の的となりました。ブロックでクールな連中を追いかけるのはますます難しくなっています。彼らの名前はキャッチーではないかもしれませんが、その約束は魅力的です。スピード、そしてそれも大量にです。 JavaScript開発者にとっては奇妙な時代です。この言語はかつてないほどユビキタス(遍在)していますが、自らの庭で地盤を失いつつあるように見えます。ツールはより速く、セットアップはより簡単に、抽象化はより厚くなっています。私たちは書く、設定する、そして待つ時間が少なくなりました。バンドルする、出荷する、ホットフィックスする時間が増えました。私たちのコードと最終製品の間で何が起こるかは、無視しやすくなっています。ベンチマークはすべて緑色に輝いています。折れ線グラフは上昇、下降、または横ばいのトレンドを示しており、それは深夜3時の電話が少なくなることを意味するどんな方向であれです。では、なぜ私がパーティーを台無しにするためにここにいるのでしょうか? 死なない言語 (悪名高く)10日間で書かれた言語にしては、JavaScriptは不可能を達成することに成功しました。それはブラウザという故郷を脱出し、周囲のすべてを飲み込み始めました。その反応は予測可能でした。正気の人なら誰がサーバーやツールをJavaScriptで書くでしょうか?それは、多くの、多くの、多くの人がそうするだろうということになりました。 JavaScriptは携帯電話、ゲーム機、マイクロコントローラー、そしてあなたの冷蔵庫にも搭載されました。ビットを理解できるものなら、JavaScriptを実行できます。その人気にもかかわらず、JavaScriptは決して楽な道のりを歩んできませんでした。その誕生から間もなく、それを修正する、あるいはむしろ完全に置き換える試みがすでに始まっていました。 MicrosoftはInternet ExplorerにVBScriptとJScript(JavaScriptの独自フレーバー)を搭載しました。これはJ-PopやJRPGと混同すべきではありません。90年代には、Jで始まるものはすべてよりクールに聞こえました。Macromedia、そして後にAdobeは、ActionScriptで動くFlashイントロやゲームでインターネットを賑わせました。Googleは、Flutterに追いやられる前に、Chromeの未来のためにDartに賭けました。CoffeeScriptのようなプロジェクトは、JavaScriptのカップにシンタクトシュガー(構文糖衣)を加えました。 JavaScriptを置き換えようとしていないときは、外部からそれをパッチすることに忙しくしていました。jQueryは、ブラウザがほとんど口を利いていなかったウェブプラットフォームを統一しました。Lodashは、言語の配列とオブジェクトの明白なギャップを埋めました。Moment.jsは、日付を他人の問題にしました。 JavaScriptも、皆がその終焉を企てている間、じっとしていたわけではありません。そのシングルスレッドの中で、それはかなり忙しくしていました。ブラウザベンダー、標準団体、そしてコミュニティは、この言語を前進させ続けました。ECMAScriptのリリースは、長らく待ち望まれていた言語機能をもたらしました。TC39は提案を出し続け、ブラウザはJavaScriptが何をすべきかについてゆっくりと合意することを学びました。時間の経過とともに、その標準ライブラリは、恥ずかしいほどまばらではなくなりました。 そしてTypeScriptが登場し、JavaScriptの頭はついに銀の皿に乗せられました。少なくとも、そう見えました。TypeScriptは、他のものが失敗した場所で、一つの不都合な真実を受け入れることで成功しました。JavaScriptはどこにも行かないということです。あなたはそれを改善し、隠し、それにコンパイルし、あるいはそれについて文句を言うことができました。ただ、それをなくすことはできませんでした。 私たちが手放しているスーパーパワー すべてを支配する一つの言語は、祝福でもあり呪いでもあります。私たちは何十年もその呪いについて話してきました。いつの間にか、私たちはその祝福について忘れてしまいました。 JavaScriptが広がり続けるにつれて、それは自身のドッグフードを食べ始めました。Node.jsは、多くのツールが出現し、エコシステムを征服することを可能にしました。リンター、バンドラー、フォーマッター、テストランナーは、それらがリンティング、バンドリング、フォーマット、テストするコードと同じ言語を話していました。もし、あるいはむしろ、そのツールチェーンで何かが壊れた場合、平均的なJavaScript開発者はコードをチェックすることができました。おそらく、彼らはバグを理解したでしょう。もし彼らが8時間の睡眠をとっていれば、おそらく彼らはそれを修正したでしょう。もし彼らが戦う気分であれば、おそらく彼らはプルリクエストを提出したでしょう。少なくとも、彼らはバグの責任をメンテナーに押し付けるのに十分な言語知識を持っていました。 そしてその親しみやすさは驚くほどよく伝わりました。同じ言語が、開発者をブラウザからサーバーへ、そして最終的にはその間のほぼすべての場所へと追随しました。JavaScriptは、フルスタックエンジニア、あるいはむしろフルエコシステムエンジニアの台頭を加速させました。誰かがデミゴッド(半神)のステータスを達成せずに、スタックの両端を真にマスターできるかどうかは、別の日の議論です。しかし、JavaScriptはその移行を著しく容易にしました。 エンジニアは、コールスタック、プロトタイプベースの継承、そしてtypeof null === "object"という不幸な事実に関する知識を、ほぼすべてのプロジェクトに持ち込むことができました。人々は、このすべてを網羅するエコシステムを中心に、キャリア全体とビジネスを築きました。その大部分がオープンソースで無料であり、現在もそうであるという事実は確かに役立っています。 JavaScriptはブラウザ戦争に勝ち、他のいくつかの重要な戦いでも勝利しました。そして、Rustとその仲間たちがトロフィーと記念写真のために現れました。 ミリ秒の追求のために Rust、Go、Zigは、JavaScriptツールチェーンのますます大きな部分を占めつつあります。そして、その明白な理由があります。それらは速いのです。非常に速いです。 私たちは、主にC++で書かれたエンジン内で実行されるJavaScriptを生成するために、RustでJavaScriptをコンパイルしています。誰も、進捗バーに感情的な愛着を形成するほど長くビルドプロセスを見つめたいとは思いません。しかし、すでに高速なツールの代替品が10倍高速であると宣伝している場合、それが私たちに返してくれた貴重なミリ秒を何に使うべきか疑問に思い始めます。 コーヒーをもう一杯飲む? より重要なことに、私たちはそのスピードのために何を交換したのでしょうか?バンドラーをRustで書き直すと、それは速くなっただけではありません。それをメンテナンスできるJavaScript開発者のプールも縮小しました。新しいツールは、まだアヒルに見え、アヒルと鳴きますが、それは全く異なる獣です。その内部は、より少ない人々が鍵を持っているブラックボックスの背後に後退します。ソースはまだオープンかもしれませんが、貢献への扉は閉ざされています。 それは、おそらく、完全に合理的なトレードオフでしょう。しかし、それはトレードオフです。そして、私たちはベンチマークのその側面に特に興味がないようです。 輝くものがすべて金ではない 時にはそれは錆びています。ソフトウェアエンジニアリングは、常に「キラキラした新しいもの症候群」という特に急性なケースに苦しんできました。言語にはその瞬間があります。フレームワークが流行になります。いくつかの成功したプロジェクトがパターンを確立し、企業がそれに投資し、カンファレンストークが続き、ラップトップステッカーが配られ、突然、技術的な決定が主なセールスポイントになります。「Rustで書かれた」は、実装の詳細というよりは、機能のように聞こえ始めます。 成功は模倣を生みます。一つのツールが書き直され、劇的に速くなります。もう一つが続き、さらに続きます。同調圧力が高まります。すぐに、JavaScriptで書かれていることが、JavaScriptツールのための明白な選択肢というよりは、負けの賭けのように見え始めます。 私たちは、ゆっくり進む蒸気機関車のために、ますます速い線路を敷設しています。 これらすべてが、コンパイルされた言語がその仕事に間違ったツールであることを意味するわけではありません。多くの場合、それらはまさに正しいツールです。しかし、この仕事に正しいツールと、競合他社がやっていることに何となく似ているすべての仕事に正しいツールとの間には違いがあります。新しい輝くツールがベンチマークでもトップになったら、それに抵抗することはかなり難しくなります。スピードが技術的な議論を提供します。トレンドが残りを処理します。 目的地は不明 私たちの高速JavaScriptの追求は、非常に奇妙な場所に私たちを連れて行きました。私たちは、主にC++で書かれたエンジン内で実行されるJavaScriptを生成するために、RustでJavaScriptをコンパイルしています。おそらく、それは成熟したエコシステムの自然な進化であり、JavaScriptは関連性を保つためにスタック全体を飲み込む必要はないのかもしれません。言語は共存し、それでも繁栄することができます。ウェブは、さらに多くの言語が加わる前に、少なくとも3つの言語の上に構築されました。個別に取れば、すべてのステップは完璧に理にかなっています。一緒に取れば、それらはより興味深い何かを指し示しています。私たちは置かれています