名刺アプリ「Eight」でエンジニアをしている菅間(@sugamaan)です。最近はデスク上に置ける観葉植物を探す旅に出ています。
今回はEightで展開している中小企業向け名刺管理サービス「Eight Team」にてHubSpot連携機能のアップデートを行った話をしようと思います。
背景
Eight Teamは、Eightユーザー同士で名刺を共有できるサービスです。HubSpot連携は、Eightの名刺を一括でHubSpotに連携できる機能です。
今回のアップデートでは、名刺交換日や名刺所有者などのEight固有の情報を従来の連携項目に追加しました。さらに、特定の情報を常に最新情報へ上書き更新できる機能も実装しました。
このアップデートにより、HubSpot上の顧客情報を最新の状態に保ち、より正確な情報に基づいた顧客アプローチが可能になります。
なお、Eight Teamではkintone連携機能も提供しており、名刺情報をCRMに連携することでマーケティングや営業活動の促進をサポートしています。
HubSpot連携の概要
HubSpot連携の処理の流れは、クライアントからGraphQLリクエストをサーバーに送信し、SQSにエンキューした後、Workerで連携処理を実行するという仕組みになっています。
従来の仕様では、新規データのみを連携していました。今回のアップデートでは、新規データに加えて、過去に連携した更新データも連携するため、1回の連携処理における処理枚数と処理負荷が増加します。
さらに、Eightの名刺情報を正とする更新パターンとHubSpot上の既存情報を正とする更新パターンの両方に対応する必要がありました。また、HubSpot上で意図的に削除されたデータを再連携しないようにする仕様も考慮した設計・実装が必要でした。
プロジェクト進行
私は新規機能開発を担当するFeatureチームのメンバーとして、本プロジェクトに取り組みました。ここでは、Featureチームの開発アプローチについてご紹介します。
ドメイン知識のキャッチアップ
プロジェクト開始時に、既存のHubSpot連携の仕様を理解し、実装・レビューのコストを軽減するためにコードリーディング会を実施しました。
このリーディング会では、画面操作、テーブル設計、シーケンス図などを確認しました。また、既存の実装を画面共有しながら読み進め、新仕様の検討やリファクタリングの可能性について議論しました。
結果、プロジェクトの前提知識をチームメンバー間で共有でき、見積もりや実装コストの負荷削減につながりました。
インターフェースの初期設計
複数のタスクを並行して着手できるよう、まずモブプログラミングでインターフェースの初期設計をしました。Eightでは型システムのSorbetを導入しているため、型を活用して各モデルのインターフェースを定義しました。
型を使用することで伝達できる情報量が増え、コードの意図をより正確に表現できるため、特にインターフェースの初期設計で効果的だと実感しました。
実装のポイント
HubSpot APIとの疎通
HubSpot APIエンドポイントのレートリミットとして、1日のファイルアップロード数、ファイルサイズ、更新レコード数の考慮が必要になります。
1ファイルのサイズ制限とプロセスの消費メモリ量の想定をし、1回のループ処理で連携する件数の上限を増やしました。
消費メモリの計測はObjectSpace.memsize_of_allを使ったロガーを作成し、実装コードに埋め込むことによって計測しました。以下は出力レポートのイメージです。

さらに、APIリクエスト数を削減するため、連携用のCSVファイルが空の場合はリクエストを行わない設定や、更新が不要なレコードをCSVから除外するなどの最適化を行いました。
パフォーマンスの考慮
1回の連携における名刺枚数の増加に伴い、パフォーマンスへの配慮が必要でした。このため、機能開発と並行してパフォーマンス計測の準備を進めました。
パフォーマンス改善では、前述したロガーを活用して計測をし、WorkerのCPU使用率やメモリ消費量も監視し、要件を満たす実装をしました。
対応としては、ロジックの計算量の削減や、ログ分析に基づく検索クエリの最適化を実施しました。
また、SorbetとMemoistの競合によりメモ化が機能せず、パフォーマンスが低下する問題も発生しましたが、こちらも改善し、最終的に要件を満たすレベルまで最適化ができました。
おわりに
以上、Eight TeamにおけるHubSpot連携機能のアップデートについての紹介でした。
今回のアップデートでは、スプリント内のお披露目会にてビジネスサイドからリリースの反響を共有してもらうことができ、事業価値につながる開発ができたことを実感し、嬉しく思いました。
Eightは新しい名刺文化を作るべく挑戦を続けていきます。 こうした挑戦を一緒に進めてくれる仲間を募集中です。少しでも興味があれば、ぜひカジュアルにお話ししましょう!