2025/05/28

テクノロジー

CXMツール内製の挑戦 -マイナビバイトのリピート掲載を強化する-

この記事の目次

    CXMツールとは

    お疲れ様です。MA推進課のA.Kと申します。
    普段は就職・ライフキャリア事業本部のオウンドメディアとMarketoなど、事業部のマーケティング担当者が使うシステムの運用保守を担当しています。
    今回、MA推進課としては初となる、アルバイト情報事業本部のCS部門(カスタマーサクセス)と連携した新たな施策を試みたので内容を共有できればと思います。

    タイトルにもある「CXM」という言葉について聞き馴染みがある方は少ないのではないでしょうか。

    CXMとは

    Customer Experience Managementの略で、顧客体験の管理や改善を行い、顧客体験(CX)を最大化するための手法のことを指します。
    商品やサービスの価格やスペックなどだけでなく、その商品・サービスにより得られる満足感や感動、心地よさなどを向上させることは、顧客ロイヤルティを醸成し収益向上へとつながります。具体的な目的は、顧客との関係性の強化やブランド構築などが挙げられます。

    ※引用:顧客体験マネジメント(CXM)とは?CRMとの違いや成功のポイント、企業事例を紹介, docomo business,https://www.nttcoms.com/service/nps/column/cxm/

    CXMをどう活用していくか

    売り上げ向上には、新規顧客の発掘だけでなく、既存顧客がどうやったら離反しないか、継続して利用してくれるのかも重要になります。
    そのため「お客様の声を聴く」ことで、顧客体験とマイナビ認識の乖離をキャッチアップし、営業活動改善や、社内に対して成功事例の共有をすることを目指していきます。

    デジ戦が手伝ったこと

    前置きが長くなりましたが、本題に入れればと思います。
    上記のCXMの運用は事業部側が行っています。以下に今回のシステムの全体図を載せておきます。

    • SFA/CRM
      企業の情報や商談の情報などが入っています。
    • 掲載情報DB
      マイナビバイトに掲載されている情報が格納されている社内向けのDBです。
    • GCS
    • BigQuery
    • S3
    • Trocco
      クラウド・サービス間のデータ転送に使うツールです。今回の主役。

    CXMツールでは、「送付リスト」という形でcsvファイルを渡すことで、自動的に配信が行われる仕組みとなっております。ただし、そのリストに持たせる情報には、通知先はもちろん、分析に使う項目など、複数DBを参照する必要があるうえ、細かい送付条件が多数ありました。そこで、デジ戦側でリスト作成のシステムを作ってみることにしました。

    今回はtroccoを使用して以下のステップでCXのアンケートを送る送付リストを作ります。
    ①各DBの情報をBQに集約させる
    ②頑張ってテーブルを結合して必要な情報を抽出する
    ③作成した配信リストをS3に格納→あとはCXMツール側で自動で配信してくれます。

    ①各DBの情報をBQに集約させる

    最初にSFA/CRMのデータをtroccoを用いてBQに格納します。

    案件の情報を始め、掲載情報やマイナビ社員の情報を参照します。
    ここで大苦戦したのが履歴テーブルの存在です。
    単純に1つのテーブルを参照すればよいわけではなく、履歴テーブルからも一部情報を参照する必要があり、複数テーブルを行ったり来たりしていました。
    以下苦労点です。

    • 参照しなければいけないテーブルが5個あり結合および参照に苦戦
    • 数ある商品から特定の商品を省くロジックを正規表現を使って実装
    • タイムゾーンがUTCとJSTが入り混じってタイムスタンプ型が嫌いになる

    次に掲載情報DBのデータをBQに格納します。
    アンケート送付タイミングのタッチポイントを判別できるように必要な項目に絞って取得します。
    こちらも4テーブル参照して結合を繰り返していました…。

    最後に営業マスタを手動でアップロードして準備完了です。

    ②BQ内でデータを結合する

    BQで集めたデータを結合しつつ、送付対象の条件を追記してリストを作成していきます。

    使っているSQLのコードは自身が初学者ということもありかなりシンプルです。

    ROW_NUMBER() OVER (PARTITION BY ○ ORDER BY ○ ASC,□ DESC) AS rownumber

    マスキングかけてるので分かりにくいかもですが

    1つの項目に対して複数のデータが紐づいているので、データを降順に並び替えて一番最新のデータの情報を使用します。
    後はSFA/CRMと掲載情報DBのデータをキーとなる項目で紐づけてリストの大元は完成です。

    後は事業部サイドの運用上の条件を実装していきます。

    --送付条件の実装
    DELETE FROM 対象のテーブル
    WHERE 特定のカラム NOT IN (
    SELECT CAST(特定のカラム AS STRING) –元のDBによって型が違うので一致させる
    FROM ○○テーブル
    );

    このような条件を要望に沿って同様に実装していきます。
    この際にも複数DBを参照し、同じ項目でもデータの内容に相違がないか、空の項目がないかなど確認しています。

    コードを見ていただいて分かるように、大元のリストから条件に当てはまらないレコードを削除しています。
    この時点で残ったデータをCXMツールに受け渡しできるような形に成形して処理は完了です。

    ③ワークフローの作成

    今までクエリを書いてリストの作成ができましたが、実際に運用するのは事業部の方たちです。
    なので専門的な知識がなくても、「最小限の工数で」運用してもらえるようにしていきます。
    ここで重宝したのがtroccoのワークフロー機能です。

    上記で記述したデータ抽出&リスト作成のクエリを登録し、それを順次自動で実行してくれます。
    スクショの例でいうと、SFA/CRMからBQへデータ連携→掲載情報DBからBQへデータ連携→BQでリストの作成→BQからS3へファイルの格納をボタン一つで実行してくれます。
    (加えてスケジュール設定ができるので自動化も可能)

    ここまで作成して細かい仕様もお伝えし、事業部にお渡しします!

    初めての開発経験をしてみて

    学生時代も情報系の学部にいましたが、このレベルの開発をするのも今回が初めてでした。
    配属から1年ちょっとは開発はベンダーさんにお任せしていたのですが、自分で作るとこんなに大変なんだなとベンダーさんの凄さを実感しました。
    一方で、SQLをがっつり触ったことで知識が付いたのはもちろん、マイナビの掲載の仕組み・営業フローについても知れる良い機会でした!
    コード自体は基本自分で書きましたが、「仕様書も作成する」「ワークフローはなるべく簡略化する」「変更を加える際はデータ不整合が起きないことを確認してから本番適用する」など、開発の基本的な部分も開発経験が豊富なK.S課長にサポートしていただき、無事にリリース&安定稼働まで繋げることができました。
    (前職の経験を踏まえた上長のアドバイス×新卒社員のDCPA精神で大分デジ戦らしい取り組みになったのでは!?と個人的には思っています。)

    我々ができるのはメールリストの作成までですが、これを利用して今後事業部内でどのような動きが起きていくのか、引き続き技術的なサポートができる箇所があるのか、リリースして終わりではなく、その先にあるビジネスインパクトまで協力して取り組んでいければと思います!

    以上、SaaSを組み合わせてメールリストを作成できるよというお話でした!

    ※本記事は2025年05月時点の情報です。

    著者:マイナビエンジニアブログ編集部