2021-01-17
以前GatsbyブログでTwemojiを利用して絵文字サムネイルを作成する方法を紹介したが、絵文字だけでは例えば「JavaScriptの配列」だとか「Reactのライブラリ」を直感的に表現することは難しいと思った。そこで今回はSVG画像をサムネイルと記事のトップ画像として表示させる方法を紹介したい。
SVGファイルが必要です。
僕は
記事のMarkdownと同じディレクトリにSVGを配置して、MDのfrontmatterにheroを追加します。
ーーー
title: "SVGのテスト"
date: "2021-01-16"
tags: ["Gatsby"]
hero: ./react.svg
ーーー
export const blogListQuery = graphql`
query blogListQuery($skip: Int!, $limit: Int!) {
allMarkdownRemark(
sort: { fields: [frontmatter___date], order: DESC }
limit: $limit
skip: $skip
) {
edges {
node {
fields {
slug
}
frontmatter {
title
date
tags
emoji
hero { publicURL }
}
}
}
}
}
`
必要なのはpublicURLだけですのでそれを入手します。
SVGと絵文字を両方使いたいので、絵文字を設定した時は絵文字を、svgを設定した時はSVGがレンダーされるようにしました。
{node.frontmatter.hero ?
(
<div className={blogIndexStyles.postIcon}>
<img src={node.frontmatter.hero.publicURL} alt="SVGicon" /> </div>
) : (
<Twemoji
className={blogIndexStyles.postCardEmoji}
svg
text={node.frontmatter.emoji || "📝"}
/>
)}
最初はgatsby-imageを使って表示させようとしたのですが、gatby-imageはSVG非対応でした。 PNGとかJPEGなどに比べるとSVGはファイルサイズが小さいのがメリットだと思います。(Netlifyの無料ビルト時間制限にひたすらビビっている)