sukiburo.dev
Gatsbyで利用中のおすすめプラグインを全部紹介する

このサイトで使っているプラグインを紹介する。基本的に全てお勧めできる。随時更新。

なお、基本的にはこのサイトで採用している設定方法を載せる。全てのオプションは載せていないので注意してほしい。

プラグインの設定方法

プラグインはgatsby-config.jsに設定を記述する。記述場所はplugins内部である。

gatsby-config.js

module.exports = {
  ...
  plugins: [
    // ここの部分に記述する
  ]
}

また、これは任意だがサイトの名前とサイトのURLは多用するので、定義しておくことをお勧めする。

※下のコードは編集できる。<かっこ自体を消して>、各自の環境に合わせて編集し、コピーされたい。

gatsby-config.js(編集可)

const siteName = `<sukiburo.dev>`
const siteUrl = `<https://sukiburo.dev>`

そして、siteMetadataでこれを使う。

gatsby-config.js

...
siteMetadata: {
  ...
  siteName: `${siteName}`,
  siteUrl: `${siteUrl}`,
},

なお、今後はgatsby-config.jsJSと表記する。

(ほぼ)必須プラグイン

ほぼ必須と言えるプラグイン。ないと基本死ぬ。

gatsby-source-filesystem

設定をすることで、GraphiQLのallFIle/fileからアクセスできるようになる。基本インストール済みのはず。

設定

基本形はこのようになる。nameを設定することで、fieldsで分類できるようになる。

JS

{
  resolve: `gatsby-source-filesystem`,
  options: {
    path: `${__dirname}/content/blog`,
    name: `blog`,
  },
},

クエリの例である。blog内にあるファイルのみを抽出できる。

graphql

{
  allMdx(
    filter: {fields: {type: {eq: "blog"}}}
  ) {
    nodes {
      id
    }
  }
}

最適化

gatsby-plugin-preact

Reactの軽量版であるPreactを使えるようになる。まじで簡単に軽量化できるのでお勧め。

実際にParsed size(ユーザーが実際にダウンロードするサイズ)を見比べて欲しい。もちろん前後で変えたのはPreactを導入したことだけである。

Reactのサイズ

126.91kb

Preactのサイズ

21.28kb

どうだろうか、サイズが1/6になっている。導入しないなんてもったいない。

インストール

BASH

npm install gatsby-plugin-preact preact preact-render-to-string

設定

JS

`gatsby-plugin-preact`,

これだけで終わる。

gatsby-plugin-preload-fonts

外部フォントを読み込んでいる人には強くお勧めするプラグイン。ページごとに使うフォントを先読みしてくれる。

インストール

BASH

npm install gatsby-plugin-preload-fonts

設定

JS

`gatsby-plugin-preload-fonts`,

package.jsonに追記をする。scriptsの一番先頭に記述をする。

package.json

{
  ...
  "scripts": {
    "preload-fonts": "gatsby-preload-fonts",
    ...
  }
}

使い方

Gatsbyを起動しているときに、別タブでBASHを開き、下のコマンドを入力する。

BASH

npm run preload-fonts
出力結果

このような出力が出る。

すると、font-preload-cache.jsonというファイルがルートディレクトリに作成される。これでOK。

SEO

Lighthouseで100点を取れるので、プラグイン選定には自信がある。

下の8つのプラグインとSEOコンポーネントを設定すればGoogleに愛されるサイトが出来上がる。

コードを編集可能にしているものは、適宜環境に合わせて変更して欲しい。

なお、👆プラグインの設定方法で述べたように、siteName/siteUrlを定義した方が設定は楽になる。

gatsby-plugin-canonical-urls

検索エンジンに正しいURL(http/https・wwwありなし)を伝えられる。

インストール

BASH

npm install gatsby-plugin-canonical-urls

設定

JS(編集可)

{
  resolve: `gatsby-plugin-canonical-urls`,
  options: {
    siteUrl: `${siteUrl}`,
    stripQueryString: true,
  },
},

gatsby-plugin-google-gtag

gtagを挿入してくれる。gatsby-plugin-google-analyticsの代わりに使っている。

タグを複数埋めることができる。

インストール

BASH

npm install gatsby-plugin-google-gtag

設定

JS(編集可)

{
  resolve: `gatsby-plugin-google-gtag`,
  options: {
    trackingIds: [
      "G-XXXXXXXXXX", // Google Analytics / GA,
      `UA-XXXXXXXXX-X`,
    ],
    pluginConfig: {
      head: true,
    },
  },
},

そもそも非同期で読み込まれるので、headで読み込んだ方が良い。

gatsby-plugin-offline

サイトをオフラインで動作させたり、ネットワーク接続不良に対する耐性を高めてくれる。

インストール

BASH

npm install gatsby-plugin-offline

設定

JS

`gatsby-plugin-offline`,

gatsby-plugin-manifest

PWA化してくれる。gatsby-plugin-offlineと併用する。

インストール

BASH

npm install gatsby-plugin-manifest

設定

JS(編集可)

{
  resolve: `gatsby-plugin-manifest`,
  options: {
    name: `${siteName}`,
    short_name: `${siteName}`,
    start_url: `/`,
    background_color: `rgb(230,235,245)`,
    theme_color: `#2196f3`,
    display: `minimal-ui`,
    icon: `static/images/icon/icon.png`,
    icon_options: {
      purpose: `any maskable`,
    },
    icons: [
      {
        src: `static/images/icon/icon-512x512.png`,
        sizes: `512x512`,
        type: `image/png`,
      },
      {
        src: `static/images/icon/icon-256x256.png`,
        sizes: `256x256`,
        type: `image/png`,
      },
    ],
  },
},

このサイトの設定をそのままのせた。色や画像のパスを変更して欲しい。

また、このサイトではアイコンを1000×1000・512×512・256×256の3種類を準備している。

gatsby-plugin-robots-txt

robots.txtを作成してくれる。

インストール

BASH

npm install gatsby-plugin-robots-txt

設定

JS(編集可)

{
  resolve: 'gatsby-plugin-robots-txt',
  options: {
    host: `${siteUrl}`,
    sitemap: `${siteUrl}/sitemap.xml`,
  }
},

とりあえずHOSTとSITEMAPを設定すれば問題ない。

gatsby-plugin-react-helmet

コードをheadに挿入してくれる。主にSEOコンポーネントで使う。

インストール

BASH

npm install gatsby-plugin-react-helmet react-helmet

設定

JS

`gatsby-plugin-react-helmet`,

gatsby-plugin-sitemap

サイトマップを作成してくれる。このブログでは採用せず、自作プログラムを使っている。

インストール

BASH

npm install gatsby-plugin-sitemap

設定

JS

...
siteMetadata: {
  siteUrl: `https://www.example.com`,
},
plugins: [
  `gatsby-plugin-sitemap`,
]
...

siteUrlを設定しておく必要がある。

gatsby-plugin-feed-mdx

gatsby-plugin-feedのmdxバージョン。設定は公式通りでいい?はず。(少し心配)

インストール

BASH

npm install gatsby-plugin-feed-mdx

設定

JS(編集可)

{
  resolve: `gatsby-plugin-feed-mdx`,
  options: {
    query: `
      {
        site {
          siteMetadata {
            title
            description
            siteUrl
            site_url: siteUrl
          }
        }
      }
    `,
    feeds: [
      {
        serialize: ({ query: { site, allMdx } }) => {
          return allMdx.edges.map(edge => {
            return Object.assign({}, edge.node.frontmatter, {
              description: edge.node.excerpt,
              date: edge.node.frontmatter.date,
              url: site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,
              guid: site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,
              custom_elements: [{ "content:encoded": edge.node.html }]
            });
          });
        },
        query: `
          {
            allMdx(
              sort: { order: DESC, fields: [frontmatter___date] },
            ) {
              edges {
                node {
                  excerpt
                  html
                  fields { 
                    slug
                  }
                  frontmatter {
                    title
                    date
                  }
                }
              }
            }
          }
        `,
        output: "/rss.xml",
        title: `${siteName}`,
        match: "^/blog/"
      },
    ],
  },
},

公式の設定とほとんど差はない。

画像

以下の2つは何も考えずに設定すれば大丈夫。

基本的に👇gatsby-remark-imagesに必要なプラグインと思えばいい。

gatsby-plugin-sharp

裏で画像処理をしてくれる。インストール・設定は下でしている。

gatsby-transformer-sharp

ImageSharpノードを作ってくれる。

インストール

BASH

npm install gatsby-transformer-sharp gatsby-plugin-sharp

設定

JS

`gatsby-plugin-sharp`,
`gatsby-transformer-sharp`,

スタイル関係

gatsby-plugin-styled-components

コードのスタイルをコンポーネントごとに適用できる。とっても便利。

インストール

BASH

npm install gatsby-plugin-styled-components styled-components babel-plugin-styled-components

設定

JS

`gatsby-plugin-styled-components`,

使い方

×
-
+

XXX.js

import styled from "styled-components"

const Main = styled.div`
  margin: 30px;
`

const XXX = () => {
  return (
    <Main>
      ...
    </Main>
  )
}

export default XXX

この場合、<Main>...</Main>に対してmargin: 30px;が適応される。

gatsby-plugin-sass

sassが使えるようになる。ちなみにStyled Components内でも使える。

インストール

BASH

npm install node-sass gatsby-plugin-sass

設定

JS

`gatsby-plugin-sass`,

便利ツール

入れると便利なツール。

gatsby-plugin-remove-console

console.*をビルト時に消してくれる。

インストール

BASH

npm install gatsby-plugin-remove-console && npm install babel-plugin-transform-remove-console --save-dev

設定

JS

`gatsby-plugin-remove-console`,

gatsby-plugin-alias-imports

エイリアスを使えるようになり、パスを無駄に書く必要がなくなる。幸せになりたい人は入れよう。

×
-
+

XXX.js

// 導入前
import '../../components/navbar.js'
// 導入後
import '@components/navbar'

公式の例を示した。スラッシュ地獄から抜けられる。

インストール

BASH

npm install gatsby-plugin-alias-imports

設定

JS(編集可)

{
  resolve: `gatsby-plugin-alias-imports`,
  options: {
    alias: {
      "@content": "content",
      "@blog": "content/blog",
      "@src": "src",
      "@components": "src/components",
      "@functions": "src/components/functions",
      "@affiliate": "src/components/affiliate",
      "@amzn": "src/components/affiliate/amzn",
      "@styles": "src/styles",
      "@templates": "src/templates",
      "@static": "static",
      "@images": "static/images",
      "@svg": "static/images/svg",
    },
    extensions: [`js`],
  }
},

このブログで使っている一部を抜粋した。blogとcomponentsには設定した方がいい。

gatsby-plugin-webpack-bundle-analyser-v2

バンドルコンテンツの分析ツール。このプラグインを使って無駄なコードを見つけよう。

gatsby-plugin-webpack-bundle-analyser-v2

このような出力をしてくれる。なかなか便利だと思う。

インストール

BASH

npm install gatsby-plugin-webpack-bundle-analyser-v2 -D

設定

JS

`gatsby-plugin-webpack-bundle-analyser-v2`,

ビルト時に結果をブラウザに表示してくれる。

MD(MDX)

基本プラグイン

次のいずれかのプラグインを使うことになると思う。

以下の記事をみて、同じようなことをしたいと思ったらMDXを使えるgatsby-plugin-mdxを使用することをお勧めする。

gatsby-transformer-remark

MDをうまいこと変換してくれる。

インストール

BASH

npm install gatsby-transformer-remark

設定

JS

{
  resolve: `gatsby-transformer-remark`,
  options: {
    plugins: [
      // 今後のプラグインはここに記述する。
    ],
  },
},

gatsby-plugin-mdx

MDXが使えるようになる。MDXを使うなら必須。

インストール

BASH

npm install gatsby-plugin-mdx

BASH

npm install remark-unwrap-images remark-emoji

上に記述したプラグインは入れることを個人的に推奨するプラグイン。なくてもいい。

設定

JS(編集可)

{
  resolve: `gatsby-plugin-mdx`,
  options: {
    extensions: ['.mdx', '.md'],
    plugins: [
      // gatsby-remark-imagesを使う場合はここにも記述
      `gatsby-remark-images`,
    ],
    remarkPlugins: [
      // インストールしない場合は削除
      // md(mdx)内でイメージをwrapしない
      // ref: https://github.com/gatsbyjs/gatsby/issues/16239#issuecomment-594516446  
      require('remark-unwrap-images'),
      // ex: :hand: → ✋
      require(`remark-emoji`),
    ],
    gatsbyRemarkPlugins: [
      // 今後のプラグインはここに記述する。
    ],
  },
},

なお、今後のプラグインはgatsbyRemarkPlugins内に記述する。

自動で見出しにリンクをつけてくれる。目次を作るなら入れるべき。

インストール

BASH

npm install gatsby-remark-autolink-headers

設定

JS(編集可)

{
  // prismjsより前に記述
  resolve: `gatsby-remark-autolink-headers`,
  options: {
    icon: false
  },
},

アイコンはデザインが崩れるため使っていない。

リンク切れをコンソールで教えてくれる。

インストール

BASH

npm install gatsby-remark-check-links

設定

JS

// gatsby-remark-autolink-headersより後に記述
'gatsby-remark-check-links',

外部リンクを別タブで開いてくれる。

インストール

BASH

npm install gatsby-remark-external-links

設定

JS

`gatsby-remark-external-links`,

gatsby-remark-prismjs

コードのハイライトができる。

インストール

BASH

npm install gatsby-remark-prismjs

設定

JS(編集可)

{
  resolve: `gatsby-remark-prismjs`,
  options: {
    classPrefix: `language-`,
    inlineCodeMarker: null,
    aliases: {},
    // showLineNumbers: true,
    noInlineHighlight: false,
  }
},

使いたいテーマをgatsby-browser.jsで読み込む必要がある。このブログはprism-okaidia.cssをベースに手を加えている。

gatsby-browser.js

require("prismjs/themes/prism-solarizedlight.css")

他のテーマや設定などは公式サイトを確認して欲しい。

gatsby-remark-copy-linked-files

マークダウンフィルにリンクしているローカルファイルをルートディレクトリにコピーしてくれる。あんま使っていない気がする。

インストール

BASH

npm install gatsby-remark-copy-linked-files

設定

JS

{
  resolve: `gatsby-remark-copy-linked-files`,
  options: {
    destinationDir: `static/assets`,
    ignoreFileExtensions: [`png`, `jpg`, `jpeg`],
  },
},

gatsby-remark-images

MD内で画像を表示するときに必要。

先に👆画像セクションで述べたように、gatsby-plugin-sharpgatsby-transformer-sharpが必要になる。

また、👆先に示したように、MDXの場合は、pluginsにも入れるのを忘れないようにしたい。

インストール

BASH

npm install gatsby-remark-images

設定

JS

{
  resolve: `gatsby-remark-images`,
  options: {
    linkImagesToOriginal: false,
    maxWidth: 1350,
    withWebp: true,
  },
},

gatsby-remark-images-medium-zoom

画像をクリックするとアップにして表示しれくれる。

hero画像です

画像をタッチするとズームします。

インストール

BASH

npm install gatsby-remark-images-medium-zoom

設定

JS

`gatsby-remark-images-medium-zoom`

gatsby-remark-grid-tables

tableをいい感じに描けるようにしてくれる。なお、中身がpタグで括られるのでデザインに注意。

+-------+------------+--------+
| 12345 | こんにちは | こここ |
+=======+============+========+
| ここ1 | HelloHelloHelloHello | 
+-------+------------+--------+
| 18文字ぶん入れる | 紅魔館 |
+-------+------------+        +
| 18文字ぶん入れる |        |
+-------+------------+--------+

12345

こんにちは

こここ

ここ1

HelloHelloHelloHello

18文字ぶん入れる

紅魔館

18文字ぶん入れる

インストール

BASH

npm install gatsby-remark-grid-tables

設定

JS

`gatsby-remark-grid-tables`

gatsby-remark-responsive-iframe

iframeをレスポンシブ対応にしてくれる。

インストール

BASH

npm install gatsby-remark-responsive-iframe

設定

JS

{
  // responsive iframe
  resolve: `gatsby-remark-responsive-iframe`,
  options: {
    wrapperStyle: `margin-bottom: 1.0725rem`,
  },
},

gatsby-remark-smartypants

“Dumb”な引用符(真っ直ぐ)を”Smart”な引用符(カールした)に変えてくれる。(直訳

インストール

BASH

npm install gatsby-remark-smartypants

設定

JS

`gatsby-remark-smartypants`,

gatsby-remark-custom-blocks

スタイルを適用したブロックを作れる。例えばこんな感じ

[[emphasis]]
| MDXを使わなくても使える。便利。

MDXを使わなくても使える。便利。

インストール

BASH

npm install gatsby-remark-custom-blocks

設定

JS

{
  resolve: `gatsby-remark-custom-blocks`,
  options: {
    blocks: {
      danger: {
        classes: `danger`,
        title: `optional`,
      },
    },
  },
},

CSS(編集可)

.custom-block {
  margin: 60px 0 30px;
  padding: 20px 25px;
  border-radius: 5px;
}

.custom-block-heading {
  position: relative;
  font-size: 1.2em;
  font-weight: 600;
  line-height: 1.2em;
  ::before {
    position: absolute;
    display: inline-block;
    top: 0;
    left: 0;
    font-size: 1.2em;
  }
}

.custom-block-body {
  margin: 10px 0 0;
  p {
    margin: 0;
    font-size: 0.95em;
  }
}

/* classesで設定した名前 */
.danger {
  background: ${({ theme }) => theme.error.background};
  .custom-block-heading {
    color: ${({ theme }) => theme.error.mark};
  }
  .custom-block-body {
    p {
      color: ${({ theme }) => theme.error.text};
    }
  }
}

当サイトのdangerブロックの例を示した。色の部分は各自変更して欲しい。

危険

こんな感じのデザインになる。

デザイン例はMDデザインのページをみて欲しい。

更なる詳しい設定方法は公式サイトをご覧いただきたい。

最後に

以上が私が使っているプラグインである。利用できそうなブラグインがあったら適宜更新し、共有しようと思う。

関連記事

コメント