Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

新卒がAngularのアップデート対応から経験したこと

2022年4月にエンジニアとして新卒入社しました daichi ( id:da1chi24 ) です。今年の10月から11月にかけてAngular12から13へのメジャーアップデートの対応を行いました。この記事では、このプロジェクトを進めていく中で学んだことを共有します。

この記事は Classi developers Advent Calendar 2022 の 10 日目の記事です。

アップデート対応の背景

サービス開発では使用しているライブラリを継続的にアップデートすることが重要です。

Classiで使用されているフレームワークやライブラリは、社内でアップデートの進捗を共有しながら管理されています。AngularもClassiが提供しているプロダクトの多くで使用されているため、アップデート対象の一つとなっています。

Angularのメジャーリリースの周期は、6ヶ月ごとと決められています。そしてそのタイミングで、古いバージョンはEOL(End Of Life: サポート終了)となります。そのため、アップデートに追従するためには定期的なアップデートが必要となります。

 Angular 日本語ドキュメンテーション

今回は自分のチームが関わるリポジトリのEOL対応として、Angular13へのアップデートを行いました。

アップデートの2つの問題点

Angularにはアップデートの手引きが整備されています。例えば、以下のようなバージョンの更新するためのチェックリストが、アップデートのバージョンごとに用意されています。

Angular Update Guide

当初の自分は、「このガイドに従えばすぐに対応が済むので、時間はかからないだろう」と考えていました。ところが進めていくと、うまくいかないことが少しずつ明らかになりました。その要因は、主に技術的なことと開発プロセスに関わることの2つあることがわかりました。

1. 依存ライブラリのバージョンが追いついていない

Angularのアップデートのみの対応であれば、マイグレーションガイドがしっかり整備されているため簡単に行うことができます。しかし今回のアップデート対象のリポジトリは、Angularに依存している他のライブラリ(テスティングライブラリやUIライブラリ)も追従しなければCIが通らないため、対応が必要な箇所が予想以上に多くなっていました。

2. 対象のリポジトリに複数のチームが関わっているため、作業連携が必要になる

今回担当したリポジトリは、複数のチームがそれぞれディレクトリを分けて開発を行っていました。そのためライブラリに破壊的変更がありプロダクトコードに変更を加えるときや、PRのレビューにチーム間でのコミュニケーションが必要でした。これも時間がかかる要因でした。

2つの問題点をどのように対処して進めたのか

これらの問題に対処するために、以下の工夫をしました。

slackチャンネルをたて作業進捗を細かく報告した

この宣言とともにプロジェクトは始まりました

まず最初に関係者を集めてslackのチャンネルを作りました。このチャンネルでは、作業進捗を流したり確認事項を投稿し、リポジトリに関わるメンバーと情報共有をしました。これはプロジェクトに関わるメンバーとのやりとりが可視化され、さらにこのチャンネル自体が作業ログになるメリットがありました。

またこのチャンネルをたてたことは、わからなかったらすぐに質問しやすい環境を作ることにもつながりました。よく先輩には「15分悩んで分からないことがあったらすぐに聞いた方がいい」と言われています。社内にはAngularのプロがたくさんいるので、巻き込みながら進めるきっかけになりました。

質問をして打ち返しをもらう様子

ライブラリのアップデートの計画を立てた

依存ライブラリの対応が必要なことがわかってきた段階で、先輩たちと進め方の整理やスケジュールを計画しました。これにより作業の見通しを立てられ、その後のサービスの動作検証をスムーズに行うことにつながりました。

また作業を進めていく段階で必要性に気づいた追加対応もありました。そのようなときは、計画やスケジュールをその都度見直し、作成したチャンネルで共有することを徹底しました。

不要なライブラリやCIフローを削除した

このアップデートを進めていく中で、使用されていないライブラリやCIのフローがあることに気付きました。今後のアップデートやCIのリソースの削減のために、アップデート対応と一緒に実施しました。

今回の経験から学んだこと

Angularアップデート対応が無事にリリースされた後、プロジェクトの最後に振り返り会を行いました。

振り返り会で使用したボード

その中で印象に残ったものを紹介します。

ライブラリのアップデート自体にも技術的な学びがあった

これまで自分は「ライブラリのアップデートは結構地道な作業であり、学びが少ないもの」という印象を持っていました。しかし今回の経験で、その印象は180度変わりました。まず最初にアップデート対象のライブラリを調べることで、サービスでどのように使われているかを理解することにつながります。さらにChangelogとライブラリのソースコードを読むことで、実装や設計のパターンを学べます。ライブラリのアップデートも技術的に学べる宝の山だと知りました。

定期的なアップデートの大事さが身に染みた

アップデートの際のバージョンの幅が増えるほど、Changelogの確認内容やコードの差分が増え、アップデートのハードルが上がります。また、今回のようにフレームワークなどの大きめのライブラリを更新するときに、依存ライブラリの追従に時間がかかります。そのため、日頃のアップデートを怠らないことが大切だと感じました。

リアルタイムで作業を共有しながら仕事をすることのメリットを経験した

今回はSlackチャンネルをたててリアルタイムで作業を共有しながら進めました。このような進め方はWorking Out Loudといい、チームで成果を出す上では重要な行動だと先輩からフィードバックがありました。

 blog.studysapuri.jp

ここに書かれているように、自分の作業や思考のプロセスが共有されたことでコンテキストも伝わり、他のメンバーから作業が見えやすくなるメリットを感じました。

先輩からも「日頃の進捗を発信していたおかげでレビューしやすかった」とフィードバックがありました。

結び

このプロジェクトは、チーム外の方々とコミュニケーションをとりながら進める初めてのものでした。大変でしたが、その分学びも多く良い経験になりました。

この記事から何か身になることが1つでも受け取っていただければ嬉しいです。

Classi developers Advent Calendar 12/10 は QAチームの Kanako さんです!お楽しみに!

© 2020 Classi Corp.