2025年12月13日土曜日

予想に反してNode.jsが普及してしまったことを振り返る

東日本大震災が起きる前はNode.jsは普及しそうに無いと思っていたのだが、予想を大きく外したことを認めておきたい。Node.jsはサーバーサイドJavaScriptで書かれたウェブアプリケーションサーバー。

2025年時点でサーバーサイド技術が判明している大規模ウェブサイトのうち約4.6%で使われている*1。2015年1月でのNode.jsの稼働ベースのシェアは0.1%に過ぎなかったが、そこから10年間で4.5%ポイント上昇した*2

2025年のStack Overflow Developer Surveyでは、回答者の48.7%が使用しており、最も人気のあるウェブ技術となっていた*3。特に中小企業の開発で人気だそうだ*4

Node.jsの普及の理由は

  1. C10K問題を解決できるソリューションとして先行していた
  2. サーバーサイドもフロントエンド(と言うかクライアントサイド)もJavaScriptで統一する需要があった
  3. JavaScript/TypeScriptフレームワークAngular/React/Vueの出現によりHTMLのレンダリングがクライアントサイドに移ってマイクロサービス化の波に乗った
  4. 検索サーバーがヘッドレスブラウザを導入し、クライアントサイドレンダリング(CSR)でも正しくインデックスできるようになった
  5. サーバーサイドとクライアントサイドを統合したNext/Nexus/React Serverも出て来て、フレームワーク管理のSSGが行えるようになるなど、独自の世界を切り拓いた

ことが考えられる。C10K問題やマイクロサービス化だけであればGoでもよく、Javaもすぐにキャッチアップしたが、よく知られて手を出しやすいJavaScriptと言うプログラミング言語であること、サーバーとクライアントを同じ言語でカバーできる点が評価され、発展的なフレームワークが出現したと言うことか。

だが、速度や並列処理の問題などから、Goに移行するところもあるようだ*5。また、予想外の方向でも利用者は苦しんでいる。パッケージ管理システムまわりの癖が強い*6

  1. あちこちのライブラリを利用する文化があり、かつライブラリの後方互換性をあてにしない方針のパッケージマネージャーであるため、アプリケーションに添付するライブラリのファイル群(node_modules)が肥大化しやすい。
  2. パッケージのインストールにフックしてコードを走らせる事ができる仕様のためか、近年、パッケージマネージャー経由でのマルウェア侵入が繰り返し報告されている*7。他のプログラミング言語では聞かない状況だ*8

2024年のStack Overflow Developer Surveyでは、Node.jsを利用している開発者の27.1%が、今後も利用し続けたいと答えている*4のだが、逆に考えると7割ぐらいは微妙に思っていることがわかる。他の開発環境も体験してみたいのか、Next.jsやNuxt.jsが窮屈だと思うのか、AngularやReactやVueの後方互換性の無さや流行り廃りについていくのがつらいのか。

ところで、Node.jsに追い落とされた感があるPHPではあるがWordPressなどのCMSにより、現在でもインストールベースでは圧倒的なシェアを誇っている。

*12025年12月上旬の調査では5.4%に達していた(Usage Statistics and Market Share of Node.js, December 2025)。

*2Historical yearly trends in the usage statistics of web servers, December 2025

*3Technology | 2025 Stack Overflow Developer Survey

*450+ Node.js Statistics Covering Usage, Adoption, and Performance | by Brilworks Software | Medium

*5数はそう多くはない。速度を理由にPHPから移行するところもあるし、習得の容易さを理由でJavaからGoに移行しているところもあるので、Node.jsが際立って劣ると言う話ではない。

*6node_modulesの問題点とその歴史 npm, yarnとpnpm

*7Node poisoning: hijacked package delivers coin miner and credential-stealing backdoor – Sophos News(2021年10月24日)

npmにサプライチェーン攻撃、Chalk、debug、ansi-stylesなど18個のnpmパッケージにマルウェアが注入 | gihyo.jp(2025年9月9日)

npmパッケージを狙った2度目の大規模攻撃 492のパッケージが自己増殖型ワーム「Shai Hulud」に感染:セキュリティチームに求められる6つのアクションとは - @IT(2025年12月05日)

*8他にもサーバーサイドのセキュリティーホールが立て続けに報告されているが、こちらは新しいフレームワークではありがちである。JavaでもSecurity Manager周りやフレームワーク、ライブラリのセキュリティーホールは頻繁に報告されて来た。初期には重要な機能であったSecurity ManagerとAppletは、保守コストが高いと見做されたのか、Java 21でobsoletedされている。

0 コメント:

コメントを投稿