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
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
230
入門 電気通信事業者
kurochan
13
5.6k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.7k
GoでTCP Proxyを実装してみよう
kurochan
1
1.1k
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
490
スケールするというのはどういうことなのか
kurochan
14
4.9k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
52
46k
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
kurochan
10
3.5k
セキュキャンを卒業してその後
kurochan
0
1.4k
Other Decks in Programming
See All in Programming
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
4k
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
19
7.6k
XP, Testing and ninja testing
m_seki
3
250
Agentic Coding: The Future of Software Development with Agents
mitsuhiko
0
110
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
180
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
290
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
430
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
140
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
130
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
170
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
780
Porting a visionOS App to Android XR
akkeylab
0
480
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Adopting Sorbet at Scale
ufuk
77
9.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
Being A Developer After 40
akosma
90
590k
The Cult of Friendly URLs
andyhume
79
6.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Designing Experiences People Love
moore
142
24k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Scaling GitHub
holman
460
140k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
310
Building Flexible Design Systems
yeseniaperezcruz
328
39k
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で画像生成するサーバを作った話 ◦ 他にも色々新機能追加しています