Gatsbyのプラグインとは?
2020年05月17日
プラグインとは?
Gatsbyプラグインは、Gatsby APIを実装してGatsbyサイトに追加機能を追加するNode.jsパッケージです。
例えば、以下のようなものがあります。
- build 時に GraphQL に外部データを追加したり
- ヘッドレス CMS から追加
gatsby-source-contentful - Shopify からショップデータを追加
gatsby-source-shopify - Tweet を検索し追加
gatsby-source-twitter
- ヘッドレス CMS から追加
- build 時に GraphQL に静的ファイルを追加したり
gatsby-source-filesystem - 取得したデータのフォーマットを JSON オブジェクトに変換したり
- サードパーティーのサービスをサイトに追加したり
- Google Analytic
gatsby-plugin-google-analytics - Web Font Loader
gatsby-plugin-web-font-loader
- Google Analytic
プラグインはスターターとは異なり、Gatsbyのデータレイヤーや他の構造的なサイトコードの機能をインストール可能なパーツにパッケージ化したものです。
よって、プラグインのコードが更新されればそれに応じてプラグインを使用しているサイトも更新されます。
対するスターターは始めのサイト構築時にソースコードを取り込み、それ以降スターターの更新は反映されません。
プラグインの使い方
プラグインはNode.jsパッケージなので、まずnpmを使ってインストールします。
例えば、ChakraUIというUIコンポーネントのライブラリをサポートするプラグインを入れてみましょう。
yarn add gatsby-plugin-chakra-ui @chakra-ui/core @emotion/core @emotion/styled emotion-theming
or
npm install gatsby-plugin-chakra-ui @chakra-ui/core @emotion/core @emotion/styled emotion-theming
次に、gatsby-config.js
ファイルのplugins配列にgatsby-plugin-chakra-ui
を追加するだけです。
module.exports = {plugins: [`gatsby-plugin-chakra-ui`],}
このようにオプションを渡すこともできます。
// gatsby-config.jsmodule.exports = {plugins: [{resolve: "gatsby-plugin-chakra-ui",options: {/*** @property {boolean} [isResettingCSS=true]* if false, this plugin will not use `<CSSReset />*/isResettingCSS: true,/*** @property {boolean} [isUsingColorMode=true]* if false, this plugin will not use <ColorModeProvider />*/isUsingColorMode: true,},},],};
ちなみにインストールされるパッケージはこちらです。
ソースコードは比較的シンプルで、gatsby-browser.js
とgatsby-ssr.js
の2ファイルで以下のようにwrapRootElememnt
APIを使うためにexportしていることがわかります。
import React from "react";import { ThemeProvider, ColorModeProvider, CSSReset } from "@chakra-ui/core";import theme from "./theme";export const wrapRootElement = ({ element },{ isResettingCSS = true, isUsingColorMode = true },) => (<ThemeProvider theme={theme}>{isResettingCSS && !isUsingColorMode && <CSSReset />}{isUsingColorMode ? (<ColorModeProvider>{isResettingCSS && <CSSReset />}{element}</ColorModeProvider>) : (element)}</ThemeProvider>);
export { wrapRootElement } from "./gatsby-browser";
このソースコードを見れば、オプションの指定によっての違いがわかりやすいですね。
ちなみにgatsby-browser.js
では、クライアント側でブラウザ内のアクションに反応したり、追加のコンポーネントでサイトをラップしたりすることができるAPIをexportし、
gatsby-ssr.js
では、サーバー側でGatsbyとNode.jsによってSSRされた静的なHTMLファイルを変更できるAPIをexportします。
このようにプラグインではGatsbyのコアAPIを使う設定がされており、それをサイトに反映できます。