Wantedly Visit には日程調整のための機能が実装されており、候補者に対して企業側で面談可能な日時を設定した上で日程候補をメッセージで送信したり、提案された日程を候補者側の都合に応じて選択したりできます。ここで、企業側が送る日程候補は手動で入力する事もできますし、面談担当者の Google アカウントと連携して Google カレンダー上で空いている日程を自動で入力することもできます。
本記事では、昨年11月頃に行なった Google カレンダー連携機能の不具合解消の取り組みについて解説します。この取り組みによって、Google カレンダー連携に失敗した際に日程調整機能自体が使えなくなってしまう問題や、Wantedly Visit ではなく Google アカウント側からカレンダー連携を解除した場合にも日程調整機能が使えなくなってしまう問題が解決されました。
Google カレンダー連携機能に存在した不具合
Wantedly Visit の日程調整機能を Google カレンダーに連携する際に存在した不具合のうち、主に問い合わせの原因になっていたのは次の2点です。
Google カレンダー連携に失敗する機会は滅多に無さそうに思われるかもしれませんが、実はアカウント連携に進んだ後で Google ログインを中断したりしても不具合が再現していました。この不具合に起因する問い合わせも多く頂いており、その都度データ不整合を修正して Google カレンダー連携の状態を白紙に戻す対応を行わざるを得なかったので、この機会に修正できたのは幸いでした。
Google アカウント側からカレンダー連携を解除した場合の不具合
こちらは Google カレンダー連携の失敗ほど問い合わせを受けていた訳ではないのですが、一度連携を行なった後で Google アカウント側から連携を解除した場合にも同様に、日程候補の読み込み処理が延々と続いて操作不能になってしまう問題がありました。
この不具合に起因する問い合わせの対応でもデータ不整合の修正を行なって Google カレンダー連携を解除する必要があり、地味にエンジニアのリソースを取っていました。レガシーコードは新規機能の実装を妨げるだけでなく、真綿で首を締める様に開発資源を消費していくので困ったものです。
不具合の修正
Google カレンダー連携に失敗した場合の不具合
まずデバッグのために Google カレンダー連携に失敗した際の通信内容を Chrome の開発者ツールで確認したところ、どうやら連携に失敗した状態で使用可能な会議室の一覧を Google カレンダーから取得する API を叩いている事が分かりました。
事前条件を満たさないまま API を叩いている事自体はフロントエンドの実装方針次第で許容できるのですが、API がエラーを返した後にロードの画面を表示し続けてしまうのは頂けませんね。
対応方針としては事前条件を満たさない状態で API が叩かれないよう修正しても良いのですが、フロントエンド側でもエラーハンドリングを行なった方が良いのは間違いないので、バックエンド側から認証エラーが返った場合はフロントエンド側で Google 連携のモーダルを再度表示する形で修正しました。
次に Google アカウント側からカレンダー連携を解除した際の不具合の修正ですが、過去の問い合わせ対応では失効した認証トークンを削除する形でデータ不整合を解消していたので、バックエンド側で認証エラーが発生した際には問題のある認証トークンを自動的に削除する方針で実装を行いました。
+ rescue Signet::AuthorizationError + GoogleCredential.find_by(job_id: job_id)&.destroy + raise GoogleAuthService::NotAuthorizedError,"You are not authorized. you have to get client authorization first." + end
もっとも、いざ Google カレンダー上のスケジュール情報を取得する段になってから認証トークンの生死を判定する実装で良いのか、適切なエラーハンドリングの箇所は何処かといった課題もあるので、適切な設計について考え直す機会を持ちたいところです。
まとめ
本記事では、昨年11月頃に行なった Google カレンダー連携機能の不具合解消の取り組みについて解説しました。この取り組みによって、Google カレンダー連携に失敗した際に日程調整機能自体が使えなくなってしまう問題や、Wantedly Visit ではなく Google アカウント側からカレンダー連携を解除した場合にも日程調整機能が使えなくなってしまう問題が解決されました。
Quality Control Squad ではユーザー体験を損なう不具合の修正を泥縄的に行うのではなく、コードのリアーキテクチャを進めて不具合が起こりにくく開発生産性も高い実装にする取り組みを行なっています。もしご興味があれば、下の「話を聞きに行きたい」ボタンを押してカジュアルにお話しできれば幸いです。