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
860
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
610
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
840
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
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
190
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
870
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
150
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
400
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
540
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
220
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
300
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Built Our Own Background Agent at LayerX
layerx
PRO
9
5.1k
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
930
Navigating Weather and Climate Data
rabernat
0
460
Building Applications with DynamoDB
mza
96
7.2k
How STYLIGHT went responsive
nonsquared
100
6.2k
Side Projects
sachag
455
43k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
680
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Git: the NoSQL Database
bkeepers
PRO
432
67k
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