分サイバーエージェントのインターネット広告事業を技術面から支える「アドテクスタジオ」では,関数型言語の一つであるScalaが積極的に活用されています。今回,スマートフォン特化型のリアルタイムターゲティング広告を実現するサービス「Dynalyst」(⁠図1)を開発した韓翔元氏(写真1⁠)⁠,そしてスマートフォン向けアドプラットフォームである「AMoAdアドネットワーク」(⁠図2)の開発と運用を担当する井上ゆり氏(写真2)に,Scalaの魅力を伺いました。――最初にScalaに興味を持ったきっかけを教えてください。井上:サイバーエージェントに入社する前から関数型言語に興味があり,評価が必要になるまで実際の計算を行わない遅延評価のしくみなどに魅力を感じていました。その中でも特にScalaにはJVM上で実行できるといったメリットがあり,既存のJava環境との親和性も高かったので実際の開発現場でも使うようになりました。韓:私はサイバーエージェントアメリカで働いていたころ,アメリカで活躍している多くのエンジニアと交流したのですが,そのときに最近Scalaが流行っているという話をよく聞いたのです。それでScalaについて調べてみたところ,Twitterなどの企業がScalaを採用し始めていると知り,そこから興味を持ち始めました。最初の印象は良くなかったです(笑⁠)⁠。そのときはJavaしか使っていなかったので,Scalaのコードを見てもよくわからなかったんですよね。それにJVM上で実行するならJavaで書いたほうがよいという思いもありました。それでもScalaを勉強することにしたのは,いずれアメリカと同じように日本でも普及するだろうと考えたからです。エンジニアとしてステップアップするためにも,Scalaに取り組むことを決めました。――最初に実際の開発にScalaを使うと決めたとき,周囲のエンジニアの反応はどうだったのでしょうか。井上:現在のプロジェクトでは始めからScalaを使っていますが,2年ほど前に別のプロジェクトに携わっていた際もScalaを提案しました。そのときはもちろん反対されました。グラフDBにアクセスするためのラッパーをScalaで作ろうとしたのですが,当時は周りにScalaを使っているエンジニアがいなかったので,誰がメンテナンスするんだと言われたのです。それでも「私がメンテナンスする」と押し切り,Scalaでの開発を認めてもらいました。韓:現在携わっているDynalystのプロジェクトが始まったとき,基本設計の検討などとともに開発言語をどうするかという話になって,Scalaをプッシュしました。チームメンバーが納得せず,無理と言われたらそこで終わりだったかもしれませんが,メンテナンスも含めて自分が責任を持って対応するつもりで提案したところ,チーム全員がScalaの採用に納得してくれました。Dynalyst韓氏が開発に携わる,スマートフォン特化型のリアルタイムターゲティング広告サービス「Dynalyst⁠」⁠。――実際の開発への利用を考えたとき,当然学習コストも考える必要があると思います。その点について,Scalaをどのように評価されていたのでしょうか。井上:エンジニアであれば,1つの言語を知っていればほかの言語の習得にはそれほど時間がかからないだろうという認識があると思います。オブジェクト指向言語と関数型言語の壁はそれほど低くなく,パラダイム転換が必要です。ScalaではJavaの資産であるライブラリ類がそのまま使えるので,Javaエンジニアであればその面で過去の経験を活かせます。そのように考えると,Scalaの学習コストはほかの関数型言語に比べて低いと思います。韓:Dynalystの開発を始めたとき,周りのメンバーは私も含めてScalaでの開発は初めてでした。ScalaはJava的な書き方ができるので,最初はJavaと似たようなソースコードで作り始めて,そこから徐々にScalaに慣れて関数型言語の概念を採り入れるといった流れで開発を進めました。人によって違いますが,Dynalystのメンバーで言えば,実際にコーディングを始めたのが11月でそこから2ヵ月半ほどでリリースに至っています。人でも,それくらいの期間があれば対応できるのではないでしょうか。井上:たしかにScalaはJava風の書き方ができますが,関数型言語への頭の切り替えができていないとコードが汚なくなって嫌ですね(笑⁠)⁠。コードの見た目だけでなく実行速度にも関わるので,がんばって学習して関数型言語の頭に切り替える必要があると考えています。韓:たしかに一時期Scalaの書き方で悩みましたね。プロジェクトが始まるときにScalaにしましょうと私が話して,それがOKされてScalaを採用したわけです。してみんなで決めたことなのだから,悩んでいる暇があるなら勉強しましょうと(笑⁠)⁠。アドテクスタジオでは「アドテクDOJO(道場⁠)⁠」という取り組みを定期的に開催しています。アドテクDOJO(道場)とは,「⁠師匠」と「弟子」の関係設定を設け,育成文化の一貫としてペアプログラミングを行う社内の取り組みです。これを利用してチーム内のメンバーとペアを組み,集中的にScalaの考え方や書き方を伝えました。結果的にはプロジェクトのリリースまでたどり着いて,メンバーもScalaで書くことに慣れたようです。最近,Scalaで開発してよかったですかとメンバーに聞いたところ,みんなScalaでよかった,楽しくコーディングしていますと言ってもらえたのでうれしかったですね。井上:楽しくコーディングできるなんて最高ですね。JavaのライブラリはScalaでは使いたくない!?――逆に,Scalaでの開発はやめればよかったと思うことや,Javaとの比較で弱さを感じる部分はありますか。井上:AndroidのアプリをScalaで開発したのですが,そのときはやめるべきだった,Javaにすべきだったと後悔しました。基本的にJavaもScalaもコンパイルすればバイトコードになるので,Android上でも動作します。Scalaのライブラリが重過ぎて現状のAndroidのハードウェアリソースではちょっと厳しかったです。時代も変わっていくので,将来的には大丈夫になるだろうと期待しています。韓:現在の仕事の延長線上で少し気になっていることがあります。今後リアルタイムプロセッシングと言われるストリーム処理をScalaで実装したいと考えているのですが,Javaにはそのためのライブラリがいろいろとある一方,Scalaにはまだ少ないことがわかりました。Kinesisというサービスがありますが,SDKやライブラリはJava向けにしか提供されていません。Kinesisを利用する手もありますが,現状ではDynalystのサーバサイドはすべてScalaで統一しているので,Javaを入れたくないのです。Kinesisは使いたいなと思うところもあり,迷っています。たしかにScalaではJavaのライブラリを使えますが,実際に使うとソースコードにJava的なコードが入り込んでしまうので,JavaのライブラリはScalaでは使いたくないという思いがあります。本当のScala好きはそう思っている方が多いのではないでしょうか。社内勉強会でScalaエクササイズ――JavaとScalaはパフォーマンス面でどちらが優れているのか議論になることが多いと思います。実際に開発に使われていて,Scalaのパフォーマンスをどのように感じていますか。韓:そこはJavaとScalaの違いというよりはソースコードの書き方の問題という気がします。Scalaの記法の1つに関数リテラルがありますが,これを利用すると無名クラスとしてバイトコードが生成されてしまいます。これがパフォーマンスに影響するという話があります。実際に検証すると性能面での影響はほとんど感じられず,また関数リテラルを使えばソースコードの記述が楽になって可読性やメンテナンス性も向上するので,割り切って使っています。井上:1点だけ,ここは確実に遅いと言えるのはコンパイルですね。Scalaのライブラリを読み込んでコンパイルするので,どうしても時間がかかります。AMoAdネットワーク開発および運用担当者の1人として井上氏が関わる「AMoAdネットワーク」でもScalaが活用されている。――これからScalaを学ぶエンジニアへアドバイスするとしたら,どういったことでしょうか。韓:とりあえず書いてみるのがよいでしょう。最初はJava風の書き方でもよいと思います。それで慣れてきたら,徐々に関数型言語風のソースコードに書き直していくという流れです。すると,おそらくモナドあたりで詰まると思いますが,そこを理解できれば大幅にソースコードの量が減り,Scalaのメリットを実感できると思います。井上:私たちのチームでは毎週Scala勉強会を開催しています。チームのメンバーはScala好きでゴリゴリ使っているのに,さらにまた勉強会をやっているわけなんですが(笑⁠)⁠,そこではスパルタエクササイズが行われます。Scala』(⁠注1)という洋書に,最終的にScalaz(注2)で使われているようなオブジェクトを作っちゃおうという高い目標のエクササイズが載っているんですね。順番にやっていくと自然に関数型言語脳が作られるすばらしい本なので,ぜひ実践してみていただきたいです。Scala』を読んだら今のソースコードでは駄目だと感じて書き直したことがあります。そのくらい勉強になる本です。――アドテクスタジオが開設されて半年が経ちましたが,グループ会社内のアドテクに携わるエンジニアが集まったことで,どのような変化が生まれているのでしょうか。韓:非常に良い方向に向かいつつある手応えを感じています。今までバラバラだったさまざまなプロダクトが1つのフロアに集まり,コミュニケーションを図りながら開発を進めることができていますし,さらにシナジーを高めるための企画も進んでいます。先ほどお話したアドテクDOJO(道場)でのペアプロのような取り組みの中で,コミュニケーションをさらに深めて良いプロダクトを創出していきます。――本日はありがとうございました。Editionとして購入が可能。注2)Scalaの標準ライブラリを補完することを目的に開発された,純粋関数型データ構造を提供するライブラリ。AMoAdアドネットワーク著者プロフィール川添貴生(かわぞえたかお)株式会社インサイトイメージ代表取締役。企業サイトの構築及び運用支援のほか、エンタープライズ領域を中心に執筆活動を展開している。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。