NodeJS本体のアップグレードは放置されがち
npmの利便性に釣られてついつい色々な用途で使ってしまうNodeJSですが、それ故にメンテナンスがおろそかになってしまいがちです。それは弊社も例外ではありませんでした。
npmを多数利用することで依存性が複雑化し、githubから通知されるセキュリティアラートによるマイナーアップデートも含めて、NodeJS周りのアップデートは多くの工数をとりがちです。NodeJS本体のアップグレードとなると、特に膨大な検証・切り替えの工数がかかります。場合によっては、プロダクトの開発が長期間停止するレベルの工数となるかもしれません。
それ故に、ついつい後回しにして、ついつい放置されてしまいがちなのです。
NodeJSのEOFはすぐにやってくる
githubにあるNodeJSのレポジトリを確認すると、現状のライフサイクルは以下の通りでした。
参照元URL : nodejsレポジトリのRelease
弊社で使ってきた8系は2019年に入ってから延長メンテナンス状態で、とうとう今月末でEOLを迎えます。
Initialリリースからちょうど5ヶ月でLTSとなり、それからEOLまでは2年2ヶ月。進化の早い昨今のWeb開発言語の世界を見渡せば極端に短いとも思えませんが、作る側視点ではアップグレードに要する工数とつらみが2年おきにやってくるわけで、そう考えるとなんと短いサイクルであろうかと感じてしまいます。
アップグレードで問題を起こさない設計は可能?
個人的な感想ですが、NodeJSとnpmを使っている限りはかなり厳しいのではないかと思います。
そもそも、利便性の高いライブラリ管理システムほど依存性も気軽に複雑になりがちです。複雑な依存性を多数持ち合わせるライブラリ群を利用している以上は、そのどこかのアップグレード(アップデート)によって不整合が発生しうるのは回避できません。
大なり小なりのところはありますが、PHPにおいてのPeclやRubyにおいてのGemでも同じような問題は生じると思います。
設計開発の方針として、そもそもnpmへの依存度を減らすというのが、唯一の抜本的な案ではあると思いますが、開発・保守のエンジニアの人手が少ない時にはそうも言っておられず、もどかしいところです。
それでも、Web開発言語の進化の速さについていく
知恵伊豆という渾名で知られる松平信綱公は、「世の禁制が三日で変わってしまう」という嘆きの声に対し、以下のように応じたそうです。
「それは二日でも長いのだ」
信綱公の生きた江戸時代初頭はまだまだ政治的な仕組みも文化も不安定な部分が目立つ時代です。そんな時代に三日で変わるような禁制は即刻変わって然るべきであり、そういうものであると受け入れる必要がある、という意味の問答だと言われています。
この考え方は、Web開発言語についても本質的には同じだと思います。新しい技術の栄枯盛衰が光のような速さで繰り返される現代において、もはや短い期間で言語仕様が変わるのは当然であり、受容すべきものです。
間違いなくツラミはあるけど、いつまでも後回しにしてしまうとその分自分たちが取り残されてしまう。しかもセキュリティリスクを背負ったままに。そんな感じで、Web開発言語のアップグレードについて改めて考えさせられた数日間でした。
以上、少し長いポエムでした。