
SolidJS誕生から10年:フロントエンドフレームワークの進化と未来
オープンソースのSolidJSが誕生してから7年が経ちました。当初は個人的な探求から始まったこのプロジェクトは、今やフロントエンド開発に大きな影響を与える存在となっています。この記事では、SolidJSの誕生秘話、Reactとの出会い、そして他のフレームワークへの影響を振り返り、今後の展望を探ります。
オープンソースへの旅
13年前、私は会社でオープンソースプロジェクトに触れましたが、積極的に関わることはありませんでした。しかし、Web Componentsのアップデートをきっかけに、オープンソースの恩恵を受けるようになり、いくつかのライブラリを開発しました。
Reactの台頭とKnockoutJSの苦悩
2015年、Reactの登場に衝撃を受けました。当時の私はKnockoutJSを愛用していましたが、Reactの人気ぶりに危機感を覚えました。Reactのアーキテクチャに疑問を持ちつつも、KnockoutJSの衰退を目の当たりにし、新たな道を探し始めました。
SolidJSの誕生と挑戦
娘が生まれた2015年の夏、SolidJSの原型となるリアクティブライブラリの開発に着手しました。当初は「framework」という名前のプライベートなBitBucketで開発を進め、Vueに似た構文を採用していました。
ベンチマークテストを重ねる中で、パフォーマンス向上のために様々なアプローチを試しました。そして2018年初頭、SolidJSは主要なソリューションを凌駕するパフォーマンスを達成し、同年4月24日に正式に公開されました。JavaScript フレームワークの性能比較においてトップの座を獲得しましたが、不正行為の指摘を受け、さらなる改善を重ねました。2019年に最高峰に到達しました。
SolidJS、進化の道のり
2018年10月、ReactがHooksを発表しました。HooksはSolidJSのComposable Primitivesに似ており、ReactがComposable Primitivesを推進するとは考えていませんでした。SolidJSコンポーネントは、一度実行される関数のため、Reactとは異なりClassは不要です。
この出来事をきっかけに、「仮想DOMなしで、仮想DOMと同等の機能を実現できること」を証明するという新たな目標を掲げました。そして、Suspense、Transitions、HMR、SSR、Hydration、Streamingなどの機能を実装し、SolidJSの可能性を追求しました。
広報活動と苦悩
マーケティング経験がなかった私は、2019年12月にTwitterを始めました。しかし、SolidJSのコンセプトはなかなか理解されず、批判や中傷を受けることもありました。それでも、私はSolidJSの可能性を信じ、情報発信を続けました。
理解者との出会い
SolidJSはほぼ私一人で始まりました。アイデアを共有するために SpectrumとGitterチャットを追加しましたが、David Di Biaseが参加するまでは、プロジェクトを成功させるために時間を費やすことをいとわない人を見つけることができませんでした。その後、プロジェクトに取り組むために、アレクサンドル、マイロ、ライアン、ダン、ニキルをはじめ、多くの人が集まりました。
OpenCollectiveを使用してハッカソンを2回開催し(SolidHack)、コンポーネントライブラリなどの不足しているエコシステムを構築しました。Solid Fellowshipプログラムに寄付金を投入し、Dev Toolsやドキュメントなどの重要なイニシアチブを後援しました。ジェイソン・レンストルフ、テオ・ブラウン、ジャック・ヘリントンなど、新しいアイデアを受け入れてくれるコンテンツ作成者たちに友人を見つけることができました。カンファレンスで講演を始め、ダニエルやアティラなど、ソリッドを支持してくれる世界中の人々と出会いました。
シグナルの普及とフロントエンドフレームワークの未来
2015年には誰も「Knockoutは常に正しかった」とは言いませんでした。もちろん、2018年や2020年でさえ言う人はいなかったでしょう。これはKnockoutではなくSolidJSの作成に影響を与えたためです。2025年になると、SolidJSのように動作しないポピュラーなフロントエンドライブラリを見つけるのは難しいでしょう。2018年にはゼロでしたが、React以外のほとんどすべての有名なフレームワークが飛びついてきました。一体何が起こったのでしょうか。
このアイデアはフレームワーク開発者の目に留まり、Angular チームとの会話へと繋がりました。その結果、Angular Signalsが誕生しました。
また、QwikのMisko HeveryにSignalsはResumabilityを実現するために欠けていた機能だと納得させました。Preactの開発者たちにもSignalsのパフォーマンスについて説明しました。当初は抵抗がありましたが、VueのEvan YouとSvelteのRich Harrisに、ランタイムリアクティビティを行うためにファイングレインレンダリングのほうが良いと納得させ、Svelte RunesとVue Vaporを作成するに至りました。Vueは仮想DOMを放棄し、Svelteはコンパイラアプローチを諦め、どちらもSolidJSとほとんど区別がつかなくなりました。現在、ブラウザ用のSignalsに関するTC-39の提案さえあります。
SolidJSの登場は、フロントエンド開発に新たな可能性をもたらしました。仮想DOMに頼らないアーキテクチャは、パフォーマンスと開発体験の両立を実現し、他のフレームワークにも大きな影響を与えています。
これからの10年
SolidJSは、これまでの10年間で大きな進化を遂げました。今後は、他のソリューションがまだ想像もしていない、このモデル独自の能力を最大限に引き出すことに注力していきます。Web開発をさらに良くする方法はまだあります。SolidJSの旅はまだ始まったばかりです。