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
GatsbyJSで作った個人ブログの構成を色々見直してみた / Improve my pers...
Search
Kentaro Matsushita
March 27, 2021
Programming
470
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 GAMESの事例~
kentarom
0
870
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
620
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
910
OGP画像を生成するNode.jsのライブラリを作ってみた / Create a Node.js module for generating Open Graph image
kentarom
1
7.6k
チームをよしなにする立場を経験して学んだこと / Things I have learned in leading the team
kentarom
0
850
AWSの既存サービスを活用して、 障害検知・復旧を迅速化するカラクリ / JAWS-UG Kanazawa x OpsJAWS
kentarom
2
5k
DMM.comの認証基盤を支えるエラー通知の仕組み / AWS Dev Day Tokyo 2018 Lightning Talk
kentarom
2
14k
Other Decks in Programming
See All in Programming
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
360
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
350
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
180
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
140
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
220
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
MySQLとPostgreSQLって何が違うの?
akagami
0
130
Press start. Python's next generation.
willingc
PRO
2
110
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.1k
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
400
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
2.8k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
870
Building the Perfect Custom Keyboard
takai
2
850
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
BBQ
matthewcrist
89
10k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
The Pragmatic Product Professional
lauravandoore
37
7.4k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
280
Believing is Seeing
oripsolob
1
200
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
220
Music & Morning Musume
bryan
47
7.3k
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