Zuruzuru Blog
🍜< ズルズル

March 09, 2022

Gatsbyで数種類のMarkdownを階層で使い分ける

#Gatsby
#React

Gatsby.js1でmarkdownをブログ以外のページのために使用したかった。 ただ、markdownのfrontmatterの部分の構造が違うので一緒のクエリの結果に含めたくなく2、クエリの条件かそれ以前の仕組みで分割したかった。 blogsフォルダに分けてmarkdownを置いてあるのでわざわざファイル名にblogとかそういう文字を含めて検索などはしたくもなかった。

GraphiQLのexplorerを眺めてたらfileAbsolutePath というのを見つけた。 これのfilterで正規表現の絞り込みができるregexをパラメータとして使えたのでこれでフォルダの階層を使って絞り込むことができた。

query BlogsQuery {
  allMdx(filter: {fileAbsolutePath: {regex: "/blogs/"}}) {
    nodes {
      frontmatter {
        title
      }
    }
  }
}

regex以外にも絞り込み条件があったけど今回のケースだとつかえなさそうだった。

/blogs/みたいに/も条件に入れておくと/blogs~みたいなmarkdownの時に誤って引っかかることがないので良さそう。

他にもconfigでmarkdownが置いてある各階層にラベルをつけるやり方もあるみたいだけどこっちの方が簡単なので採用。


  1. v3
  2. 構造が違うものの結果をフィルタするのが嫌だったということ。