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
「Goで画像合成!」OGP画像の動的生成 / Dynamic generation of OG...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuichi Tsunematsu
November 24, 2021
Programming
1.4k
0
Share
「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
360
組織のスケーリングと持続性 / Scaling and Sustainability
tunepolo
9
10k
信頼される振る舞いを継続しましょう / Keep up the trusted behavior
tunepolo
2
1.2k
アジャイルプラクティスガイドブックを携え、チームで現場を変えていく / Improve your development process with Agile Practices Guidebook
tunepolo
0
290
チームではじめる 「アジャイルプラクティス」 実践の第一歩 / First step to start implementing "Agile Practices" with your team
tunepolo
2
1.7k
アジャイルプラクティスガイドブックの紹介 / introduction of Agile Practice Guidebook
tunepolo
0
1.2k
技術プラクティスの整理に1年半向き合ってわかったこと / What I learned from facing the arrangement of technical practices.
tunepolo
1
2k
「全社でアジャイル!」を広げるために / Expand Agile throughout the Company
tunepolo
1
1.8k
アウトプットが当たり前の文化をつくる / Create a culture where output is the norm.
tunepolo
0
2.8k
Other Decks in Programming
See All in Programming
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
2
500
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
690
Vibe NLP for Applied NLP
inesmontani
PRO
0
510
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
190
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
1.1k
의존성 주입과 모듈화
fornewid
0
150
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
820
AWSコミュニティ活動は顧客のクラウド推進に効くのか / Do AWS community activities help customers adopt the cloud?
seike460
PRO
0
150
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
2.7k
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
CDK Deployのための ”反響定位”
watany
5
890
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.2k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Are puppies a ranking factor?
jonoalderson
1
3.3k
WENDY [Excerpt]
tessaabrams
10
37k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
600
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
230
Visualization
eitanlees
150
17k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Statistics for Hackers
jakevdp
799
230k
We Have a Design System, Now What?
morganepeng
55
8.1k
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でのプロダクト開発など、ざっくばらん にお話いたします!