見出し画像

Gatsbyでパンくずリストを作る

ウェブサイトの中でいろんなページを遷移している時に、ひとつ上の階層に移りたいと思うことがあります。

例えば、ブログ記事を読んだ後に、そのカテゴリーのページをもっと読みたいと思った時に、カテゴリーページに飛べると便利ですよね。

ところが、ヘッダーからはブログ記事一覧には行けるけれども、カテゴリーの記事がまとまったページには飛べないこともあるかもしれません。そうなると、行きたいページに辿り着くまでに、少しだけ手間が増えてしまいます。

そうしたことを解消するために、パンくずリストを作成することができます。

gatsby-plugin-breadcrumbをインストールする

Gatsbyでのパンくずリストの作成にはプラグインが使えるので、簡単に行えます。

gatsby-plugin-breadcrumbと呼ばれるプラグインをインストールしましょう。

npm install gatsby-plugin-breadcrumb

このプラグインを使うことで、2種類のリストを作成することができます。1つは[Click Tracking]です。これはユーザーが遷移してきたページを表示することができます。前のページに戻りたいときなんかには便利です。

もう1つが[AutoGen]です。これは自動生成されたパンくずリストになります。今回はこちらの実装を行います。

まずはgatsby-config.jsにプラグインを追加して初期設定を行います。

    {
     resolve: `gatsby-plugin-breadcrumb`,
     options: {
       useAutoGen: true,
       autoGenHomeLabel: `トップ`
    },
   }

先ほども言ったように[AutoGen]でパンくずリストを作成するので、オプションでAutoGenをTrueにします。 

 autoGenHomeLabelは一番上位のページに戻る時に使われる名前です。今回は"トップ"にしておきます。

後は実際にパンくずリストを表示させたいページに表示するようにします。

パンくずリストをGatsbyページに表示する

パンくずリストの効果がわかりやすいように、ブログの記事にパンくずリストをつけてみましょう。

# src/pages/blogs/{mdx.slug}.js

import * as React from 'react'
import Layout from '../../components//layout'
import { MDXRenderer } from 'gatsby-plugin-mdx'
import { graphql } from 'gatsby'

import { Breadcrumb } from 'gatsby-plugin-breadcrumb'

// Breadcrumbのデフォルトのデザイン
import 'gatsby-plugin-breadcrumb/gatsby-plugin-breadcrumb.css'

const BlogPost = ( { pageContext, data } ) => {

// pageContextからcrumbsを取り出す
 const {
   breadcrumb: { crumbs },
   } = pageContext

 return (
     <Layout pageTitle={data.mdx.frontmatter.title}>

       <Breadcrumb
       
       //crumbsはpageContextからとったものを渡すだけ
       crumbs={crumbs}
       
       //crumbSeparatorはリストの間に挟まれる文字列
       crumbSeparator=" > "
       
       //crumbLabelはこのページのパンくずリストに表示される文字列、デフォルトはページのslug
       crumbLabel={data.mdx.frontmatter.title}
       />
       
       <MDXRenderer>
         {data.mdx.body}
       </MDXRenderer>
     </Layout>
 )
}

export const query = graphql`
 query ($id: String) {
   mdx(id: {eq: $id}) {
     frontmatter {
       title
     }
     body
   }
 }
`

export default BlogPost

実際にブログ記事を表示させてみると、パンくずリストが追加されています。僕のサンプルサイトの場合、tutorialという階層が1つ余分にありますが、気にしないでください。

スクリーンショット 2021-11-15 22.35.23

…でも途中のページのパンくずがtutorialとblogsと日本語になっていませんよね。この場合、gatsby-config.jsで以下のようにcrumbLabelUpdatesでそれぞれのpathにcrumbLabelをつけることができます。

// http://localhost:8000/tutorial/blogs/blog10というアドレスの場合

    {
     resolve: `gatsby-plugin-breadcrumb`,
     options: {
       useAutoGen: true,
       autoGenHomeLabel: `トップ`,
       crumbLabelUpdates: [
         {
           pathname: '/tutorial',
           crumbLabel: 'チュートリアル'
         },
         {
           pathname: '/tutorial/blogs',
           crumbLabel: 'ブログ'
         },
      ],
   }
      

もしあなたのウェブサイトがsrc/pages/blogsというフォルダ構成になっているのであれば、pathname: '/blogs',を設定するだけで良いでしょう。

ローカル開発環境を再起動して、再度ブログ記事を表示されてみると、ブログとチュートリアルが日本語で表示されるようになりました。

スクリーンショット 2021-11-15 22.50.22

gatsby-plugin-breadcrumbのデザインを変更する

デフォルトのデザインを利用したくない場合は、自分でデザインをすることもできます。変更できるクラスは以下に一覧になっています。

"import 'gatsby-plugin-breadcrumb/gatsby-plugin-breadcrumb.css'"は消しておいて、新しくデザインを設定します。CSS-in-JSの使い方は以下の記事を参照してください。

import tw, { styled } from "twin.macro"

const BreadcrumbStyled = styled.div`
   nav .breadcrumb__link{
       ${tw`text-blue-500 underline`}
   }
`

そして作成していたBreadcrumbをこのタグで囲みます。

 <BreadcrumbStyled>
   <Breadcrumb
       crumbs={crumbs}
       crumbSeparator=" > "
       crumbLabel={"ぱんくず"}
   />
 </BreadcrumbStyled>

青文字に下線を引いたパンくずリストができました。

スクリーンショット 2021-11-15 22.52.18

階層に関係なくパンくずリストを作る

このパンくずリストは、自動的に作られたものです。でも、「途中にカテゴリ欄を付け足したい…」なんてことがあるかもしれません。

そんな時は、crumbsを自分で書いてしまえば、自由にリストを作ることができます。例えば、以下のようにcrumbsを定義して…

const crumbs = [
   {
   pathname: '/',
   crumbLabel: 'ホーム'
   },
   {
   pathname: '/tutorial',
   crumbLabel: 'チュートリアル'
   },
   {
   pathname: '/tutorial/blogs',
   crumbLabel: 'ブログ'
   }, 
   {
   pathname: '/tutorial/blogs/categories',
   crumbLabel: 'カテゴリ'
   }, 
   {
   pathname: '/tutorial/about',
   crumbLabel: 'about'
   }, 
]

Breadcrumb内のcrumbLabelを消しておきます。

<Breadcrumb
   crumbs={crumbs}
   crumbSeparator=" > "
/>

以下のように自作したパンくずリストが作られています。もちろん、ちゃんとそれぞれのリンクに飛ぶことができます。

スクリーンショット 2021-11-16 13.43.12

実装結果

まとめ

Gatsbyではプラグインを使えば、パンくずリストはすぐに作成することができます。


ここまで読んでいただけたなら、”スキ”ボタンを押していただけると励みになります!(*´ー`*)ワクワク



この記事が気に入ったらサポートをしてみませんか?