エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

SQL一つで送る内容を決めるメール基盤を作った話

AI・機械学習チームの北川(@kitagry)です。 GoとVimとKubernetesが好きです。

前回書いたNeovimで手書き文字入力する記事が「発想が狂っている」・「頭がおかしい」などの反響をいただいたので、真面目なことをやっていることをアピールするためにこの記事を書くことにしました。

仕事中に手の上で寝る猫。(記事の内容とは全く関係ありません。ただの自慢です。)

既存のメール配信の仕組み

弊社では自社メール配信サーバーがあり、テンプレート形式でhtmlタグを書くことによって裏側で配信するための記事を取得できます。 このテンプレートを編集することで記事を新着順や人気順に並び替えることによって、メールを改善していました。 もし、新しいサービスのメールを配信したくなった場合や記事の並び替えロジックを変更したい場合は、そのタグをエンジニアが一から作成する必要がありました。 そのため、配信人数が少ないメールや、配信頻度が少ないメールのようなエンジニアの工数を確保しづらいメールについては手作業のまま改善が行われないという問題がありました。

そのような問題を解決するため、編集部の方と相談しながらエンジニアが介入しなくてもメール配信を改善できるような仕組みを作ろうという話になりました。

今回のメール基盤の仕組み

今回の仕組みはエンジニアリングの観点ではとてもシンプルです。 BigQueryのテーブルに登録されたデータをそのままメールの配信に使えるというだけの仕組みになっています。 その時にタイトルやURLなどの情報は、先述したメール配信サーバーのテンプレートで簡単に埋め込めるように設計しました。

今回作成したメール基盤

この仕組みには以下のようなメリットがあります。

  • 記事の表示・クリック数など並び替えに必要なデータのほとんどがBigQuery上で取得できる
  • BigQueryにはスケジュールクエリという機能があり、定期実行するための環境を用意する必要がない
  • SQLさえ書ければエンジニアを挟まなくても良い

このシンプルな仕組みのおかげで開発は1週間ほどで終わりました。(僕がなんとなくRust触ってみたくなってしまい、色々無邪気に遊んだので思ったより時間がかかった。)

結果

この基盤は2022年の11月頭ごろにリリースしました。 そこから現在で約5ヶ月経っていないくらいですが、既に10件を超える改善が走っています。 中にはCTRが2倍になるような改善がされているものもありました。

また、特筆すべき点は10件の改善が同じサービスのメールではなくて、多様なサービスのメールにわたっていることが挙げられます。 もしエンジニアが多様なサービスのメールを改善する場合、サービスごとに担当するエンジニアが変わってしまい改善の知見が共有されづらかっただろうと思われます。

開発がすぐに終わったこと・それぞれのメール改善が高速になったことを踏まえて社内でイノベーション賞をいただくことが出来ました!

まとめ

AI・機械学習チームだけに、M(AI)L Opsを行いました。 まとめどうしようか考えながらご飯食べていたらこのようなネタを思いついてしまったので、ここで供養させてください。すいません。

ネタはさておいて、弊社ではエンジニア以外でもSQLを書ける人材がいるからこそ、このようなシンプルな設計でも改善が回っているのだと思います。 他社でもSQLが書ける人材が眠っている場所もあると思うので、そのような方が活躍できるような仕組みを作ると良いんじゃないかなと思いました。

We are hiring!

弊社では会社全体のサービスの向上ができるようなエンジニアを募集してます!以下のページから「カジュアル面談」の申し込みをお待ちしています!

jobs.m3.com