Tech Talk ~ サイバーエージェントアドテクスタジオがScala言語を選んだ理由

アドテクスタジオはサイバーエージェントグループでアドテクノロジーに関わっていたエンジニアを集めた組織。グループ会社内に分散していた開発リソースを集め共通化することでアドテクノロジーサービスの開発力強化、サービスラインの充実を図っています。

国内売上高ナンバーワンを誇るサイバーエージェントのネット広告。そのビジネスをさらに新しい次元にドライブさせるアドテクスタジオの開発力なのです。

このアドテクスタジオでは、一部プロダクトでScalaを採用したそうです。なぜ、Javaから変更したのか?そして、Scala言語を採用したことで何が変わったのか?苦労した部分は?
アドテクスタジオでアドネットワークシステムの開発責任者をしている神田氏にScala言語を選んだ理由をうかがいました。

神田氏は、学生時代は情報系の学部でOSやファイルシステムなどを専門的に研究。その後、ベンチャー企業でエンジニアとなるも、もっと自分の技術を高めたい、よりトラフィックの多いサービスを開発してみたいということで転職活動を開始。現在はアドテクスタジオのプロダクトであるAMoAdアドネットワークにおける技術責任者です。

■アドテクノロジーの面白さはどこにある?

[Question]まずは、アドテクノロジーを開発する面白さについてお聞かせください。

神田氏:
広告システムは新しい機能をリリースした時の効果が経営的な指標としてダイレクトに分かりやすいんです。良いエンジニアリングであれば、良いビジネスの結果が出ますが、逆のこともある。エンジニアリングの部分がビジネスの重要なウェイトを占めているのがアドテクノロジーの面白さですね。エンジニアのアクティビティがそのままビジネスに直結しているのを実感できます。その分、責任も重いのですが、やりがいもあります。

例えば、配信サーバであればレイテンシーが大きくなればCTRが低下につながります。逆にパフォーマンスを上げるとCTRが上がる。これって売り上げに直結しますからね。

[Question]エンジニアがビジネスの矢面に出るという部分は責任も重たいのでしょうね。ただ、マーケティングやセールスなどとの連携も必要なのでは?

神田氏:
そうですね。広告主の考えやメディアの考え方、そして営業サイドの考え方を取り入れて連携しながら的確なプロダクトを作ることが重要です。さらに、データ分析を担当するデータサイエンティストと一緒に動きながら開発もしています。
純粋にデータと向き合った時にしかわからない科学的な数値があり、それは営業活動からだけではわかりません。そういったデータに基づいてシステム設計を行うこともしています。

さらに、広告をクリックするのは人なんですよね。アドテクノロジーってBtoBに見えますが、最終的にはエンドユーザです。その視点から言えば「この広告は本当にユーザが見たいタイミングで表示されているんだろうか?」という視点もあります。
ビジネスサイド、エンドユーザ視点、そしてデータの中といろいろな視点から見ることで新しい気づきがあったりします。毎日が発見だというのもアドテクノロジー開発の面白さですね。

神田勝規さん

神田勝規氏

■アドテクスタジオがScala言語を選んだ理由は?

[Question]ビジネスに直結するアドテクノロジーにおいてScala言語を採用した理由はどこにあるのでしょう?

神田氏:
アドテクノロジーの基本となるロジックはすごくシンプルなものが多いんです。それに対して、データやトラフィックの量が膨大でレイテンシーがシビアなんです。そこに対応していくとシンプルだった基本ロジックが複雑になってしまいます。これを冗長なJavaで書くとどうしてもコードが長くなってしまいメンテナンスで難がある。これをScalaで書くととてもシンプルにコードが書ける。なので、エンジニアの中からScalaを使いたいという要望が上がってきたのが最初にありますね。実際、Hadoopの処理であるフレームワークを使っていますが、Javaで書くと数100行になるのが数10行が書き終わり、テストもきっちりできるという効果があります。

[Question]Scalaのメリットは、記述のシンプルさにありなんですね。

神田氏:
はい、Javaだとコードが冗長になりすぎる。これに尽きますね。まあ、Rubyでゲームを作るような場合と比較してもアレなんですが、Rubyでは1行で書けることがJavaだと100行になってしまうことって普通にありえますから。

かといってRubyは簡潔には書けるんですが、動的な言語なので安全性が担保されない部分もあります。アドテクノロジーはメンテナンス性を重視するので、その面でもScalaがコードを書く量が少ないというのもメリットです。ファンクショナルスタイルで書いていくので、例えばビジネスロジックの重要な部分をシンプルに書いて、分散化や例外処理は別レイヤーで処理したり、分離して書いたりできます。これをJavaで書くとコードが長く、複雑で技巧的なものになってしまいがちなんですよね。

[Question]新しい言語に挑戦する苦労もありましたよね?

神田氏:
Scalaの知識が全員あったわけではない状態でした。勉強会を開いたり、みんなで学習して教え合ったりしましたが、自分達がやりたいことだったので効率的に習得できたと思います。最初はJavaっぽい書き方をしたものもあるので、それを関数型に書き直してよりScalaの効果を出していくこともテーマになっています。

[Question]アドテクノロジーの開発は技術的チャレンジの連続なんですね。どんな開発スタイルなんですか?

神田氏:
アドテクノロジーのシステムは構成しているパーツが多いので、1つ1つは単純だけど全体で見ると有機的に結びついて複雑になります。部分的に機能をリリースした時に、それが全体にどんなふうに影響するのかを予測するには全体を把握する必要があります。なので、開発メンバーの数は適度に抑えながら密にコミュニケーションを取れるようなチームで開発するのが基本スタイルです。
また、システム開発とはいえ運用が重要なウェイトを占めています。新規機能を開発して要件を満たせばOKというのはなく、レイテンシーや膨大なデータの量の多さと機能の複雑さと向き合わなくてはいけません。自分で書いたコードがシステムの中でどう使われるかを意識する必要があります。単に機能を実現させただけではダメなんです。

例えは、レポートデータを更新する機能をアップデートしたとします。正攻法で開発した時にかかる数ミリ秒単位の遅延が他のモジュールに影響が出てしまうケースが発生することもある。なにせ、データ量が膨大ですから。その時は正攻法から開発するのではなくて、例えばミドルウェアのセッティングからアプローチする必要があったりするんですよね。複合的な視点が必要なので、メンバーの得意な領域をカバーし合えるチーム作りをしています。

[Question]エンジニアとして面白さを感じますか?そして、これからの意気込みをぜひ教えてください。

神田氏:
まずアドテクノロジーですが、海外では学術的な研究対象になっていて、広告効果を上げるためにはどうすればいいか、どれくらいクリックされているかを推定するための学術論文がすでに数多く発表されています。それらの研究結果をシステムの改善の参考にすることがありますが、すでに発表されている論文を追いかけている形です。競合に勝つためにもこちらもアドテクノロジーを研究対象にする必要が出てくるでしょうね。

オープンソースのプロダクトを使っている中で、その誰も到達していない限界値まで使い倒している瞬間が日常的にある。こんなハイレベルな領域で開発する現場はなかなかないんじゃないですか。だからこそ、こんな機能が欲しいとか、そのプロダクトに足りてない部分を意識しているので、こういった知見をオープンソースプロダクトに還元していきたいです。
Scalaにしても、実際に導入して実践を重ねている中で我々にしかない知見があります。今後は、それらを外部に発信することでScalaのコミュニティに還元できるのではと考えています。

本日はありがとうございました。



2014-06-25 | Posted in コラムComments Closed 

関連記事