0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.jsのパッケージ更新をAIで自動化した話

0
Posted at

先週、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のアラート有効化の設定

まとめ

これらの仕組みを組み合わせることで、メジャーバージョンの更新作業を、ほぼ自動化できました。

  1. GitHub Dependabotからバージョン更新の通知が届く
  2. AIにバージョンの更新を依頼する
  3. E2Eテストでチェックする

これぐらいの手間なら、メジャーバージョンの更新も積極的に対応していくことができます。攻撃者がAIを使ってくるのであれば、こちらもAIを使って積極的に守っていきましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?