Gatsby.js × 最近話題のmicroCMS を連携させてみる

株式会社アクシスのアドベンチャーカレンダー19日目の@aokisinn1192です。

最近業務で使ったGatsby.jsとmicroCMSとFireBaswを使った構成が
来年流行りそうな気がするので今回はこちらのGatsby.jsとmicroCMSの連携方法を紹介しますー

Gatsby.jsとmicroCMSがそもそもなんなのかわからない人は以下の記事をみると
わかるようになると思います。

- https://qiita.com/hppRC/items/00739eaf9ae7fc95c1ca
- https://microcms.io/

# Gatsby.js インストール
```
npm install -g gatsby-cli
gatsby new gatsby-microCms-site
cd gatsby-microCms-site
gatsby develop
```
※ node.jsを事前に[インストール](https://nodejs.org/ja/)しておいてください 

最後のコマンドを実行後 http://localhost:8000 にアクセスして、
以下の画面が表示されればインストールとプロジェクトの作成は完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/bcd65ed3-b2b6-d5c9-99c5-d54307cd3932.png)

# microCMS
## アカウント登録 
[microCMS](https://microcms.io/)のページからアカウント登録をします。
アカウント登録までの流れは次の[ページ](https://microcms.io/blog/getting-started/)を参考にしてください

## サービス登録
1. アカウント登録後　サービス登録画面に遷移するので適当な値を入力して登録を済ませます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/a9959a0f-2021-475b-c3c5-dad3212cac16.png)
※ 入力後 プランの選択画面に遷移しますが無料プランを選択してください

2. サービスの登録が完了したら次のページが表示されるので、赤ワクの箇所をクリックして
登録したサービスのダッシュボードに行ってみましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/544f9b4d-0f7c-aaf1-1e3f-34494d4e05f5.png)

## Api登録
1. 登録したサービスのダッシュボードに遷移すると、今回使用するAPIの登録が可能になるので、
こちらも適当な値を入力して登録します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/e9a11f28-b056-d58c-aa6f-7d33e86b5fb9.png)

2. APIの型はリスト形式を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/5ee220bd-c80a-4b66-8292-7f96ebb754ed.png)

3. APIのスキーマを定義します。 ここでは、最低限Blogのコンテンツで必要なタイトルとコンテンツを定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/4c6c01c2-c1fb-5944-1847-4984527c39f7.png)

4. API登録が完了しました!　登録後はGatsby.jsと連携した時に表示するコンテンツを各自
右上の追加ボタンで登録をしときます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/dee93b5a-c76b-94d1-c849-a4c16f87bfd0.png)

登録後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/e647763f-cbfc-88c7-13d1-d72bea74d5ee.png)

# Gatsby.js * microCMS 連携
##  Gatsby.js のプロジェクトに戻り microCmsの連携に必要なプラグインをインストール

```
yarn add gatsby-source-microcms
```

## プロジェクトの設定ファイル(gatsby-config.js)にMicroCmsの接続情報を入力


``` 
module.exports = {
  siteMetadata: {
    title: `Gatsby Default Starter`,
    description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
    author: `@gatsbyjs`,
  },
  plugins: [
    `gatsby-plugin-react-helmet`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/images`,
      },
    },
    `gatsby-transformer-sharp`,
    `gatsby-plugin-sharp`,
    {
      resolve: `gatsby-plugin-manifest`,
      options: {
        name: `gatsby-starter-default`,
        short_name: `starter`,
        start_url: `/`,
        background_color: `#663399`,
        theme_color: `#663399`,
        display: `minimal-ui`,
        icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
      },
    },
    // ---------- microCms ----------  ここから
    {
      resolve: "gatsby-source-microcms",
      options: {
        apiKey: '{api_key}',
        serviceId: '{serviceId}',
        apis: [{
          endpoint: '{endpoint}',
          query: {
            limit: 100,
          },
        }],
      },
    },
    // ---------- microCms ---------- ここまで
  ],
}
```

{api_key}は、次の[ページ](https://microcms.io/docs/manual/api-request) をみて設定してください
{serviceId}と{endpoint}は、上で登録したサービスのidとApiのidです。

設定後

```
gatsby develop
```

を実行してBuildが完了されれば連携は完了です。

# microCMSで登録したコンテンツをページに表示してみる

gatsby-microCms-site/src/pages/ 配下に次の名前 blogList.js　という名前でファイルを作成

ファイルの内容を次のように変更

```
import React from "react"

export default ({ data }) => {
    console.log(data)
    return (<>
        <h1>blogList</h1>
        <ul className="blog_list">
            {data.allMicrocmsBlog.edges.map(({ node }) => {
                return (
                    <li>{node.title}</li>
                );
            })}
        </ul>
    </>
    )
}

export const query = graphql`
query {
    allMicrocmsBlog(filter: {}) {
        edges {
            node {
                id
                title
            }
        }
    }
  }
`;

```

変更後、
http://localhost:8000/blogList にアクセスしてmicroCMSで登録した内容が表示されていれば完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606623/f858ea3e-7b13-6f71-7ed8-b212f03b42c5.png)

# まとめ
かなりざっくり説明しましたが、Gatsby.jsとmicroCMSの連携方法とデータの表示方法がわかったと思います。
来年再来年あたり流行る気がするので、興味のある方はこれからも触ってみてください。

おすすめの書籍 : 　https://www.amazon.co.jp/dp/B088WJWJK9/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1