Closed kaizumaki closed 2 years ago
どなたかわかる方!以下のアップデートは適用しても大丈夫でしょうか?
nuxt-i18n は Netlify の Deploy Preview で以下の点で動作確認できたので、マージして良いと思います。
title
description
が返ってくること(SEO)eslint はローカルで yarn lint
を実行してエラーが無かったので、マージして良いと思います。
(GitHub Actions で動かしている Reviewdog が適切に動けば、そこでチェックできると思います)
こういったテスト項目を CI やテストでカバーできると、検証のコストを下げられると思います。
@shgtkshruch おお!ありがとうございます! 🙏
こういったテスト項目を CI やテストでカバーできると、検証のコストを下げられると思います。
そうなんですよね。ぜひ自動化したいところです。テストの導入も考えた方がよさそうですね。
Renovateのbotが立てたPRをひとつひとつ検証する作業が結構たいへんである
CI の改善やテストなど色々観点はあると思いますが、まずは package.json
で管理するライブラリを減らすのはどうでしょうか?
nodemon
や rimraf
などすでに利用していないライブラリがいくつかあるので、こういったパッケージを削除するとアップデートの PR 数を減らせると思います。
また、vue-meta や TypeScript、ts-loader など直接依存していないライブラリも package.json
に追加されているように思います。
管理できる & 管理するポリシーであれば良いと思いますが、今の体制でアップデートを検証するのは負担も大きいように思うので、必要があればこれらのライブラリの扱いも検討すると良いのではないでしょうか。
(僕も見れれば良いのですが、なかなか Watch できずに申し訳ないです…)
パッチアップデートをどうするか(自動or手動)
個人的には、自動テストがない状態での自動マージはちょっと心配ですが、リリース前に Staging で表示確認をするなどのフローがあれば良いかもしれません。 続けられるかどうか & 自信を持ってできるかどうかが大事だと思います。
dayjsのパッチアップデート #5131 は、previewで「1月1日」誤表示 #5150 を見落としてしまったんですよね。そういうこともあって、パッチアップデートも慎重になっています。目視確認のたいへんさと限界を感じています。
たしかに、まずはpackage.jsonに書かれている依存ライブラリをいかに減らすかを考えた方がよさそうですね。
そこで package.json
の "resolutions"
ブロックの出番です(笑)
https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/
上記説明にも書かれているように、
といった依存関係のあるモジュールを "resolutions"
に切り出しておけば、そんなに至近でない、でもやがてやってくるであろうメンテナンスの必要性を意識させつつも(リスクの潜在化)、日々のアップデートのような緊急性の外に置くことができます。
ちなみに、私は個人的に下記のような "resolutions" ブロックを使っています。これらは、よほどのことがない限りセキュリティ脆弱性に伴うアップデートはないだろうというものを切り出しています。 あるいは、RC 版と現行プロダクション版の依存関係を併存させたりもしています。 ここにあるように、かなり非特定的なバージョン記法も許されます
"resolutions": {
"@vue/component-compiler/vue": "^3.0.0-rc.5",
"@vue/server-renderer/vue": "^3.0.0-rc.5",
"chokidar": "3.x",
"core-js": "3.x",
"css": "3.x",
"source-map-resolve": "0.6.x",
"vue-server-renderer/vue": "2.x",
"vue-template-compiler/vue": "2.x",
"webpack": "4.x || 5.x"
}
たしかに、まずはpackage.jsonに書かれている依存ライブラリをいかに減らすか
ソースから直接使用しているものはpackage.jsonから削除してはいけません。 ただし、依存関係を正しく理解することがどこかで担保されている場合はこの限りではありません。 (yarn.lockを見ろはナシです。)
上記についてはNon-Null Assertion Operatorについても同様です。
なんの説明もなしにこれらが行われると、保守性が著しく損なわれます。
@goki90210 なるほど、「利用していないライブラリがあるのではないか」という文脈でそのように書いたのですが、今のところpackage.json内に利用していないライブラリは混ざっていない、ということですかね?
RenovateのPRで、nodeのマイナーアップデート #5115 についてはずっとそのままにしているのですが、これはどういう判断でアップデートしてよし、となるのでしょう...?
RenovateのPRで、nodeのマイナーアップデート #5115 についてはずっとそのままにしているのですが、これはどういう判断でアップデートしてよし、となるのでしょう...?
@kaizumaki 本来は、自動でテストを実行するスクリプトがあってアップデートしてもテスト結果に変化はないことを検証/確認するというのが筋なのですが(各パッケージのリリースもそいう運用になっているはず)、このプロジェクトはテストケースは作成されていませんし、作成されていたとしても漏れる場合もありますし、判断は難しいですね。
「利用していないライブラリがあるのではないか」
dependencies
devDependencies
理由の記載がないものはpackage.jsonに載せている理由が私には不明です。 (以前も書きましたが、特にjest, babel-jest, vue-jest)
私からもコメントさせてください。特に、 @goki90210 さんが「不明」と指摘しているものについてです。
@nuxtjs/pwa
: nuxt.config.ts
で使用している(devDependencie
sでもいい気がするが不明):PWA 用なんで、サーバとかならずしも密に連携しないこともある(回線切れなどのときの)使いっぷりも考えると devDependencies
でもいいかもですね@babel/core
→ 不明:core-js
を動かすために必須のモジュールです@mdi/font
→ 不明:サイドメニューアイコンのフォント(Material Designs)ですね。必須です@nuxtjs/google-analytics
:アクセスログ取得用です。必須@types/chart.js
:Dependencies
側にある chart.js
の export やなんかを含んでいます。必須わたしは、これっくらいでカンベンしておきましょうか。 jest 系は、よくディペンデンシーで warning が出るので、私も外せるものなら外してしまいたいと思っています
本来は、自動でテストを実行するスクリプトがあってアップデートしてもテスト結果に変化はないことを検証/確認するというのが筋なのですが(各パッケージのリリースもそいう運用になっているはず)、このプロジェクトはテストケースは作成されていませんし、サウ製されていたとしても漏れる場合もありますし、判断は難しいですね。
やはり難しいですか...。それでも自動テストはあったほうがいいように思いました。 素朴な疑問なのですが、webサイトの自動テストって、具体的にどういうものなんでしょう...?
@mcdmaster
@nuxtjs/pwa
:nuxt.config.ts
で使用している(devDependencie
sでもいい気がするが不明):PWA 用なんで、サーバとかならずしも密に連携しないこともある(回線切れなどのときの)使いっぷりも考えるとdevDependencies
でもいいかもですね@mdi/font
→ 不明:サイドメニューアイコンのフォント(Material Designs)ですね。必須です@nuxtjs/google-analytics
:アクセスログ取得用です。必須@types/chart.js
:Dependencies
側にあるchart.js
の export やなんかを含んでいます。必須
承知しました。(これらはないとビルドが通らない)
@babel/core
→ 不明:core-js
を動かすために必須のモジュールです
core-jsだけではなく、他のライブラリでも依存しているのは承知していますが、 それだけであれば書かなくても良いと思います。バージョンを指定したい意図があるということですか?
jest 系は、よくディペンデンシーで warning が出るので、私も外せるものなら外してしまいたいと思っています
今後jestでテストの自動化を行わないのであればという条件付きですね。 (最初に作成された方はテストの自動化を念頭に置いていたのではないかと考えています。気のせいでしょうか?)
@goki90210
core-jsだけではなく、他のライブラリでも依存しているのは承知していますが、 それだけであれば書かなくても良いと思います。バージョンを指定したい意図があるということですか?
そのとおりです。
core-js
をはじめとする babel
系のライブラリは package.json
に複数書きだすばかりでなく、それらのバージョンを揃えるという条件があります。
それを説明したドキュメントの場所を失念したので、見つけ次第本コメントのアップデートとして Web URL を貼っておきますね
現時点でRenovateの運用が大体まわっているので、こちらのissueはひとまずクローズします。
5068 でRenovateを導入しました。現在は試験運用中で、すべてのアップデートにおいてオートマージしないようにしています。スケジューリングも設定していません。
懸案事項
検討事項
運用体制も含め、みなさんの意見を伺いたいです。