皆さんこんにちは、メディア広告部門(MDH)の平井です。

先日(3月21日)、東京都心でサクラ(ソメイヨシノ)が全国トップをきって開花したそうです。ちなみに、東京都心が全国のトップになるのは9年ぶりのこと。

さて隔週で開催している技術者のスキルや知識共有のための勉強会「LT Thursday」ですが、今回で16回目を迎えました。
今回は、弊社のグループ会社であるサイバーエージェント・クラウドファンディングが運営するサービス、 Makuake と合同で勉強会を行いました。

 

1. 時間のない人のための5分でわかる MDH (MDH 駒原)

032 (1)

MDH(メディア広告部門)について開発責任者の駒原が発表しました。
「ビジネス視点で見た MDH」と「システム視点でみた MDH」、という観点で概要を説明しました。
MDH は弊社のメディア事業に属しており、「Ameba」、「Spotlight」、「by.S」、「FRESH!」、「AbemaTV」といったサイバーエージェントのメディア群に対して横断的に広告配信や広告効果計測を行っています。
また、そのシステム開発には秋葉原ラボ(データ解析やデータマイニングなどを専門とするエンジニアが在籍する研究開発組織)も携わっています。
ビジネス視点で見た MDH で大切にしていることは、以下の点です。

・メディアのグロースとマネタイズを両立させる
・ユーザーを犠牲にして収益を上げることはしない

それから、使用している技術キーワードやシステム構成図を公開しました。
詳細は MDH のエンジニアを捕まえて聞いてみてくださいとのことでした。

 

2. goa :: Design-first API Generation (MDH 杉山)
037

goa についてベテランのサーバーサイドエンジニア杉山が発表しました。
goa は Go 言語でマイクロサービスの REST API を構築するためのフレームワークです。
DSL からソースコードやドキュメントを自動生成することができます。
ソースコードについては、REST API として必要な controller や context が自動生成され、handler にビジネスロジックやデータアクセスを書けば良いそうです。
ドキュメントについては、Swagger 形式のドキュメントを生成するもので、go-swagger より良いとのこと。
一方で、モデルを goa が生成した構造に合わせないといけない、エラーレスポンスをカスタマイズするには goa ミドルウェアをいじらないといけない、といった面倒臭さもあるようです。

 

3. HoloLens で SSP のログを可視化する (MDH 坂本)
041

A.J.A. SSP と HoloLens について2年目エンジニアの坂本が発表しました。
いつもどおり電源の入っていない HoloLens を装着して発表しました。いつもどおりというのは、HoloLens を購入した当日も電源の入っていない状態で装着して出社してきたからです。筆者の勘では、HoloLens を話題にするときはとりあえず装着してみせることで認知度を高め、周囲の人が購入するよう仕向けているのではないかと思っています。それによって HoloLens を通じてのコミュニケーションが可能になることを坂本は求めているようです。

A.J.A. SSP にはいろいろなログがあるのですが、これらを以下の流れで利用しています。

・Fluentd で転送
・Elasticsearch で保存および集計
・Grafana で可視化
・大型ディスプレイに表示

今回坂本が挑戦したのはこの集計結果を HoloLens でも見られるアプリケーションの開発です。

スクリーンショット 2017-03-15 午後8.03.38

HoloLens は Microsoft の MR(Mixed Reality) デバイスで、Development Edition は33万3800円という価格です。HoloLens で使用可能な基本操作は、Gaze(見つめる)、Click、Hold、Voice の4つです。Gaze とは、画面の中央に表示されている点を、対象のオブジェクトに合わせる操作を指します。音声認識は英語のみの対応で、日本人には r と l の発音が難しく、なかなか聞き取ってもらえないとのこと。電池は約5.5時間持ちますが、実際には5時間使う前に疲れちゃうので電池の持ちは気にならないそうです。

Windows が入っているためスタンドアロンで動作し、Unity で開発できます。
開発には HoloLens はもちろんのこと、エミュレータを動かすために Window 10 Pro も必要です。
坂本は Windows マシンを買うお金がなかったので、MacBook Pro で Boot Camp して動かしました。ただし、マシンに最低 2GB ないとエミュレーターが起動しませんのでご注意を。
さらに Unity 力も必要です。坂本は「ぼくの Unity 力ではここまでが限界」というフレーズで笑いを起こしていました。なお、Microsoft は Github で HoloToolkit-Unity を公開していて HoloToolkit のインターフェースを実装すれば開発できます。

また、Fluentd の Aggregator を Kinesis & Lambda に置き換えたアーキテクチャに移行してるそうです。
Kinesis にする理由は、ログの流量が増えたときにスケーリングを考えたり、Fluentd の設定を変えるために Aggregator をデプロイするのが面倒になったからです。
Lambda による pull 型でログを取得したい理由は、Elasticsearch が死んだときに送信が滞ってバッファに溜まってしまうのをどうにかしたかったからです。

最後に、「みんなで HoloLens つけてミーティングしたい」と語っていました。

 

4. Lambda + Apex 事例紹介 ~ 全ては AWS コスト削減のために ~ (Makuake 吉田)
055

AWS コスト削減のための Lambda + Apex について Makuake の吉田が発表しました。
まずはじめに AWS Well-Architected Framework を紹介しました。
これに影響を受け、Makuake では週末だけでなく平日の0時から9時も開発用インスタンスを止め、AWS コストを削減しています。

アーキテクチャは、CloudWatchEvents の cron で Lambda を実行し、Lambda から EC2 インスタンスの  start/stop および Zabbix のメンテナンスを ON/OFF させる、といったものでした。イベントごとにインスタンス起動とインスタンス停止の処理を分岐させることでひとつの Lambda 関数で実現しました。

CloudWatchEvents には注意点が2つあるそうです。
1つ目は cron 式です。
一般的な cron 式の場合、任意を示すために記号の「*」を使用しますが、CloudWatchEvents では「*」が連続してはならないという謎仕様があり、「* *」ではなく「? *」にする必要があります。
2つ目は UTC 前提だということです。
日本時間の火水木金土の00:00にインスタンスを止める場合、「0 15 ? * MON-FRI *」にしないといけません。これはすごく直感的にわかりにくいです(が、慣れると頭の中で簡単に変換できるようになるそうですw)

デプロイフローは、Github -> CircleCI -> Apex でした。Apex は Lambda 管理ツールで Terraform と連携しています。Lambda に特化しているため非常に薄く実装されており、さらにドキュメントが充実しています。Lambda がサポートしている言語は Node.js、Java、Python、C# ですが、Apex を使用するとなんと Go も使用することができます。

今回、合同勉強会を終えて Makuake 吉田からコメントをもらっているので、それも紹介したいと思います。

「Makuake 吉田です。今回は LT Thursday に呼んで頂く形で合同勉強会が実施でき、交流を通して刺激的な機会になりました。MDH と Makuake では、事業ドメインが異なるため、双方のビジネスを知る機会にもなりましたし、今後導入を検討している Golang API の事例紹介も聞けて参考になりました。Microsoft HoloLens の LT は、Unity でログを可視化するという、やろうとしていることは非常にチャレンジングなのに、HoloLens を装着しながらというスタイルに笑ってしまいました。今後 Makuake でも合同勉強会などを実施して、技術交流を推進して行きたいと考えています」

MDH でも合同勉強会をしてくれる会社を絶賛募集中です!

以上、第16回 LT Thursday レポートでした。
次回もお楽しみに。

Profile:
株式会社サイバーエージェント
Ameba 統括本部 広告部門(MDH) アドテクノロジー局
平井 芳孝

▼Makuake
URL : https://www.makuake.com/
Facebook : https://www.facebook.com/makuake/
Twitter : https://twitter.com/makuake_ca

▼メディア広告部門(MDH)
Ameba Ownd : https://ameba-ad-pr.amebaownd.com/
Facebook : https://www.facebook.com/AmebaAds.CyberAgent/
Twitter : https://twitter.com/amebaads_pr