【Gatsby.js】見出しにページ内リンクを設定するプラグイン「gatsby-remark-autolink-headers」

August 14, 2020

hタグにidを設定してページ内のリンクを生成する。これにより記事トップに「目次」などを設定してワンクリックでスクロールさせるなど可能に。

page_link

目次

ページ内リンクを設定したい

目次を設置するなどページ内のリンクで自動でスクロールしてくれる機能をつけたい。

それを簡単に実現してくれるのが

gatsby-remark-autolink-headersである。

5分もあれば十分設置できる。

公式

こちらはGatsby.js内のプラグインの解説サイト

gatsby-remark-autolink-headers | GatsbyJS

どういう時に使う?

目次などを設定するときに使うほか、他のサイトから参考リンクで飛んでくる時に

ジャンプしてすぐ目的の見出しまでスクロールしてくれる。

ユーザビリティを高めるプラグインだ。

インストール

npm install --save gatsby-remark-autolink-headers

gatsby.config.js設定

plugins配下に設定

  plugins: [
    {
      resolve: `gatsby-transformer-remark`,
      options: {
        plugins: [`gatsby-remark-autolink-headers`],
      },
    },
  ],

注意

gatsby-remark-prismjsを一緒に使う場合はprimjsよりも上にこちらのプラグインを記述すること!

公式で認知済みのissueがあるため

基本は以上

基本的にはここまでやれば使用可能。

特別なオプションを設定する必要はない。

オプション

設定できるオプションを列挙する。

未確認の物がおおいが、何かの参考になるかもしれないので私なりの翻訳で記述しておく。

offsetY

見出し左側に現れるリンクアイコンの高さを指定?ピクセル単位の整数。

数値を大きくすると下にズレる。

icon

アイコンを指定する。booleanでオンオフ。

自前のものを設定したい場合はここにsvgタグをそのまま入れる。

icon: `<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>`,

className

文字列を指定する。

アンカーに独自のクラス名を指定する。

className: `custom-class`,

maintainCase

booleanで指定する。マークダウンのヘッダーのケースを維持するらしい。

直訳のため「ケース」が何を指すのか不明。

maintainCase: true,

removeAccents

booleanで指定する。生成された見出しIDからアクセントを削除。

アルファベットの上に点が付いている一般的な「アクセント付き文字」を消去するのと同じ効果。

一部の環境依存を解消するオプションだろうか。

日本語サイトならまず考慮する必要は無いだろう。

removeAccents: true,

※テストしたところデフォルトはfalseのようでアクセントがそのままidになる。

isIconAfterHeader

booleanで指定する。

通常は見出しの左側にリンクアイコンが表示されるようになるが、右側に移動するオプション。

isIconAfterHeader: true,

elements

文字列の配列で指定する。

リンクを自動挿入するためのタグ一覧を記述する。

これはデフォルトで指定しなくてもhタグでヒットするので特別必要ないかと思うが

特殊なケースで有用かもしれない。

elements: [`h1`, `h4`],

v0.1にてclassNameに対応

2020-09-09追記

v0.1以降optionsでclassNameが指定できるようになった。

また0.0系からアップデートするときも関数などの変更はないのでメジャーアップデートして問題なかった。

className: "table-of-contents"

これにて目次の箇所がスタイリングできる。

さいごに

gatsby-remark-table-of-contents | GatsbyJS

こちらで「目次」の自動生成に対応するために今回のプラグインを導入した。

オプションに関して少し謎が残っているが基本的にはデフォルトで満足する結果が得られると思う。

実装するだけなら5分で完了するのでぜひともやっておきたい。

この記事をシェア:

author icon

仮想トイレ @CrypticToilet
プログラミングや仮想通貨のシステムトレードに関する情報を更新中!どんな情報を流しても詰まらないトイレ。