1
/
5

Wantedly Visit 日程調整機能の不具合を修正しました

 Wantedly Visit には日程調整のための機能が実装されており、候補者に対して企業側で面談可能な日時を設定した上で日程候補をメッセージで送信したり、提案された日程を候補者側の都合に応じて選択したりできます。ここで、企業側が送る日程候補は手動で入力する事もできますし、面談担当者の Google アカウントと連携して Google カレンダー上で空いている日程を自動で入力することもできます。

企業訪問サービス「Wantedly Visit」が新機能をリリース 候補者により"会える"日時を自動で算出し、最短 2 クリックで面談の日程調整が可能に
ウォンテッドリー株式会社のプレスリリース(2017年10月11日 11時00分) 企業訪問サービス「Wantedly Visit」が新機能をリリース 候補者により"会える"日時を自動で算出し、最短 2 クリックで面談の日程調整が可能に
https://prtimes.jp/main/html/rd/p/000000023.000021198.html

 一方で、外部のアカウントとの連携機能には仕様変更への追従などの課題もあり、Google カレンダーとの連携機能が思うように使えないといった問い合わせも何件か頂くようになっていました。エンジニア全体のリソースは有限なので新規機能の実装が優先されがちなのですが、問い合わせの対応でもエンジニアのリソースを消費してしまいますから、技術的負債の解消も継続して行なっていきたいものです。

 本記事では、昨年11月頃に行なった Google カレンダー連携機能の不具合解消の取り組みについて解説します。この取り組みによって、Google カレンダー連携に失敗した際に日程調整機能自体が使えなくなってしまう問題や、Wantedly Visit ではなく Google アカウント側からカレンダー連携を解除した場合にも日程調整機能が使えなくなってしまう問題が解決されました。

Google カレンダー連携機能に存在した不具合

 Wantedly Visit の日程調整機能を Google カレンダーに連携する際に存在した不具合のうち、主に問い合わせの原因になっていたのは次の2点です。

  • Google カレンダー連携に失敗した際に日程調整機能自体が使えなくなる
  • Google アカウント側からカレンダー連携を解除した場合に日程調整機能が使えなくなる

Google カレンダー連携に失敗した場合の不具合

 以前の実装では、Google カレンダー連携に失敗した際に日程調整機能自体が使えなくなってしまう問題がありました。日程候補を読み込む処理が延々と続いてしまい、候補を選択できなくなってしまっていたのです。

 Google カレンダー連携に失敗する機会は滅多に無さそうに思われるかもしれませんが、実はアカウント連携に進んだ後で Google ログインを中断したりしても不具合が再現していました。この不具合に起因する問い合わせも多く頂いており、その都度データ不整合を修正して Google カレンダー連携の状態を白紙に戻す対応を行わざるを得なかったので、この機会に修正できたのは幸いでした。

Google アカウント側からカレンダー連携を解除した場合の不具合

 こちらは Google カレンダー連携の失敗ほど問い合わせを受けていた訳ではないのですが、一度連携を行なった後で Google アカウント側から連携を解除した場合にも同様に、日程候補の読み込み処理が延々と続いて操作不能になってしまう問題がありました。

 この不具合に起因する問い合わせの対応でもデータ不整合の修正を行なって Google カレンダー連携を解除する必要があり、地味にエンジニアのリソースを取っていました。レガシーコードは新規機能の実装を妨げるだけでなく、真綿で首を締める様に開発資源を消費していくので困ったものです。

不具合の修正

Google カレンダー連携に失敗した場合の不具合

 まずデバッグのために Google カレンダー連携に失敗した際の通信内容を Chrome の開発者ツールで確認したところ、どうやら連携に失敗した状態で使用可能な会議室の一覧を Google カレンダーから取得する API を叩いている事が分かりました。

事前条件を満たさないまま API を叩いている事自体はフロントエンドの実装方針次第で許容できるのですが、API がエラーを返した後にロードの画面を表示し続けてしまうのは頂けませんね。

 対応方針としては事前条件を満たさない状態で API が叩かれないよう修正しても良いのですが、フロントエンド側でもエラーハンドリングを行なった方が良いのは間違いないので、バックエンド側から認証エラーが返った場合はフロントエンド側で Google 連携のモーダルを再度表示する形で修正しました。

+    } catch (e) {
+ if (e instanceof AjaxError && e.jqxhr.responseJSON && e.jqxhr.responseJSON.error_code === 4000) {
+ dispatch(changeIsGoogleAuthorized(false));
+ dispatch(toggleScheduleSuggestionModal(false));
+ dispatch(openGoogleConnectionModal());
+ } else {
+ throwUnlessAjaxError(e);
+ }
+ }

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 ではユーザー体験を損なう不具合の修正を泥縄的に行うのではなく、コードのリアーキテクチャを進めて不具合が起こりにくく開発生産性も高い実装にする取り組みを行なっています。もしご興味があれば、下の「話を聞きに行きたい」ボタンを押してカジュアルにお話しできれば幸いです。

ユーザーの価値を突き詰めたからこそ誕生した内部品質を向上させる Quality Control Squad | Wantedly Engineer Blog
こんにちは、Quality Control Squad の鴛海です。Quality Control Squad という内部品質を向上させるチームを立ち上げた話から、プロダクトを作る上で内部品質と...
https://www.wantedly.com/companies/wantedly/post_articles/459966
Wantedly, Inc.では一緒に働く仲間を募集しています
7 いいね!
7 いいね!
同じタグの記事
今週のランキング
Wantedly, Inc.からお誘い
この話題に共感したら、メンバーと話してみませんか?