Gatsbyテーマをカスタマイズする

2020年05月22日

Gatsby サイトにテーマを使って機能を追加することはよくあります。
ただテーマはスターターとは違い、実装のコードはアプリ内にはなく npm でインストールします。

それではどのようにカスタマイズするのでしょうか?

テーマをカスタマイズする最も簡単な方法は、
テーマが提供しているオプションを指定することです。

たとえばgatsby-theme-blogというテーマでは、以下のようなオプションを指定できます。

KeyDefault valueDescription
basePath/ブログ記事のルート URL を指定できる
contentPathcontent/postsブログ記事ファイルを置くパスを指定
assetPathcontent/assetsアセットファイルを置くパスを指定
mdxOtherwiseConfiguredfalse既にgatsby-plugin-mdxがサイトで導入されていれば、trueを指定する
disableThemeUiStylingfalsegatsby-plugin-theme-uiスタイルなしでブログテーマを使用したい場合、trueを指定する
excerptLength140自動生成されるブログ記事の冒頭抜粋の長さ
webfontURL''含めたい Web フォントの URL

ただ、このようにオプションが提供してくれていないものをカスタマイズしたいことがよくあります。 そんなときは「シャドウイング」という方法を使います。

この記事ではシャドウイングについてご紹介します。

また、こちらの記事の続きです。

やりたいこと

Before

今回は BIO を変更したいと思います。

まずは前回の最後の状態。before を御覧ください。

bio before

名前が自分の名前ではないので自分の名前に変えたいのと、
かんたんな自己紹介もいれたいですね。

以下から実際のサイトとソースコードも確認できます。

Demoソースコード

After

名前の変更とかんたんな自己紹介を表示します。

bio after

以下から実際のサイトとソースコードも確認できます。

Demoソースコード

シャドウイング

シャドウイングは、テーマの src ディレクトリ内のコンポーネント、オブジェクト、その他のものを オーバーライドしてカスタマイズできる機能です。

実・装!!

今回、gatsby-theme-blogというテーマの 2 つのコンポーネントをシャドウイングします。

BioコンポーネントBioContentコンポーネントです。

シャドウイングするために、ファイルパスを把握します。

テーマ側のコンポーネントのパス
gatsby-theme-blog
└── src
└── components
├── bio.js
└── bio-content.js

これをシャドウイングするためには、自サイトに以下のパスで同名のファイルを作成します。

自サイトのコンポーネントのパス
src
└── gatsby-theme-blog
└── components
├── bio.js
└── bio-content.js

BioContent コンポーネントのシャドウイング

レンダリングする内容を、自分の名前とかんたんな自己紹介に変えます。

<>
{author}
<br />
ボディビル好きです。
<br />
好きなポージングは……ぜんぶです!
<br />
得意なポージングはアブドミナルアンドサイです💪
</>
テーマのbio-content.js全文
自サイトのbio-content.js全文

Bio コンポーネントのシャドウイング

BioContent コンポーネントで、gatsby-config.jsで設定した sitemetadat のauthorを使いたいので、
以下のようにauthorを渡すよう変更します。

- <BioContent />
+ <BioContent author={author} />
テーマのbio.js全文
自サイトのbio.js全文

🙌🙌

このように、オーバーライドしたいファイルを用意するだけなのでテーマは便利ですね!


岡本 侑貴@筋肉チョットデキル

岡本 侑貴@筋肉チョットデキル

筋肉バカ。筋トレしてコード書いて、毎日幸せに生きてる。ボディビルにドハマリ。2021年東京オープンボディビル選手権で最高の身体に仕上げてつよつよエンジニアになる!!