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
1.1k
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
160
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
150
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.3k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
120
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
270
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
380
入門 電気通信事業者
kurochan
13
5.9k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.3k
Other Decks in Programming
See All in Programming
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
17k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
230
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
190
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
440
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
660
Android CLI
fornewid
0
190
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
260
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
0
500
メールのエイリアス機能を履き違えない
isshinfunada
0
140
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
yield再入門 #phpcon
o0h
PRO
0
820
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
250
Product Roadmaps are Hard
iamctodd
55
12k
Side Projects
sachag
455
43k
エンジニアに許された特別な時間の終わり
watany
108
250k
Designing for humans not robots
tammielis
254
26k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
200
GitHub's CSS Performance
jonrohan
1033
470k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
640
Documentation Writing (for coders)
carmenintech
77
5.4k
Amusing Abliteration
ianozsvald
1
240
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で画像生成するサーバを作った話 ◦ 他にも色々新機能追加しています