< script src="https://unpkg.com/@highlightjs/cdn-assets@11.0.0/highlight.min.js">

Tech Blog

Facebook Icon Twitter Icon Linkedin Icon

Publisher Growth

Facebook Icon Twitter Icon Linkedin Icon

[Tech Blog] Webサイトの収益化をグローバルで支援する「AnyManager」の広告配信サービス開発

複数の拠点/会社を横断するプロダクト開発

AnyManagerとは、Website・App・ECデータの統合・分析から、収益化、プッシュ通知などのユーザーエンゲージメントの向上、スピード改善、PWA・AMP・ECサイト構築などインターネットサービス価値向上に必要な施策を提供しているプラットフォームです。この記事では、AnyManagerが提供している様々な機能のうちの一つである広告配信サービスについて、ビジネス面で課題だったことと技術的な側面についてお伝えしたいと思います。

■ 広告配信サービスの重要性と直面していた問題点

AnyManagerが提供している広告配信サービスとは、ウェブサイトの運営者が自ら広告配信のためのJavaScriptなどを実装することなく、広告によるマネタイズが容易にできるサービスです。広告配信におけるマネタイズにおいて考慮しなければならないことは、例えば以下のような点があげられます。

  • – どのような広告を配信するか?
  • – どのようなフォーマット・場所で配信するか?

Website・Appを中心としたパブリッシャービジネスにおいて、どのような広告を配信するか?については、当社のパブリッシャーグロースチーム(Publisher Growth, 以下PGチーム)がGoogleの公式認定パートナー(GCPP)として認められているため、様々な知見を持っています。一方、どのようなフォーマット・場所で配信するか?について言えば、(場所に関しては、動的に定める場合に限り)JavaScriptを実装する必要があります。これらは以前まで、各アカウントマネージャーが(高度な場合はエンジニアがサポートしつつ)独自にJavaScriptを組んでパブリッシャーとやり取りをしながら実装していました。しかしながらこの方法では、

  • – アカウントマネージャーにもある程度のJavaScriptのスキルが求められる
  • – 各々が独自に設定してしまうので、ノウハウが溜まりにくい
  • – 高度な実装をする場合、毎回エンジニアがサポートしないといけない
  • – JavaScriptの更新のたびに、パブリッシャーとのやり取りをしないといけない

などといった、ビジネス面におけるスケーラビリティーという点で様々な問題がありました。それを解決するために、非エンジニアでもある程度の広告配信のJavaScriptが生成できるようなサービスを作る必要性がありました。

■ 各拠点で独自に広告配信サービスを実装していた

AnyMind Groupの各拠点でも上記の理由などから広告配信サービスの重要性は理解していました。また当時AnyMind GroupのPGチームは、FourMやAcqua Mediaの企業買収なども含め各拠点で急成長していたため、ある程度JavaScriptのスキルがある人たちによって広告配信サービスを独自に実装・提供をしていました。

例えばある時期では、日本・東南アジアでそれぞれ二つずつ合計四つもの異なる広告配信サービスが存在していました。基本的なコンセプト(非エンジニアでも広告のための設定ができる)はすべて同じですが、サポートしている広告フォーマット、使用しているシステムのインフラ構成(データベースでいえば、あるサービスではリレーショナルデータベースを、あるサービスではNoSQLを使用していたり)、広告配信サービスの導入のフローも異なっていました。このままでは新たに新機能を加えるのにも、複数のシステムの開発が必要になり、とても非効率で非現実的でした。

そこで、各々のシステムで実現していることを可能な限りカバーした一つの汎用システムを開発することにしました。そのために、各々のサービスで何ができて、何ができないのか、インフラ構成のメリット・デメリット、設定画面の違いなどの全てを洗い出すところから始まります。

日本で社内向けに提供していた広告配信サービスの管理画面

東南アジアで社内向けに提供していた広告配信サービスの管理画面

■ 広告配信サービスの一元化

各拠点ごとに提供していた広告配信サービスの機能の洗い出しですが、それぞれのサービスの開発に携わったエンジニアはもちろん、サービスを利用しているセールスの方などの関係者からヒアリングして、どのような要件を満たすべきなのかをPMを中心に再定義していきました。

幸いにも、全ての広告配信サービスで提供していた機能は一つのサービスとして落とし込むことができる範囲のものであり、またある拠点にだけ提供されていた機能が、別の拠点でも有用なケースも多々あり、このシステム開発のビジネス観点での重要性も増しました。初期リリースの段階では、最小公倍数的に機能を絞って開発・リリースしましたが、徐々に機能をバルクアップさせ、今では機能面において全ての広告配信サービスの上位互換になっています。

■ 技術的な側面

広告配信サービスという性質上、大量のリクエストを安定的に捌くこと、また何かしらの設定変更を行ったことによりバグが発生した場合、原因解明をするより前に配信設定を以前のものへ即座にリカバリーできるようなインフラ構成が必要となりました。

例えば開発初期段階の一案として、広告配信の設定をリレーショナルデータベースに保存し、そこから動的にJavaScriptを生成するという方法もありましたが、(データベースのハード・ソフトのチューニングなどを行わない)通常のリレーショナルデータベースのスループットでは到底カバーできませんでした。

そこで色々と検討した結果、以下の図のように、配信設定はAnyManagerのデータベースに保存し、それを元にJS BundlerがJavaSriptを生成、生成されたJavaSriptファイルはFile Storageにホスティングし、CDNを経由してこのファイルを配信することになりました。これにより、大半のリクエストはCDNのキャッシュで捌くことができ、他のインフラにはあまり負荷がかかることなく実装することができました。

広告配信サービスのインフラ構成

広告配信の設定を保存するデータベースはリレーショナルデータベースを使用しています。もちろんNoSQLという選択肢もありましたが、JavaScriptを配信するCDNと広告配信の設定を保存するデータベースとを完全に分離できたため、広告配信設定を高スループットのデータベースで保存する必要性がなくなり、AnyManagerで元々使用していたリレーショナルデータベースの中にこれらの設定を保存することになりました。

また広告配信のJavaScript自体の実装については、各拠点で使用されていたものは全てピュアなJavaScriptで実装されていましたが、今後の全ての拠点でこのサービスが提供されることと、型定義をしないことによるバグの発生を未然に防ぎたいこともあり、全てTypeScriptで実装し直し、JavaScriptを生成するときにピュアなJavaScriptへ変換する方式に変更しました。

■ リニューアル後の広告配信サービス

広告配信サービスのリニューアルにより、全ての拠点のメンバーが同じシステムを使用して設定するようになったので、

  • – 新機能を開発したときに全拠点に一気にリリースできる
  • – トラブルシューティングを一つのチームで対応することができる
  • – マニュアルの整備が容易になった

などの多くの利点を得られるようになりました。一部のパブリッシャーでは新システムへの移行が完了しておらず、まだ旧システムの広告配信サービスを使用しているところがありますが、先日四つあった旧システムのうち一つを完全に停止することができました。 また今では広告配信のみならず、ウェブサイトのPWA化のためにもこのシステムは使用されています。

AnyMindでは、AnyManagerをはじめ様々なプロダクトを開発しており、PdM、エンジニアの採用も強化しています。ご興味がある方はこちらのページから「Product Development」を選択してご覧ください。

https://anymindgroup.com/career/

また、こちらはAnyMindのエンジニア達が書いているブログです。よろしければこちらもご覧くださいませ。

Latest News