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
vercel/og-imageを使ったブログOGPの簡単自動生成 / Generate OGP...
Search
ぷらす
November 21, 2020
Programming
1.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
vercel/og-imageを使ったブログOGPの簡単自動生成 / Generate OGP easily using vercel og-image
ぷらす
November 21, 2020
More Decks by ぷらす
See All by ぷらす
AWSの認定資格を受けた話
p1ass
1
510
趣味プロジェクトをリードする技術 / Technology to lead hobby projects
p1ass
21
9.2k
Webアプリケーションにおける並行処理の難しさ / #Gocon_Sendai
p1ass
4
2.7k
RSSフィードをもっと便利に / Make RSS feeds more convenient #camphor_lt
p1ass
1
16k
うじまる君の生活習慣の乱れを可視化したい! / uzimaru birthday LT
p1ass
2
16k
複数サービスを運用しやすい理想のコンテナ環境をVPS上に構築する #camphor_day / Building ideal container environment on VPS
p1ass
1
9.3k
Kubernetesのイメージタグの更新を楽にするツールを作った / p1ass/mikku - make updating Kubernetes image tags easier
p1ass
1
120
ドメインロジックと 永続化処理を分離する設計改善 を行って得られた知見 / Design improvements that separate domain logic and persistence function
p1ass
1
2.3k
Micro Frontends × gRPC-Web の挑戦 / The challenge of micro frontends and gRPC-Web
p1ass
0
200
Other Decks in Programming
See All in Programming
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
130
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
590
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
230
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
37k
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
130
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
130
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
210
Building an Out-of-Order CPU
latte72
1
750
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
490
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
200
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
270
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
エンジニアに許された特別な時間の終わり
watany
108
250k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
We Have a Design System, Now What?
morganepeng
55
8.3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
680
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
Transcript
WFSDFMPHJNBHFΛͬͨ ϒϩά0(1ͷ؆୯ࣗಈੜ -5 /BPLJ,JTIJ !QBTT
͡Ίʹ ࠓ͋Γ͕ͱ͏͍͟͝·͢
IUUQTCMPHQBTTDPN Β͢ͷϒϩά
Β͢ͷϒϩά ٕज़ωλͦͷଞॾʑΛॻࣗ͘࡞ϒϩά l (JU)VCQBTTCMPH l ੩తαΠτδΣωϨʔλ)VHP l σβΠϯطଘͷͷʹେྔͷύονΛͯͯΔ l ϗεςΟϯά7FSDFM
l 5XJUUFSͯϒ্Ͱදࣔ l ΠϯϓϨογϣϯͷӨڹେ l ࢹೝੑͷ֦େ l ΫϦοΫྖҬͷ֦େ ը૾Λݸผʹ༻ҙ͍ͨ͠ʂ ϒϩάͷ0(1
ࠓ·Ͱͷ0(1ӡ༻ l هࣄΛॻͨ͘ͼʹ(*.1Ͱը૾Λ࡞ l ςϯϓϨʔτϦϙδτϦʹஔ͍ͱ͍ͨ l ͦͷը૾ΛࣗͰDPNNJU ͦΕͰྑ͍ͬͪΌྑ͍͕໘
Ͳ͏ʹ͔ͯ͠0(1Λࣗಈੜ͍ͨ͠ʂ l όοΫΤϯυͷهࣄͰը૾Λ͏͜ͱك l جຊλΠτϧͷΈͷ0(1Λ࡞ ࣗ͠ಈͰੜͰ͖ΔͷͰʁ
طଘͷੜख๏ ࠨIUUQTTQFBLFSEFDLDPNTDILUKNGJSFCBTFEFPTIPVRJOHPHQTIFOHDIFOH ӈIUUQTTQFBLFSEFDLDPNEPSB ੜ-5ͷఆ൪ωλ
طଘͷੜख๏ l 'JSFCBTF $MPVE'VODUJPOT l ͓खܰ CZͨ͡· l /FYUKT 443
7FSDFM l +49Λ͔͚ΔͷͰෳࡶͳ͜ͱΛ͢Δͷʹྑͦ͞͏ l 0(1͚ͩͷͨΊͩͱΦʔόʔΤϯδχΞϦϯά͔ʁ
ୈࡾͷબࢶ WFSDFMPHJNBHF https://github.com/vercel/og-image
WFSDFMPHJNBHFͷಛ l 63*ɾΫΤϦύϥϝʔλΛม͑Δ͜ͱͰੜը૾ΛมԽ l ϒϩάͷλΠτϧΛૹΕ0, l WFSDFMͰ؆୯σϓϩΠʂ l $*ͰσϓϩΠࣗಈԽΛؤுΜͳͯ͘0, l
$%/ʹΩϟογϡͯ͘͠ΕΔͷͰຖճը૾͕ੜ͞Εͣߴ ࠓճͷ༻్ʹྑͦ͞͏
WFSDFMPHJNBHFͷσϓϩΠ جຊ3&"%.&௨ΓʹΕ0, WFSDFMPHJNBHFΛϑΥʔΫ WFSDFMKTPOΛฤू )5.-$44Λ͍ͬͯ͡σβΠϯΛมߋ WFSDFMʹσϓϩΠ
࣮ࡍͷྫ IUUQTPHJNBHFQBTTDPNBQJW$BEEZͰH31$ͷϦΫΤετΛϦόʔεϓϩΩγ͢ΔQOH
ؾΛ͚ͭΔϙΠϯτ l WFSDFMʹຊޠϑΥϯτ͕ͳ͍ l ͲΒ܅ݴͬͯͨɻ8FCϑΥϯτ͔ຒΊࠐΈͰରԠ l ࠷ॳۭനͷ0(1Λੜͯ͠͠·ͬͨ
ؾΛ͚ͭΔϙΠϯτ l σϑΥϧτͷ$BDIF$POUSPM͕ l ۭനͷ0(1͕5XJUUFSʹΩϟογϡ͞Εɺ5XJUUFS7BMJEBUPSΛͬͯ 0(1͕ߋ৽͞Εͳ͍ l 63-ʹόʔδϣϯQSFGJYΛ༩ͯ͠ରԠ l IUUQTPHJNBHFQBTTDPNBQJW$BEEZͰH31$ͷϦΫΤετΛϦόʔεϓϩΩ
γ͢ΔQOH
ਓʹΑͬͯؾʹͳΔϙΠϯτ l ੜը૾ͷϚʔΫΞοϓ͕+49Ͱͳ͘ී௨ͷ)5.- l ࠓճఔͷͷͰ͋Εͳ͔͕ͬͨɺ ෳࡶͳͷΛΖ͏ͱ͢Δͱ +49Λॻ͖ͨ͘ͳ͖ͬͯͦ͏ l ReactDOMServer.renderToStaticMarkup(element)で )5.-จࣈྻΛੜͯ͠͠·͑؆୯ʹग़དྷͦ͏
https://zenn.dev/otsukayuhi/articles/e52651b4e2c5ae7c4a17 export function getHtml(parsedReq: ParsedRequest) { const { text, theme, md, fontSize } = parsedReq; return `<!DOCTYPE html> <html> <meta charset="utf-8"> <title>Generated Image</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> ${getCss(theme, fontSize)} </style> <body> <div> <div class="spacer"> <div class="heading">${emojify( md ? marked(text) : sanitizeHtml(text) )} </div> </div> </body> </html>`; }
ଞͷਓ͕࡞ͬͨWFSDFMPHJNBHFΛͬͨͭ (JU)VC4PDJBMJGZ(JU)VC༻ͷ0(1Λ࡞ͬͯ͘ΕΔ܅ https://socialify.git.ci/
·ͱΊ l WFSDFMPHJNBHFΛͬͯϒϩάͷ0(1Λࣗಈੜ l WFSDFMʹ؆୯σϓϩΠͰ͖ΔͷͰݸਓͩͱ͔ͳΓ༗༻ l ϋϚΓͲ͜Ζ͚ͩҙ͠·͠ΐ͏