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
GatsbyJSで作った個人ブログの構成を色々見直してみた / Improve my pers...
Search
Kentaro Matsushita
March 27, 2021
Programming
480
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GatsbyJSで作った個人ブログの構成を色々見直してみた / Improve my personal blog made with GatsbyJS
Kanazawa.js Remote Meetup #11
https://kanazawajs.connpass.com/event/206416/
Kentaro Matsushita
March 27, 2021
More Decks by Kentaro Matsushita
See All by Kentaro Matsushita
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
430
開発のアジリティ向上のためのシステムリプレイス ~DMM GAMESの事例~
kentarom
0
880
Denoで簡単なCLIツールを作ってみる / Try to make a simple CLI tool with Deno
kentarom
0
1.1k
Webサイトパフォーマンスを継続的に計測したい!!! / I want to continuously measure my website performance!!!
kentarom
2
630
Actions ToolkitではじめるGitHub Action開発 / Getting started creating a GitHub Action with Actions Toolkit
kentarom
2
2.1k
GitHub Gistを使って、アクティビティを可視化しよう / Let's try visualizing your activity using the GitHub Gist
kentarom
1
920
OGP画像を生成するNode.jsのライブラリを作ってみた / Create a Node.js module for generating Open Graph image
kentarom
1
7.7k
チームをよしなにする立場を経験して学んだこと / Things I have learned in leading the team
kentarom
0
860
AWSの既存サービスを活用して、 障害検知・復旧を迅速化するカラクリ / JAWS-UG Kanazawa x OpsJAWS
kentarom
2
5k
Other Decks in Programming
See All in Programming
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
230
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
FreeBSDでZabbixを動かす
kenkino
0
350
SREの越境 / SRE Collaboration
y0hgi
2
300
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
470
iOSDC2026登壇資料.pdf
riofujimon
0
210
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
320
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
13
6.5k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
900
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
120
カツオ、ご期待ください
suneo3476
0
140
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Prompt Engineering for Job Search
mfonobong
0
480
For a Future-Friendly Web
brad_frost
183
10k
4 Signs Your Business is Dying
shpigford
187
23k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
290
A Modern Web Designer's Workflow
chriscoyier
699
190k
Transcript
GatsbyJSで作った個⼈ブログの構成 を⾊々⾒直してみた Kanazawa.js Meetup #11 2021.03.27 @_kentaro_m
⾃⼰紹介 @_kentaro_m ⾦沢市内のゲーム会社で働くWeb開発者 レガシーシステムを新しくする仕事を担当 最近触っている技術 Next.js / GraphQL / Kubernetes
/ Datadog
今⽇話すこと GatsbyJSで作った個⼈ブログのイマイチだと思う部分を改善 した点についてお話します。 blog.kentarom.com
抱えていた課題 ブログのビルド速度が遅い ブログ全体のスタイルに⼀貫性がない マークダウン出⼒のスタイル適⽤が⼒技
ブログのビルド速度が遅い Netlifyで4分30秒から5分00秒のビルド時間 OGP画像をNode Canvasで動的⽣成
ブログ全体のスタイルに⼀貫性なし フィーリングでマージンやフォントスタイルを指定 スタイル全体に⼀貫性がない状態 コンポーネントのカプセル化はされている CSS in JSライブラリのEmotionを利⽤ スタイル変更の影響はコンポーネントにとどまる
ブログ全体のスタイルに⼀貫性なし const BioWrapper = styled.div` display: block; ${mq[0]} { display:
flex; justify-content: center; } ` const AuthorLink = styled.a` font-size: 24px; margin-bottom: .2em; display: block; ` const DescriptionText = styled.p` font-size: 20px; display: block; margin: 0; `
マークダウンのスタイル適⽤が⼒技 マークダウンはRemarkプラグインでHTML出⼒ 出⼒されたHTMLにEmotionでCSSを適⽤ HTMLタグの描画でコンポーネントを利⽤したい 要素指定してCSSを直接定義したくない
マークダウンのスタイル適⽤が⼒技 <div className='blog-post' css={[postStyle]} dangerouslySetInnerHTML={{ __html: post.html }} /> const
postStyle = css` h2 { font-size: 28px; border: none; line-height: 1.5; } /* 省略 */ `
取り組んだ解決策 OGP画像⽣成の外部サービス利⽤ ブログビルドをGatsby Cloudに変更 GatsbyJS v3へのアップデート Chakra UIの導⼊ MDXの導⼊
OGP画像⽣成の外部サービス利⽤ Node Canvasの画像⽣成をやめた ビルドが遅くなるため Cloudinary の画像加⼯機能を利⽤ クラウドベースの画像管理サービス ベース画像に記事タイトルを動的追加
OGP画像⽣成の外部サービス利⽤ URLのパスパラメータの変更で画像⽣成を制御 記事タイトル フォントスタイル テキスト折返し https://res.cloudinary.com/johndoe/image/upload/c_ fit,l_text:fontname_64:${encodeURIComponent(title) },co_rgb:D6BCFA,w_1000,y_-100,w_1000/v1616667308/b ackground.png
OGP画像⽣成のサンプル画像
OGP画像⽣成のベース画像 ベース画像にテキストが追加される
ビルドをGatsby Cloudに変更 ビルドとホスティングはこれまでNetlifyを利⽤ ビルドはGatsby Cloud、ホスティングはVercelに変更 デプロイまでの時間が5分00秒から1分30秒に短縮
GatsbyJS v3のアップデート GatsbyJS v2からv3にアップデート 変更詳細を追っていないので、ビルド速度向上の直接的な 要因が確認できていない
Chakra UIの導⼊ ⼀貫性のあるスタイル適⽤のためにChakra UI導⼊ Chakra UIコンポーネントベースのレイアウトを⼼がけた レールからはずれるレイアウト適⽤は最⼩限
MDXの導⼊ マークダウン描画部分にコンポーネント適⽤のためにMDX導 ⼊ HTMLタグと描画させたいコンポーネントをマッピング 良い感じにスタイル適⽤ができる
MDXの導⼊ const components = { a: (props) => <Link {...props}>{props.children}</Link>,
p: ({ children }) => <Text mb={8} lineHeight='tall' >{children}</Text>, h2: ({ children }) => <Heading size='lg'>{children}</Heading>, ul: ({ children }) => <UnorderedList>{children}</UnorderedList>, li: ({ children }) => <ListItem mt={1} mb={1}>{children}</ListItem>, pre: (props) => <Box {...props} mb={8} />, code: (props) => <CodeBlock {...props} />, img: (props) => <Image {...props} mb={8} />, <MDXProvider components={components}> {data?.mdx?.body} </MDXProvider> }
MDXの応⽤ Gatsby Plugin MDX Embedでツイート埋め込み実現 ⾃作コンポーネントでSpeaker Deckの埋め込み実現 Speakerdeck の Embed
をコンポーネントにして、MDX に埋め込む - ARTICLES <Tweet tweetLink="yu_kgr/status/1264060189646286850" />
取り組んだ結果 ビルド⾼速化を実現 スタイルに⼀貫性が⽣まれた マークダウン出⼒でコンポーネント適⽤
ブログ執筆環境が快適になりました 次はブログを書くことを頑張ります。
付録:ソースコード github.com/kentaro-m/learn-something-new