Gatsbyの公式ドキュメントには、MDXファイルから props 変数経由で frontmatter を参照できると書いてあります。

Frontmatter is also available in props.pageContext.frontmatter and can be accessed in blocks of JSX in your MDX document:

例えば、以下のように frontmatter で定義した titleprops.pageContext.frontmatter.title という形式で参照することができます。

---
title: Building with Gatsby
author: Jay Gatsby
---

<h1>{props.pageContext.frontmatter.title}</h1>
<span>{props.pageContext.frontmatter.author}</span>

(Blog post content, components, etc.)

ところが自分のページでは props の中身が空っぽ ({}) でした…

調査

ということで調べてみたらGitHub の Issueにこんなコメントを発見:

The guide you’re referring to refers to pages in src/pages. They automatically expose the frontmatter under pageContext.

However, it looks like you’re using a programmatically created page, so you’d need to pass the queried frontmatter directly into MDXRenderer to add it to the scope of MDX. It looks like that step is missing from the docs.

超意訳すると「src/page ディレクトリにMDXファイルがある場合は特に意識しなくても pageContext.frontmatter が使えるけど、そうじゃない場合は MDXRenderer に自分で追加してね。ドキュメントにはその辺書かれててないみたいだけど。てへ」ですかね。

確かにいま使ってる gatsby-starter-morning-dewsrc/page じゃない…。ということで、ソースで MDXRenderer を扱っている部分を探して frontmatter の設定を書き加えたら上手くいきました。

まとめ

今日は溺死寸前でした。

かわかみしんいち。島根県津和野町在住のフリーランスエンジニア。複合現実(Mixed Reality)と3DUXでおもちゃを作るのが趣味。 https://github.com/ototadana