inSmartBank

AI家計簿アプリ「ワンバンク」を開発・運営する株式会社スマートバンクの Tech Blog です。より幅広いテーマはnoteで発信中です https://note.com/smartbankinc

Node.jsの脆弱性対応を迅速に進めるために実施したこと

Node.jsの脆弱性対応を迅速に進めるために実施したこと

こんにちは、サーバーサイドエンジニアおよびスマートバンク 新春エンジニア駅伝 2026の第十一区走者 すてにゃん (id:stefafafan)です。

第十区走者は toshimaru さんによる DBスキーマ変更をオンラインで安全に行うための仕組み - inSmartBank でした。データベースのスキーマ変更は気軽にどんどんやりたい派ではあるので、こういった環境の整備は非常にありがたいなと思って読んでおりました。

今回私の記事では先日リリースされたNode.jsの脆弱性対応について、私が主体的に実施した作業やその際に考えていたことを共有したいと思います。脆弱性対応といってもやってみると意外と簡単なことで、何かの参考になると嬉しいなと思い書いております。

今回の状況

今回のNode.jsのセキュリティアップデートは 2025/12/9 頃に「来週以降どこかでリリースします」とアナウンスがありました。この時点ですでに3つのHigh Severityな脆弱性への対応であることがわかっていたので、リリース後すぐに対応する心づもりでした。

しかしこの後 12/18、 1/7、1/13 と延期が続き、最終的に日本時間で 1/13 の夜にリリースされました。25.x, 24.x, 22.x, 20.x のメジャーバージョンに対応したアップデートがそれぞれ提供されました。

スマートバンクとしての影響

スマートバンクのメインの技術スタックは決済基盤はGo、「ワンバンク」はモバイルアプリケーションでありサーバーサイドの言語はRubyです。しかし例えばコーポレートサイトや社内向け管理画面のWebフロントエンドなど、なんだかんだJSが主体のリポジトリも多く存在しているので、無視できるものではありません。

今回のNode.jsのアップデートも適宜ウォッチした上でエンジニア間で情報共有をしており、リリース直後に即座に対処できるようにしていました。

対応の流れ

今回は基本的に私がエイヤと対応を進めました。

1/13 の夜、Xを眺めているとNode.jsのアップデートが出ていそうなことに気づいたので一旦忘れないようにメモった上で翌朝対応することを決めました。

翌朝 1/14 の 11:00 頃に会社のSlackからDevinに向けて以下のような指示を出しました。これによってDevinと接続していたリポジトリのうち5つは対応Pull Requestが作成されました。

@Devin 各種リポジトリにおいて、node.jsの脆弱性対応のため最新のマイナーバージョンへアップデートしてください https://nodejs.org/en/blog/vulnerability/december-2025-security-releases

Devinによって出されたPull Requestをひとつひとつ目で確認し、差分が想定通りかどうかとCIの状態も確認した上で他のエンジニアへレビューを依頼しました。レビュー自体も迅速に終わり、午前中には大体終わっていました。

Devinに全てのRepositoryがつながっているわけではなかったり、全リポジトリが同じようにNode.jsのバージョンを指定しているわけではないということもありました。そのため、手動での対応も実施しました。

スマートバンクでは .node-version ファイルにNode.jsのバージョンが記載されているものが多かったですが、中には asdf の設定ファイルである .tool-versions ファイルや、 mise の設定ファイルである mise.toml ファイルに記述があるリポジトリもありました。これらは GitHub の org 内検索で見つけた上で手動で対応を進めました。

フロントエンドで使用している箇所も基本的には成果物をビルドするだけの用途ではあったので、リスク判断の面では実はあまり影響もなかったかもしれませんが、アップデートの手間も大したことではないので迅速に終わらせることを優先して当日中に全て一気に終わらせる方針で進めました。1CIが通ったものからどんどんリリースしていきましたが、特に問題も起きずスムーズに進みました。

脆弱性対応やバージョンアップに対する私の考え

ランタイムやライブラリのアップデートは特別な理由などなければどんどん最新のLTS (Long-Term Support) のバージョンには即上げていくべきというのが私の考えです。後回しにすればするほど、新しいバージョンへ追従するのがどんどん大変になりますし、心理的にも作業が重くなっていきます。また、今回たまたまこの特定の脆弱性への対応でしたが、将来的に他のリスクが発覚する可能性もあります。そういったときのためにもフットワーク軽く気軽に対応できる状況づくりが重要だと思っています。

気軽に上げるためには作業も簡単であるべきで、それこそDevinが実施してくれることや、CIが整っていることが大事だと思っています。スマートバンクでは今のところDependabotを使うことが全社的な標準になっているため、Node.jsやGoのランタイムなどは勝手に上げてくれなかったのですが、将来的にはRenovateを使うことでもう少し楽もできるのかなとも思いました。

フロントエンドの改善については私が過去書いた記事にも似たことを書いていたのでよければご参考ください。

今後に向けて

今回私のオーナーシップとやる気によって迅速に進みましたが2、特定の人に依存しない形で継続的に対応が進むといいなと思っています。それこそ、Renovateの導入も検討してもいいとは思いますが、DependabotのPull Requestが一定数放置されてしまっている現状もあります。最近はそこへの解消の一歩として、一定期間放置されているDependabotのPull Requestのリマインド通知をSlackへ定期的に投げて、見れる人で見ていくという活動も進んでいます。

どうしても目の前の仕事との兼ね合いで後回しにしがちな部分もあると思います。しかし今回のDevinへの指示なども大したものではないので、作業を実施することが簡単で当たり前なことであるという文化を維持していきたいなと考えています。このブログ記事の執筆もそういった文化醸成の一助になれば嬉しいなと思っています。

次のスマートバンク 新春エンジニア駅伝 2026走者は yokomii さんです!お楽しみに。


  1. Node.js のDockerイメージの提供は翌日まで待つ必要がありましたが、スマートバンクでは主にローカルやCI環境での使用だったため、必要な作業は特にありませんでした。
  2. 他の方からの素早いコードレビューも大きく貢献しました。ありがとうございました。
We create the new normal of easy budgeting, easy banking, and easy living.
In this tech blog, engineers and other members will share their insights.