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
Kurochan
March 21, 2017
Programming
0
1.7k
Dynalystにおける動的な画像生成
Kurochan
March 21, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
77
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
110
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
82
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
190
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
330
入門 電気通信事業者
kurochan
13
5.8k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6k
GoでTCP Proxyを実装してみよう
kurochan
1
1.3k
Other Decks in Programming
See All in Programming
Graviton と Nitro と私
maroon1st
0
160
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
6
1.7k
クラウドに依存しないS3を使った開発術
simesaba80
0
210
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
130
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
260
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
240
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.3k
愛される翻訳の秘訣
kishikawakatsumi
3
370
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
330
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
240
Featured
See All Featured
Accessibility Awareness
sabderemane
0
31
Music & Morning Musume
bryan
46
7k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
120
The Language of Interfaces
destraynor
162
26k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
2
3.8k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
35
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
81
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
ラッコキーワード サービス紹介資料
rakko
0
1.9M
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
44
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
74
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で画像生成するサーバを作った話 ◦ 他にも色々新機能追加しています