先週、PHPの脆弱性の問題が毎日ニュースで取り上げられていました。私の運営するゲームサイト「ソリティアのたまご」はPHPを使っていないので、直接的な影響はありませんでしたが、Node.jsのパッケージ(ライブラリ)やフレームワークのバージョンを継続的に更新して、緊急事態に備えることの重要性を改めて意識しました。
メジャーバージョンの更新は敬遠されがち
ライブラリやフレームワークのメジャーバージョンの更新は、破壊的な変更(今まで機能が廃止されるなど)を含むので、コードの修正やデバッグ作業が発生します。
このメジャーバージョンの更新に開発コストを支払っても、ユーザー(サービスの利用者)に直接的な恩恵がないので、対応が後回しになるケースがあります。
更新作業はAIが一晩でやってくれた
私もメジャーバージョンの更新を後回しにしていたので、メンテナンス期間が終了したパッケージがいくつもありました。
Node.jsでメンテナンスが終了したパッケージの一覧は npm outdated で取得できます。この一覧に表示されたパッケージを npm install {pakcage-name}@latest で最新版に更新していきました。
この状態で、AIに「〜のパッケージをバージョン〇系から最新に更新したので、コードを修正して」と依頼すると、最新バージョンまでのリリースノートやChangelogを参照して、破壊的な仕様変更が行われた部分を自動で置き換えてくれました。
私はGoogleのAntigravityで ”Gemini3.8 Flash” モデルに処理させましたが、この程度の作業であれば、問題なくやってくれました。
今回はAIで更新する実験も兼ねていたので、パッケージの更新(インストール)は手動で行いましたが、今後は更新コマンドもAIに任せて大丈夫だと思います。
テストの自動化
メジャーバージョンの更新後に、今まで通り動作しているかチェックが必要です。このチェック作業を自動化しておくことで、今後も繰り返し行われるメジャーバージョン更新の手間を減らすことができます。
最近では、AIにブラウザを操作させてチェックする方法もありますが、チェックしたい項目は決まっているので、"Playwright"を使ったE2Eテストを導入しました。このほうが、トークン消費を抑えられますし、チェックも早く終わります。
チェックする項目が増えると、テストコードのメンテナンスが大変なので、必要最小限にしています。
- 認証が必要なページで、認証が効いているか?
- データベースにアクセスするページが正常に表示されるか?(データベースとの接続チェックを兼ねる)
- サイトの代表的なページで表示崩れがないか?
- (ブラウザゲームのサイトなので)ゲームスクリプトが正常にロードされるか?
※ "Playwright"はマイクロソフトが開発したオープンソースの画面なしブラウザです。ブラウザエンジンだけで動作して、表示テストができます。
バージョンアップが必要か知りたい
使用しているライブラリやフレームワークの、新しいバージョンがリリースされたときに通知が欲しくなったので、方法を調べました。
GitHubでリポジトリを管理している場合、"Dependabot"という機能が使えます。
プロジェクトのルートに .github/dependabot.yml を配置して設定を書くと有効化されます。Node.jsのパッケージ更新を通知したい場合は、こんな感じの設定ファイルになります。
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "02:00"
timezone: "Asia/Tokyo"
open-pull-requests-limit: 10
通知のOn/Offと、通知先はGitHubの設定画面で決められます。アカウントの設定ページと各リポジトリの設定ページの2箇所で設定が必要なので、注意してください。
- [Account] - [Settings] - [Notifications] - [System]にDepandabotの通知先と頻度の設定
- [Repository] - [Settings] - [Advanced Security]にDependabotのアラート有効化の設定
まとめ
これらの仕組みを組み合わせることで、メジャーバージョンの更新作業を、ほぼ自動化できました。
- GitHub Dependabotからバージョン更新の通知が届く
- AIにバージョンの更新を依頼する
- E2Eテストでチェックする
これぐらいの手間なら、メジャーバージョンの更新も積極的に対応していくことができます。攻撃者がAIを使ってくるのであれば、こちらもAIを使って積極的に守っていきましょう。