Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
「Goで画像合成!」OGP画像の動的生成 / Dynamic generation of OG...
Search
Yuichi Tsunematsu
November 24, 2021
Programming
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「Goで画像合成!」OGP画像の動的生成 / Dynamic generation of OGP images by Golang
[非公式]Go Reject Con 2021 の発表資料です
https://moneyforward.connpass.com/event/228698/
Yuichi Tsunematsu
November 24, 2021
More Decks by Yuichi Tsunematsu
See All by Yuichi Tsunematsu
成功をつなげる プロジェクトマネジメントの探求 / Exploring Project Management to Continuous Success
tunepolo
0
430
組織のスケーリングと持続性 / Scaling and Sustainability
tunepolo
9
11k
信頼される振る舞いを継続しましょう / Keep up the trusted behavior
tunepolo
2
1.4k
アジャイルプラクティスガイドブックを携え、チームで現場を変えていく / Improve your development process with Agile Practices Guidebook
tunepolo
0
330
チームではじめる 「アジャイルプラクティス」 実践の第一歩 / First step to start implementing "Agile Practices" with your team
tunepolo
2
1.8k
アジャイルプラクティスガイドブックの紹介 / introduction of Agile Practice Guidebook
tunepolo
0
1.3k
技術プラクティスの整理に1年半向き合ってわかったこと / What I learned from facing the arrangement of technical practices.
tunepolo
1
2.1k
「全社でアジャイル!」を広げるために / Expand Agile throughout the Company
tunepolo
1
1.9k
アウトプットが当たり前の文化をつくる / Create a culture where output is the norm.
tunepolo
0
2.9k
Other Decks in Programming
See All in Programming
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
200
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
110
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
250
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
380
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.5k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
300
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
170
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
110
最近”作らせてる” ローカルAIアプリの話
akit37
0
530
Groovy as a human and AI friendly programming language
paulk
0
160
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
Featured
See All Featured
Everyday Curiosity
cassininazir
0
390
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
600
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
570
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
660
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
620
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
Transcript
「Goで画像合成!」OGP画像の動的生成 Retty株式会社 常松祐一 2021/11/24
自己紹介 常松祐一 (つねまつ ゆういち) • Engineering Manager •
Software Engineering Coach • Agile Development SNSアカウント • tunepolo : • tune : https://user.retty.me/3946697/ 今日は上記画像を生成するサービスを サマーインターンで開発してもらった話です
OGP画像とは • SNSシェア時に表示されるサムネイル画像のこと ◦ “Open Graph Protocol”で定義されており、HTMLにメタタグを入れるこ とで使うことができる。
ページ種別によってOGP画像の仕様は異なる 【店舗紹介ページ】 画像1枚をサイズ調整 【ユーザページ】 アイコンと補足情報から合成 アイコン 補足情報 左右に 余白 上下を
カット
画像合成のアプローチ 1. 画像ライブラリを自前で操作 ◦ Good: 必要最小限の処理で済む ◦ Bad: 文字レイアウトが困難 2.
HTMLを動的生成し、キャプチャする ◦ Good: 文字が多いレイアウトが作りやすい。 ◦ Bad: HTMLレンダリングを挟むため重い インターン生 + メンターで議論してもらった結果、2を選択 1, 2共にtimakinさんのnoteにまとまっています Goでheadless browserを用いた 動的画像生成
• CleanArchitecture • echo(web framework) • wire(DI) • httptest +
chromedp • imageorient サービス構成 OGPサービス ユーザサービス など HTTPS 1. データ取得 2. HTML生成 3. レンダリング &キャプチャ
合成画像をキャプチャする箇所のコード なんと シンプル!
苦労したところ - アイコンフォントをどう持たせるか • Web/アプリでも使われるデータのため、共通管理したい • OGPサーバー内部でHTMLをレンダリングする際にアイコンフォントをどう やって配信する? ◦ webpack
+ webfonts-loaderでビルドした成果物を静的に抱き込む形 として対処 ◦ もっといい解決策があれば知りたい
HTMLテンプレート 合成用ロゴ デフォルトOGP画像 go:embedによるファイル埋め込みは便利
まとめ • HTMLを動的生成する画像合成は実用的 ◦ 画像生成までの流れが整理できていると、パターンを増や すことは簡単 ◦ パフォーマンス(処理時間・CPU・メモリ)も問題になることは なかった •
3週間で0から開発し、サービス投入まで実現してくれたイン ターン生の皆様に敬意と感謝 Photo by Max Delsid on Unsplash
エンジニア募集中! 11 ITで新たな食体験を提供していく「 Retty」のプロダ クト開発に携わるバックエンドエンジニアを募集し ます。 マイクロサービス化、新規事業など一緒に Goで開 発しませんか。 Go
Conferenceの発表で盛り込めなかった話や 残念ながら採択されなかったプロポーザルの話、 Go Conferenceに参加してみての感想戦、 Retty におけるGoでのプロダクト開発など、ざっくばらん にお話いたします!