本サイトはプロモーションが含まれています

Gatsby.jsで作ったブログを日本語用にカスタマイズする方法(ファビコン・記事投稿表示・フォントの変更)

2022年09月10日 22:00

導入

Gatsby.js では、Gatsby Starter Blogという簡単にブログの雛形を作れる公式のテンプレートがあります。
しかし、そのままでは日本語のブログを書く際に不便であるため、カスタマイズする必要があります。
そこで、日本語でブログを書く際、まずするべき以下のカスタマイズの手順を順に紹介していきます。

  • ブログに関する情報設定
  • ファビコンとプロフィールの画像の変更
  • 記事の投稿時刻の表示の変更
  • 日本語フォントへの変更

Gatsby.js の構成

Gatsby Starter Blogを使って作ったブログの構成は以下のようになっています。

- .cash/ (自動生成されるキャッシュ)
- content/blog/ (ブログの記事をmarkdown形式で書いてここに入れる)
- node_modules/ (ライブラリのインストール先。Node.jsでは自動生成される)
- public/ (gatsby developすると自動生成される静的ファイル群)
- src/ (実装のメイン。Reactで記述。)
- components/ (各ページで共通利用するパーツ群)
bio.js (著者のプロフィール欄)
layout.js (全体のレイアウトを定めた部分)
seo.js (headerのtitle, metaタグなどを記述)
- images/ (共通利用する画像)
- pages/ (各種ページ)
404.js (404ページ)
index.js (トップページ)
using-typescript.tsx (typescriptを使う場合の雛形)
- templates/ (ページのテンプレート)
blog-post.js (ブログ記事のページのテンプレート)
normalize.css (ブラウザの表示の違いを吸収するcssファイル)
style.css (表示をカスタマイズするcssファイル)
- static/ (静的なファイル群)
favicon.ico (サイトのファビコン)
robots.txt (検索エンジンのクローラー向けのファイル)
gatsby-browser.js (CSSやフォントなどをブラウザに読み込ませる)
gatsby-config.js (ブログのサイト名、著者、SNS、説明などの各種設定)
gatsby-node.js (gatsby developをした際に実行される処理)

簡単な説明を横に付け加えておきました。
詳しい説明は公式ページ (https://www.gatsbyjs.com/docs/reference/gatsby-project-structure/) を確認するとよいと思います。

ブログに関する情報設定

gatsby.js の構成が分かったところで、まずはブログの情報を登録していきます。
gatsby-config.js を開き、siteMetadata を設定したいように変更します。
例えば、私の場合はこちらです。

siteMetadata: {
title: `bpeldi2oerkd8の開発日誌`,
author: {
name: `bpeldi2oerkd8`,
summary: `Web開発など興味がある分野についてブログを書いています。PHP, JavaScript, TypeScript, Java, Python使いです。`,
},
description: `Web開発に関する記事、興味のある分野の記事を不定期で更新中。開発するうえでつまづいたこと、興味のある分野でわからなかったことについてまとめて記事にする予定です。`,
siteUrl: `https://bpeldi2oerkd8.com/`,
social: {
twitter: `bpeldi2oerkd8`,
},
},

また、ファビコンとプロフィールの画像を好きなものに変えます。
ファビコンは static/favicon.ico として、プロフィール画像は src/images/profile-pic.png として存在するので、名前を変えずにファイルを入れ替えます。
プロフィール画像は Pixabay からとりました。
ファビコンと PWA 用のサイトアイコンは私が InkScape で作成しました。
ファビコン用画像


次に、記事の投稿時刻の表示を変更します。
こちらの記事を参考にしました。
src/pages/index.js と src/templates/blog-posts.js において、moment.js を以下のように読み込みます。

import moment from "moment"

次に記事の日付を表示している部分を以下のように変更します。

{
post.frontmatter.date
}

{
moment(post.frontmatter.date).format(`YYYY年MM月DD日 HH:mm`)
}

また、GraphQL の query 部分の formatString の表記を削除します。
この部分については、また整理して後で記事にしたいと思います。

export const pageQuery = graphql`
query {
site {
siteMetadata {
title
}
}
allMarkdownRemark(sort: { fields: [frontmatter___date], order: DESC }) {
nodes {
excerpt
fields {
slug
}
frontmatter {
date // 変更
title
description
tags
}
}
}
}
`

次に、フォントの変更をしました。
src/components/seo.js の return 内の<Helmet>内の末尾に、以下のように付け加えます。

{
name: `twitter:description`,
content: metaDescription,
},
].concat(meta)}
// ここから追加
link={[
{
rel: `preconnect`,
href: `https://fonts.googleapis.com`,
},
{
rel: `preconnect`,
href: `https://fonts.gstatic.com/`,
crossorigin: "",
},
{
rel: `stylesheet`,
href: `https://fonts.googleapis.com/css?family=Noto+Sans+JP:wght@400;700&display=swap`,
},
]}
// 追加ここまで
/>

これは以下と同じ意味です。

<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:wght@400;700&display=swap"
/>

フォントは Noto Sans JP を使っていて、font weight は 400 と 700 を用いています。
また、サイトパフォーマンスを改善させるため、preconnect を用いています。


さらに、以下のようなことをしました。
細かい手順は省略します。

  • 言語を ja に変更
  • トップページのタイトルがサイト名になるように変更
  • プロフィール画像の変更
  • 404 ページ・未投稿ページの変更
  • Copyright 表記の修正

サイトのカスタマイズ後

以上のカスタマイズを終えた後のサイトがこちらです。
だいぶ見栄えもよくなりました。
ただ、サイトのレイアウトはもう少し改善点があると思っています。
カスタマイズ後のサイト


終わりに

今回は初期設定やファビコン・記事投稿表示の改善・フォントの修正など、日本語用にサイトの修正を行いました。
次回は、タグ機能の実装方法を紹介したいと思います。