© RAKUS Co., Ltd.Node.jsバージョンアップで困らないためのコミットの読み⽅#RAKUSMeetup株式会社ラクス 第三開発部 チャットディーラー開発課浅野 仁志2023/09/06
View Slide
⾃⼰紹介● 名前 浅野 仁志● 所属 チャットディーラー開発課● 今までの経験○ PHP 3年○ React, Vue 1年○ Node.js 6ヵ⽉● マイブーム○ Docker, k8sとかに興味があります。2
⽬次1. チャットディーラーとは2. Node.jsのバージョンアップの進め⽅3. 発⽣した問題点4. 私達がとった施策について5. 具体的な影響調査のやり⽅6. その効果、結果7. まとめ3
チャットディーラーとは● 社内向けAIチャットボット● チャットで質問をするとボットが⾃動で回答する● 管理画⾯からボットの設定を⾏う4
チャットディーラーで使⽤している技術について● 管理画⾯周り○ PHP,Laravel● チャット画⾯周り○ Node.js● 機械学習周り○ Python5
チャットディーラーの使⽤している技術について● 管理画⾯周り○ PHP,Laravel● チャット画⾯周り○ Node.js v14がEOLを迎える● 機械学習周り○ Python6
バージョンアップを担当することに● 私がバージョンアップの担当者に7バージョンアップの進め⽅● バージョンアップ先のバージョンを決定● 変更履歴などを⾒て、変更内容の把握● プロダクトコードの改修● リリース
バージョンアップの進め⽅1. バージョンアップ先のバージョンを決定調査時点ではv18が最新のLTSバージョンだったので、v18に決定2. 変更履歴から変更内容の把握コード差分、Issueの議論などを読む3. 改修プロダクトコードに影響がある場合は修正4. リリース準備&リリース進めていくと様々な問題点が発覚した8
バージョンアップに⼯数がかかりすぎる要因1. 変更点の量が膨⼤である2. 1つ1つの変更内容を把握するのに時間がかかる問題点9
1. 変更点の量が膨⼤である● v14 → v18 メジャーバージョンアップ4つ分● コミットレベルでみて516点の変更点があった● 影響の有無に関わらず、全て確認する必要があった10
2. 変更内容を把握するのに時間がかかる● コミットレベルでコードの差分⾒てもどこに影響するかわからない○ 変更内容にNode.jsの内部処理の修正などもある○ 内部処理の修正だから影響ないと思いたいが、確信が持てない● チーム内に前任者がおらず、ノウハウがない● 影響調査の勘所がわからず、無闇に調査する時間が溶けていく11
私達が取った⼯数削減の施策1. コードの差分の読み⽅を⼯夫2. テストで品質を担保12
コードの差分の読み⽅を⼯夫13調査内容● 変更履歴をコミットレベルで追う● コミット、Issueの議論などを読むコミットの読み⽅で⼯夫したポイント● ドキュメントの修正がないかどうか● Node.jsのテストコード、ドキュメントで関数の使い⽅(引数等)● Node.jsのテストコードでアサートの期待値の変更が無いか
差分のドキュメント部分だけで下記の変更内容であることがわかる● ヘッダーにhostが新しく設定できるようになった● request.authorityで:authority、hostがどちらかが取得できる⇒ 新規追加で既存のコードには影響なしと判断できる具体例: ドキュメントから影響を判断14
具体例: テストコードから影響を判断する場合● Node.js本体のコードから変更内容を把握するにはかなりの⼯数がかかる場合がある● テストコードから影響判断することも考える● テストコードが追加されていて、他のテストコードに変更なし既存の動きには影響がないため、改修が不要だろうwriteの第3引数に例外発⽣時のコールバックが設定可能になった 15
具体例: 上記の⼿順でもわかない場合● どうしようもないから、テストで担保する● もし関連しそうな機能がわかるなら、テストケースを厚くする16
2. テストで品質を担保● コミットの変更内容を読み解きたいが、わからない場合がある● 影響範囲をリストアップしてその範囲を重点的にテストする○ 少しでもバグが発⽣する確率を下げる17
変更対象のメソッドはわかるが、変更内容がわからない概要:fs: use kResistStopPropagation● fsモジュールに対する変更。どういう影響があるのかわかない● まずプロダクトコードで対象のモジュールが使⽤しているのか調査● プロダクトコードでfsモジュールを使っていない場合○ 影響がないので、改修不要と判断● プロダクトコードでfsモジュールを使っている場合○ テストケースを厚くもたせる18
得られた効果、結果良かった点● 基準があると⾃信を持って影響調査を進められる● 影響範囲の理解が容易になった● ⼯数の短縮懸念点● Node.jsのテストコードを信じることになるので、注意が必要です19前回の実績 今回の実績6ヵ月 2ヵ月
調査した感想● v14→v18の場合、Node.jsには致命的な変更はなかった● Node.jsはパッケージのほうが⼤変な場合が多い○ Node.jsの影響調査で⼯数を削減○ パッケージの影響調査に⼯数をかけることができる20
まとめ● 全てを理解というより、今回進めたような調査のやり⽅で進めることをおすすめ● 品質と⼯数とのバランスを意識し、ある程度割り切ってテストで品質を担保という⽅法を取る今回紹介した⽅法が助けになれば幸いです21
ご清聴ありがとうございました22