Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dynalystにおける動的な画像生成
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kurochan
March 21, 2017
Programming
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dynalystにおける動的な画像生成
Kurochan
March 21, 2017
More Decks by Kurochan
See All by Kurochan
ABEMAのバグバウンティの取り組み
kurochan
1
1k
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
150
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
150
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.3k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
110
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
260
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
370
入門 電気通信事業者
kurochan
13
5.9k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.3k
Other Decks in Programming
See All in Programming
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
610
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
220
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
120
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
320
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
330
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
130
Creating Composable Callables in Contemporary C++
rollbear
0
180
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
620
スマートグラスで並列バイブコーディング
hyshu
0
270
さぁV100、メモリをお食べ・・・
nilpe
0
160
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
Unsuck your backbone
ammeep
672
58k
sira's awesome portfolio website redesign presentation
elsirapls
0
290
The Language of Interfaces
destraynor
162
27k
How STYLIGHT went responsive
nonsquared
100
6.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Side Projects
sachag
455
43k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
210
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Transcript
CyberAgent, Inc. All Rights Reserved Dynalystにおける動的な広告の 画像生成 黒崎 優太 @kuro_m88
黒崎 優太 @kuro_m88 • 株式会社サイバーエージェント ◦ AdTech Studio / Dynalyst
エンジニア • 新卒2年目 • Scala, AWS, 自宅サーバ 査読に参加しました 今日書き終えました
今日話すこと • 自分から見たScala ◦ 初心者的な話 • 動的な広告の画像生成 ◦ Scalaを使ってどのようにして実現したか (募集ページより)
自分から見たScala
Scalaを始めたきっかけ • 配属されたチームがScalaしか使ってなかった ◦ 社歴 = Scala歴 • 聞いたことはあったかもしれない…? •
Go言語も2010年くらいに力説された事があった ◦ こんなに流行るならやっとけばよかった • 今覚えるならScalaかGoかRust
なぜScalaなのか • インタビュー記事が! ◦ アドテクスタジオのエンジニアに聞くScalaの魅力 http://gihyo.jp/dev/serial/01/cyberagent/0063
なぜScalaなのか • チャレンジ (今は普通?) • 可読性、メンテナンス性が高い • パフォーマンス • Javaの資産が使える
• 社内コミュニティ
なぜScalaなのか • 弊社Scala Girlからの回答
なぜScalaなのか • 弊社Scala Girlからの回答
Scala Meetup • 社内勉強会を定期的に開催
Scalaをやってみて • 書いて実際に使ってみないと良い書き方がわからない ◦ 既存のコード、チームのレビュー環境のおかげ • 並行、並列処理が書きやすい • よく言われるデメリット的な物はあまり感じない or
工夫次第 or 慣れ ◦ 例: コンパイル遅い、検索しにくい ◦ スペック低めの環境で開発つらいのはどうにかしたい ◦ ハマるのはだいたいJavaっぽい箇所 • モックをすぐ作って動かす!みたいな用途には向いてなさそう
朗報: ググラビリティ問題は解決しました • Google先生の圧倒的成長により解決 • こういうやつ
朗報: ググラビリティ問題は解決しました
Scalaのコンパイル
参考: Scalaプロダクトのビルド高速化 • https://speakerdeck.com/kurochan/scalapurodakutofalsebirudogao-su-hua
動的な広告の画像生成
• Dynamic Retargeting for Games • Dynamic Personalized Ads
• 100+ sbt subprojects • 400K+ lines • 18K+ builds
(50 builds / day) • Running on AWS (US, JP)
配信している広告の例 • こんな感じです
生成している画像 • こんな感じです
動的な部分 • ユーザによって色々違う
構成
そもそも画像を生成する理由 • HTMLとかSVGで重ねればよいのでは? ◦ ディスプレイ広告だけなら可能 ◦ ネイティブ広告に対応できない
Scalaで画像合成 • 画像パーツとテキストを合成
Scalaで画像合成 • ほぼJavaの標準クラスライブラリを利用 ◦ javax.imageio ▪ ImageIO • 画像の入出力 /
圧縮フォーマット変換 ◦ java.awt ▪ image.BufferedImage • 画像をメモリに展開して操作するバッファ ▪ Graphics2D • 画像の操作
Scalaで画像合成 • 便利なライブラリ ◦ rkalla/imgscalr ▪ 画像のリサイズに利用 ◦ sksamuel/scrimage ▪
画像の操作がひととおり用意されている(今回は自作) 画像フィルタもある
テキストのアウトライン描画 • アウトラインがあると文字がくっきりする
Scalaでアウトライン描画 (一部簡略化)
透過情報付き画像がJpegに書き出せない • 透過なしの画像バッファを用意してそこに再描 画
日本語/中国語/韓国語が描画できない • いわゆるCJKフォント • PCで動くのにサーバでレンダリングされない • フォントサイズを変えてもフォントの幅が0px • OracleJDKをOpenJDKに変えたらなおった… ◦
JVMの実装依存 ◦ 手元と環境揃えるの大事
気になりそうなところ • 画像をメモリ上で扱うので容量が気になる ◦ バランス的にメモリよりもCPUを使うのでイン スタンスサイズ的に問題なかった • 生成速度を上げられるのか ◦ Kinesisを使ってるので生成サーバを増やせ
ば水平スケール可能
Scalaの強みが活かせそうなところ • 別々に画像を生成してそれらを重ねる
どうやって開発したのか • 開発期間: 1ヶ月程度 • 他に配信のためにデータの連携する部分とか • コンポーネントごとに分担して開発
まとめ • 入社して初めてScala触った人の体験談 • Scalaで画像生成するサーバを作った話 ◦ 他にも色々新機能追加しています