covid19 icon indicating copy to clipboard operation
covid19 copied to clipboard

Fix/upgrade chart.js upto 3.x

Open mcdmaster opened this issue 3 years ago • 7 comments

👏 解決する issue / Resolved Issues

  • close #6163

📝 関連する issue / Related Issues

  • #6313

⛏ 変更内容 / Details of Changes

  • revisit #6313 with scope narrowed
  • seek remediation tool or practical approach that makes easier
  • if found useful, release to "development" branch

📸 スクリーンショット / Screenshots

see #6313

mcdmaster avatar Jul 10 '21 14:07 mcdmaster

やっとこさ、Chart.js@3 でチャートを表示するまでに至りました。ただ、座標等はめちゃくちゃです。スクショをご覧ください。 Chart.js のサイトには、チャートの表示様式を決めるパラメータの「お作法」に、Ver2Ver3 との間で小さくない違いがあると示されています。※下記ページ下部を参照のこと https://www.chartjs.org/docs/latest/getting-started/v3-migration.html それを吸収するのがこれからの主要な To-Do の1つとなります。

その他の To-Do は、まとまり次第、あるいは気づき次第アップしていきます。

ここまでにやったことを、大まかに書いておきます。

  • Chart.js@2 から @3.5 へのアップグレード
  • vue@2 用ラッパー(と称される)vue-chart-3 の導入 https://vue-chart-3.netlify.app/guide/
  • 上記に必要な @nuxtjs/composition-api の導入
  • [email protected] および vue-chart-3 の導入に伴い不要となった vue-chartjs@types/chart.js の削除
  • なぜか Chart.js@3 を導入するとメモリ使用量が常にカツカツになったため、core-js3 まわりの導入環境を整備(nuxt.config.tspackage.json の修正、および追加モジュールの導入) ご参考 https://qiita.com/soarflat/items/21b8955f992bf7d38581
  • なぜか Chart.js@3ssr: false でないと動かないようなので、そのためのコンフィグ修正 https://vue-chart-3.netlify.app/guide/configuration/#vue-2

スクリーンショット 2021-09-23 065049

mcdmaster avatar Sep 23 '21 22:09 mcdmaster

さらに前進しました。スクショを貼っておきます。パッと見、それほど変わっていないように見えます。しかしながら、私にとっては大きな前進です。 特に、グラフエリアと座標エリアが重なって表示されるようになったのは前進の最たる部分と言っておかねばなりません。 スクリーンショット 2021-10-06 223715

残るは、座標の目盛り表示が合わせられれば、ほどなくこの PR はクローズできます。 ただ、チャートを使用するアプリの全てのおそらくなんらかの手を入れねばならないため、そこは分担が必要となります。 @kaizumaki さんら企画メンバーと、そうした展開の仕方については相談いたしたく

mcdmaster avatar Oct 06 '21 13:10 mcdmaster

@mcdmaster 検証ありがとうございます!たいへんな作業をやってくださっていることはひしひしと伝わってきます...。 ひとまずコンフリクトが大量に出ているので、こちらを解消いただいてもいいでしょうか?このPRのdiffが見えづらくなっているので...。

kaizumaki avatar Oct 07 '21 01:10 kaizumaki

@kaizumaki お待たせしました。さすがに前のコミットは範囲を広げすぎたので、サンプルになりそうなモノ(チャートアプリ)を3個持ってきました。

  • components/index/_shared/MixedBarAndLineChart.vue
  • components/index/_shared/ScrollableChart.vue
  • components/index/_shared/TimeBarChart.vue

キモとなる Chart.js のアップグレードに伴う修正プラグイン plugins/vue-chart.ts に対応させるために各チャート・アプリにはどんな修正が必要か。 それでは、上記アプリのソースを見てください、では虫が良すぎるため、追ってどこかで説明の機会を 作りましょう。 チャートの数だけ手を入れるため、作業を分担するのが適切でスピーディ、なおかつアプリ・オーナー意識の醸成に役立つ、という勝手な期待をしていたりもします

mcdmaster avatar Oct 08 '21 16:10 mcdmaster

@mcdmaster ご対応ありがとうございます。Netlifyのpreviewを見た限りですと、いろいろ期待通りの動作はしていないようなのですよね...。グラフ以外のところもいろいろ表示がおかしくなっているようです。 かなりたいへんな作業だなと思うとともに、このアップグレードはしばらく様子見したほうがいいのではないかという気になってきました。 あるいは、もうちょっと修正のステップを細かくできたりしませんかね?いまの状態だと、あまりに変わりすぎていてどこがどうなっているのだろう...?という感じです。

都内の最新感染動向-その他-参考指標-東京都-新型コロナウイルス感染症対策サイト

kaizumaki avatar Oct 12 '21 11:10 kaizumaki

@kaizumaki コメントありがとうございます。概ね異存はないです。

実は、私は chart.js@3 への移行がどれほど大変かを示して見せたいとも思っていました。今回のような中間結果が得られたので、たとえば @kaizumaki さんがおっしゃるようにいったんは chart.js@3 へのアップグレードを棚上げする、あるいは棚上げをするに至るエビデンスを一式揃えることで他から参照を受けたときに役立ててもらえる情報の充実を図ろうという意図もありました。 他への情報提供という視点では、国内外を問わず、あたかも chart.js@3 への移行が簡単にできるように書かれているウェブページがあったりした場合、私の今回の活動はその種の誤解の拡散を防ぐ意味があると思っています。

ちなみに、細かいステップやフェーズに分割して進めるのは難しいと思います。ステップの前後依存関係が強く、個別のステップだけを実施するのではアップグレード・プロセス全体としての整合性、合目的性が損なわれるおそれがあります。これも、ここまでやってきたからこそ判明した教訓と思っています

mcdmaster avatar Oct 12 '21 12:10 mcdmaster

今後、再チャレンジの機会がおそらくあるという前提で、どういったアプローチを取り得るか、おおまかかつ基本的な手順を書いておきます。また、併せてアプローチに必要な各ステップの依存関係もメモしておくこととします。

  1. Chart.js のモジュール・アップグレード、および依存モジュールのインストール:Vue.js, Nuxt.js などのコアコンポーネントのバージョンへの依存性が強く、バージョン(マイナー・バージョンを含む)ごとにモジュールの差し替えが求められる場合も多々あります。
  2. vue-chartjs および @types/chart.js (2.x 用) の削除:これら既存モジュールは Chart.js@3 との互換性が全くなく、削除せずに放っておくと間違いなくトラブルの元となります。
  3. plugins/vue-chartjs の修正:Chart.js@3 のガイドラインに沿って粛々と実施します。ただしお作法(?)が Chart.js@2 と比べてかなり変わるところもあるため、いささか戸惑うのは不可避です。 ご参考 https://www.chartjs.org/docs/latest/getting-started/v3-migration.html
  4. チャート・アプリの修正:これは、可能な限り eslint-config-chartjs のルールで lint --fix で逃げられるようにするのが賢明です。各モジュールの fit&gap を逐一チェックできれば理想的ですけど、おそらくそれほどの工数の余裕は取れないと思います。かなり手間です。

以上、ご参考となりましたら幸いです

mcdmaster avatar Oct 12 '21 21:10 mcdmaster

@mcdmaster こちらのPRもクローズといたします 🙇 chart.jsといったjsライブラリはフレームワークに組み込む際のラッパーのあたりでいろいろと不整合が起きがちですよね... なかなか一筋縄ではいかない代物でした 😓

kaizumaki avatar May 31 '23 07:05 kaizumaki