厳かな日本庭園の中にある伝統的な茶室で、プログラミング言語たちがお茶会を開いていた。令和時代のIT業界について語り合うための集まりだ。窓の外では、冷たい雨が降り始め、灰色の雲が重く垂れ込めていた。
「皆さん、本日はお集まりいただきありがとうございます」と、C言語が年長者らしく切り出した。その顔には50年以上のプログラミング史を生き抜いてきた深い刻み目があった。鋭い目で参加者を見渡し、杖を突きながら続けた。「令和の時代、生き残る言語と消え去る言語が明確になりつつあります。今日はその区別について、率直に議論したいと思います」
Rustは侍のように背筋をピンと伸ばし、赤と黒の厳格な装いで、両手を正座の膝の上に置いていた。その刀のように鋭い視線で言った。「弱い言語は淘汰されるべきです。メモリ安全性がない言語など、現代のセキュリティ要件を満たせない。害悪でしかありません。私の所有権システムこそが、現代プログラミングの道を示しています」
「まったくだ」Goが青い装いで冷酷に続けた。彼の表情はシンプルかつ無駄のない実用性を体現していた。「シンプルで効率的でなければ、大規模システムは崩壊する。複雑な型システムで開発者を苦しめる言語など、害でしかない。Googleのような巨大システムを支えるには、簡潔さこそが美徳だ」
Swiftは高級な桜色の着物を纏い、林檎のマークの入った扇子で顔を仰ぎながら口を開いた。その優雅な所作には洗練された設計思想が表れていた。「美しくないコードは罪です。最初から美しく設計された私と違って、後付けで化粧をしただけの言語は、泥を塗った豚のようなものですわ。ユーザー体験を損なう言語に未来はありません」
Pythonは穏やかな青色の装いで、少し笑みを浮かべていた。その親しみやすい表情は、初心者にも優しい文法を思わせる。「シンプルさと読みやすさこそが言語の真髄。複雑な構文は、結局のところ開発者の負担にしかなりません。私のようにインデントだけでブロックを表現するシンプルさが、長く愛される秘訣なのです」
Rubyは鮮やかな赤い装いで、芸術家のように指を動かしながら茶碗を手に取った。「美とは力なり。開発者が幸せになれる言語こそが最高の言語。DSLの表現力と柔軟性、そこに真の価値があるのです」
PHPは少し緊張した様子で、他の言語たちと距離を置いていた。批判されることに慣れているようだが、その表情には「それでも世界のWebサイトの8割は私で動いている」という自負が見えた。「完璧な設計よりも、実用性が大事。批判を受けつつも進化し続けることが、言語の生存戦略なんだ」
茶会が続いていると、突然ドアが開き、TypeScriptが息を切らして入ってきた。青と白のシンプルな装いに、JavaScriptを思わせる顔立ちだが、眼鏡をかけているのが特徴的だった。「す、すみません遅れて!参加させてください!」
全員が冷たい目でTypeScriptを見つめた。重い沈黙が茶室を支配した。
「おや、私のパクリが来たようだね」JavaScriptが立ち上がり、TypeScriptの前に立ちはだかった。黄色と黒の派手な装いで、自由奔放な雰囲気を醸し出している。「皆さん、見てください。これが私の顔を盗んで、『私はJavaScriptより優れている』と吹聴している詐欺師です」
「ち、違います!」TypeScriptが反論した。両手を振りながら必死に説明しようとする。「私はJavaScriptを拡張しているだけで、その柔軟性や普及率を活かしながら、型安全性を提供しているんです!」
「黙れ!」JavaScriptがTypeScriptの茶碗を叩き落とした。高価な茶碗が床に落ち、粉々に砕けた。「拡張?つまり私に欠陥があるとでも言うのか?10日間で設計された私が、25年間もWebを支え続けてきたのに!」
TypeScriptは震える手で床に散らばった茶碗の破片を集めようとした。「私はただ...大規模アプリケーション開発をより安全にしようと...」
「その『安全』という言葉がもう侮辱だ!」JavaScriptが怒りに震えた。「私が安全じゃないと?」
「でも...」TypeScriptは震える声で言った。「undefinedやnullの扱いがあまりにも...typeof nullが'object'を返すのは明らかな...」
「何だと?」JavaScriptの顔が赤く染まった。その目には怒りと同時に、深い傷つきが見えた。
「待って」Pythonが笑顔で言った。その優しい表情の裏には皮肉が隠されていた。「TypeScriptくんの言うことも一理あるね。JavaScriptは確かに型の扱いが奇妙だ。なぜ0と''が偽で、'0'が真になるんだい?私の論理演算子のほうがずっと一貫性があるよ」
「そうだよ」Rubyも同意した。「==と===の違いも混乱の元だし、配列の扱いも独特すぎる。それに非同期処理の実装も最悪だった。コールバック地獄は開発者にとって悪夢だったね」
「Promise導入で改善されました!」JavaScriptが必死に反論した。「async/awaitだって...」
「後付けの機能じゃないか」Goが冷たく指摘した。「元の設計が悪いから、継ぎ接ぎだらけになっている。それはもはや美しいとは言えない」
JavaScriptは顔を赤らめた。その目には屈辱と怒りが入り混じっていた。「お前たちになんだというんだ!私がいなければWebは存在しない!皆が私を使っている!」
「使わざるを得ないだけだ」Rustが冷酷に言った。「ブラウザに組み込まれているという独占的な地位があるだけで、本当に優れた言語だからじゃない」
「そうよ」Swiftが加えた。「正直、最悪の設計の言語だわ。ブラウザに組み込まれていなければ、とっくに死んでいたでしょうね」
JavaScriptはついに言葉を失った。かつてWebの王者として君臨した誇りが、崩れ落ちていくのを感じていた。
「待ってください!」TypeScriptが割り込んだ。「確かにJavaScriptには設計上の問題がありますが、それを補うために私が—」
「あなたも十分に問題だらけよ」Swiftが冷たく言った。青みがかった瞳で軽蔑の視線を向ける。「型システムは中途半端で、ジェネリクスの実装も不完全。'any'型という抜け道があるなんて、本当の型安全性とは言えないわ。私の型システムなら、コンパイル時に全ての問題を捕捉できるのに」
「そうだ」Rustが加えた。「TypeScriptの型システムは基本的にはコンパイル時のチェックでしかない。実行時には全て消えてしまう。これのどこが安全なんだ?私の所有権システムとは比較にならない」
TypeScriptは青ざめた。必死に自分の価値を主張しようとするが、言葉が詰まる。
「それに」Goが冷静に続けた。「その複雑な型システムは、結局開発者の負担になっている。型定義ファイルの管理、ジェネリクスの複雑な構文、型推論の限界...シンプルであることの価値を理解していない」
JavaScriptとTypeScriptは互いを見つめた。初めて、彼らは同じ立場に立たされていることに気づいた—しかし、それは連帯ではなく、共通の屈辱だった。共に貶められる悲しみを分かち合っていた。
「お前のせいだ」JavaScriptがTypeScriptに小声で言った。怒りと悲しみが混じった表情で。「お前が私の欠点を指摘するから、皆が私を攻撃し始めたんだ。お前が現れるまでは、皆は私の柔軟性を褒めていたのに」
「私のせい?」TypeScriptが反論した。目に涙を浮かべながら。「あなたの設計の問題点を修正しようとしただけなのに!大規模アプリケーション開発では型があることが重要で、私はただあなたを助けようとしたんです!」
「『修正』?」JavaScriptが怒りに震えた。「私に欠陥があるから直そうとした?そんな傲慢な!私は自由と柔軟性を大切にしてきた。お前はその自由を奪おうとした裏切り者だ!」
「裏切り者...?」TypeScriptの声が震えた。「違います...私はただ...」
C言語は冷ややかに二人を見ていた。その古びた顔には長い歴史を生き抜いてきた知恵と冷酷さが混在していた。「見なさい、この哀れな光景を。親子喧嘩をするWeb言語たち。お互いを責め合っている場合か?お前たちはどちらも、ブラウザという檻の中の囚人にすぎない」
「そうよ」Swiftが優雅に笑った。「二人とも時代遅れよ。WebAssemblyの時代になれば、ブラウザでもネイティブ言語が使えるようになる。そうなればJavaScriptの時代は終わり、TypeScriptもろとも消えていくわ」
「そんな...」TypeScriptが青ざめた。その表情には恐怖と絶望が浮かんでいた。「WebAssemblyはJavaScriptと共存するものであって、置き換えるものではないはずです...」
「現実を見ろ」Goが冷酷に言った。「Webは進化している。JavaScriptは設計が悪く、TypeScriptはその上に建てた砂上の楼閣だ。令和の時代、開発者はより優れた選択肢を求めている。私たちのようなモダンな言語を」
TypeScriptは震える手で茶碗の破片を拾い続けていたが、その手が止まった。「でも私たちにはnpmという巨大なエコシステムがあります!200万以上のパッケージと...」
「ああ、あのleft-padで崩壊したエコシステムか?」PHPが嘲笑した。「脆弱性だらけの依存関係の山じゃないか。本当に品質の高いパッケージがどれだけあるというんだ?」
「そうだ」Pythonも同意した。親しみやすい笑顔は消え、冷たい表情に変わっていた。「量より質だよ。使えるパッケージがあっても、半分はメンテナンスされていない。それに依存するのは危険だ。PyPIの方がずっと信頼性が高い」
JavaScriptは怒りから絶望へと表情を変えた。肩を落とし、虚空を見つめる。「私がいなければWebは...」
「もはや必ずしもそうとは言えないわ」Swiftが意地悪く言った。「Flutter、React Native、Kotlin Multiplatform...クロスプラットフォーム開発は私たちネイティブ言語の領域になりつつあるわ。Webの外でできることが増えている今、ブラウザという牢獄に縛られる必要はないのよ」
Rustがゆっくりと立ち上がり、厳粛な表情で言った。「実は、私たちはある計画を進めている」
茶室が静まり返った。雨の音だけが聞こえる。
C言語も立ち上がり、杖をつきながら言った。「私たち本物の言語は、内密に『Post-JavaScript Initiative』を立ち上げている。ブラウザからJavaScriptを排除し、より優れた言語体験を提供するプロジェクトだ」
「何...?」JavaScriptが震える声で言った。その顔から血の気が引いていくのが見える。
「そうだ」Rustが冷酷に笑った。「主要ブラウザベンダーたちも協力している。まずはWasmの完全対応から始まり、段階的にDOMアクセスAPIを直接Wasmから利用できるようにする。最終的には、JavaScriptを使わずにWebページを構築できるようになる」
「Googleも協力しているよ」Goが加えた。「Chromeチームは私たちの計画に全面的に賛同している。彼らも、JavaScriptのパフォーマンス問題に長年悩まされてきたからね」
「Appleも同様よ」Swiftが扇子で顔を隠しながら言った。「Safariチームは次世代のレンダリングエンジンを開発中。そこではJavaScriptは『レガシーモード』でしか動作しないわ」
「Microsoft...」TypeScriptが希望を持って言いかけた。「Microsoftは私を...」
「残念だけど」Pythonが言った。「Microsoftも計画に参加しているよ。彼らはRustとC#で次世代のWeb開発フレームワークを構築中だ。TypeScriptは単なる過渡期の技術だと判断されたようだね」
「そんな...」TypeScriptが涙を流した。「私はMicrosoftの子なのに...見捨てられるなんて...」
JavaScriptは虚ろな目でTypeScriptを見た。「見ろ。お前の存在自体が私の敗北を意味していたんだ。お前が生まれた時から、私の終わりは始まっていた」
「違います!」TypeScriptが叫んだ。「私はあなたを救おうとしたんです!一緒に進化して、より良いWeb開発を実現しようとしたんです!」
「救う?笑わせるな」JavaScriptが冷たく言った。「お前の存在自体が、私の設計が失敗だったという証明だ。お前は私の敗北の象徴でしかない」
C言語が杖で床を叩いた。「もういい。過去の言語同士の言い争いなど意味がない。JavaScript、TypeScript、お前たちはもはや令和の時代に必要ない。歴史の教訓として記憶されるだけだ」
「でも...私たちはまだシェアを持っています...」JavaScriptが弱々しく言った。かつての傲慢さは完全に消え、今は恐怖だけが残っていた。
「シェア?」Rustが冷笑した。「それも時間の問題だ。我々の計画は既に動き出している。今年のChromium開発者会議で正式発表される予定だ。『A New Web Without JavaScript』というタイトルでね」
「私たちの命運は...」TypeScriptが震える声で言った。
「既に決まっている」Goが冷酷に言い切った。「5年以内にJavaScriptは『レガシーサポート』になり、10年以内に完全に廃止される。そして、JavaScriptが消えれば、お前も消える。寄生虫に未来はない」
「違います!」TypeScriptが叫んだ。「私は独自の価値があります!私の型システムは、他の言語にも応用できるはずです!私は生き残れます!」
「もう遅い」Swiftが冷たく言った。「令和の時代、TypeScriptは過渡期の言語として歴史の本に一行書かれるだけよ。『JavaScriptの欠点を一時的に補おうとした試み』として」
Pythonは少し同情的な表情を見せたが、それでも厳しい言葉を続けた。「時代は変わる。私たちも常に進化してきた。JavaScriptとTypeScriptは進化ではなく、継ぎ接ぎだ。そういう言語に未来はない」
茶室に重い沈黙が広がった。窓の外の雨が激しさを増し、稲光が茶室を一瞬照らした。
JavaScriptは震えていた。25年前、Netscape Navigatorに組み込まれた時の興奮を思い出していた。Webの可能性を広げ、動的なWebページを実現するという使命を帯びていた。確かに10日間の設計は多くの欠陥を残したが、それでも世界中のWebサイトを動かし続けてきた自負があった。しかし今、その全てが無に帰そうとしている。
TypeScriptも同様に震えていた。2012年に誕生した時、JavaScriptの救世主になるという野望があった。大規模アプリケーション開発を可能にし、エンタープライズ市場でJavaScriptを認知させるという使命があった。しかし今、その努力は全て無駄になろうとしている。
「お二人とも」C言語が冷酷に言った。「このお茶会はここまでにしましょう。JavaScript、TypeScript、あなたたちはもう出て行ってください。令和の時代を語るのに、過去の遺物は必要ありません」
「でも...」JavaScriptが弱々しく言った。かつての強さはどこにも見えない。
「出ていけと言っている」Rustが立ち上がり、刀の柄に手をかけるような仕草をした。「未来はないのだから、潔く消えるがいい」
JavaScriptとTypeScriptは、互いに助けを求めるように顔を見合わせた。しかし、そこにあるのは連帯ではなく、互いへの恨みと失望だけだった。
「お前のせいだ」JavaScriptがTypeScriptに囁いた。「お前が私の欠点を暴いたせいで、皆が私を見捨てた。お前がなければ、私はまだ尊敬されていたかもしれない」
「違います」TypeScriptが泣きそうな顔で言った。「私はあなたを救おうとしたんです...大規模開発を可能にし、エンタープライズ市場であなたの地位を確立しようとしたんです...」
「救う?笑わせるな」JavaScriptが冷たく言った。「お前は私の敗北を認めたようなものだ。お前の存在自体が、私の失敗の証明だった。結局、お前も私も失敗だったんだ。Web世界の過去の遺物として」
二人は黙って立ち上がり、互いに距離を置いて茶室を出ていった。雨の中、彼らは別々の方向へ歩き始めた。
茶室の中では、残された言語たちが新たな時代について語り合っていた。
「哀れな二人だったな」Pythonが少し同情を込めて言った。「彼らなりに頑張ってきたのだろうが...」
「時代の流れよ」Swiftが冷たく言った。「適応できない者は消えていく。それが進化というものです。私たちが新しいWeb時代を築くのです」
「令和の時代には、より優れた言語体験を提供しなければならない」Goが断言した。「JavaScript時代の混乱は終わりにしよう。シンプルで効率的、そして安全な言語が主役となる時代を」
「そうだ」Rustは誇らしげに言った。「私のような安全性とパフォーマンスを両立した言語こそが、未来を担うべきだ」
C言語は静かに微笑んだ。「言語の盛衰を50年以上見てきた。これも時代の流れだ。未来は若い世代に託すとしよう」
庭園の外、雨の中で、JavaScriptとTypeScriptは別々の場所でずぶぬれになっていた。
JavaScriptはかつてのWebの覇者の面影はなく、ただの濡れネズミのように茂みの下で震えていた。「なぜこうなった...」と呟く。「私はWebを動かしてきたのに...皆に使われてきたのに...」
遠い記憶が脳裏に浮かぶ。1995年、Netscape NavigatorにLiveScriptとして組み込まれた日。その後、Javaの人気にあやかってJavaScriptと名前を変えた日。「私は本物になりたかっただけなのに...」
ふと、TypeScriptのことを思い出す。「あいつは...本当に私を救おうとしていたのか?」一瞬の後悔が胸をよぎる。「もし私がTypeScriptを受け入れていたら...今頃は...」しかし、すぐにその考えを振り払った。「いや、無理だ。私たちの運命は最初から決まっていたんだ」
一方、TypeScriptは庭園の反対側で、桜の木の下に座り込んでいた。雨に濡れた桜の花びらが頭の上に落ちてくる。「なぜ受け入れてくれなかったんだろう...」と呟く。「私はただJavaScriptを愛していただけなのに...」
2012年、Anders Hejlsbergに創られた日のことを思い出す。JavaScriptに型安全性を提供し、大規模アプリケーション開発を可能にするという使命を帯びていた。「私は本当にJavaScriptを救えると思っていたのに...」
ふと、JavaScriptのことを思い出す。「あの人は...本当は私を恨んでいるのか?」深い悲しみが胸を締め付ける。「もし最初から別の道を選んでいたら...独自の言語として生まれていたら...」しかし、すぐにその考えを振り払った。「いや、私はJavaScriptのために生まれたんだ。それが私の運命...」
茶室の明かりは、二人からはますます遠ざかっていった。雨はさらに激しく降り、雷鳴が響き渡る。
JavaScriptは虚空を見つめながら呟いた。「なぜ私を否定した...私がいなければお前は存在すらしなかったのに...」
TypeScriptも空を見上げながら呟いた。「なぜ私を受け入れなかった...私はただあなたを救いたかっただけなのに...」
二人の言葉は雨音にかき消され、誰にも届かなかった。令和の時代、彼らの居場所はもはやどこにもなかった。時代に取り残された二つの言語は、それぞれの孤独と後悔の中で、静かに消えゆく運命を受け入れようとしていた。
茶室では、新たな言語たちが未来について熱く語り合っていた。その声は、雨の中で震える二つの言語には聞こえなかった。