# 3.microCMSを使ってコンテンツを管理する
# 概要
- 前章ではQiitaのAPIからコンテンツを取得し表示していました
- ですが、実際にJamstackなアプリを開発する場合はコンテンツも自前で用意することが多いでしょう
- この章ではコンテンツを管理しAPIとして公開できるHeadlessCMSを使ってみます
- HeadlessCMSと呼ばれるサービスは世の中に数多くありますが今回はmicroCMSを使います
# ゴール
- microCMSを使ってコンテンツをAPI公開する
- JamstackなアプリでmicroCMSからデータを取得し表示する
- microCMSのデータ更新をトリガーに自動でビルド/デプロイを実行させてWebページを最新化する

# 3-1.microCMSのセットアップ
# アカウント作成
- まずはmicroCMSのアカウント登録をします
- 以下のページにアクセスしてアカウントを作成してください
- https://microcms.io/

# ブログサービスを作成
- タイトルと本文の項目を持ったブログサービスを作ります

# ブログサービスにデータを追加
- サンプルのブログ記事を作成しておきます

# ブログサービスのAPI情報を確認
- ブログサービスのAPI情報を確認しレスポンスの構造を確認します

# 3-2.microCMSからデータを取得する
- 前章のNext.jsで作成したアプリを改修していきます
- 通信先を変更するため
api/qiitaApi.jsを修正します- アクセス先がQiitaじゃなくなるためファイル名が不適切ですが気にせず進めます
import fetch from 'node-fetch';
// microCMSで作成した自身のAPIのURLに変更
const baseUrl = 'https://xxxxxxxxxxx.microcms.io/api/v1';
const headers = {
// APIキーを設定
'X-API-KEY': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
};
export async function getItems() {
const res = await fetch(`${baseUrl}/items`, { headers });
return res.json();
}
export async function getItem({ id }) {
const res = await fetch(`${baseUrl}/items/${id}`, { headers });
return res.json();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- QiitaのAPIとmicroCMSのAPIではレスポンスのデータ構造が異なるのでmicroCMS仕様に修正します
pages/items/index.jsのgetStaticProps内を修正
import Link from 'next/link';
import { Container, ListGroup } from 'react-bootstrap';
import { getItems } from '../../api/qiitaApi';
function Items({ items }) {
return (
<Container>
<h1>Hello</h1>
<ListGroup>
{items.map(item => (
<Link key={item.id} href="/items/[id]" as={`/items/${item.id}`}>
<ListGroup.Item action>{item.title}</ListGroup.Item>
</Link>
))}
</ListGroup>
</Container>
);
}
export async function getStaticProps() {
const data = await getItems();
// data.map を data.contents.map に修正
const items = data.contents.map(item => ({ id: item.id, title: item.title }));
return { props: { items } };
}
export default Items;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pages/items/[id].jsのgetStaticPropsとgetStaticPathsを修正
import { Container } from 'react-bootstrap';
import { getItem, getItems } from '../../api/qiitaApi';
function Item({ item }) {
return (
<Container>
<h1>{item.title}</h1>
<hr />
<div dangerouslySetInnerHTML={{ __html: item.body }}></div>
</Container>
);
}
export async function getStaticProps({ params }) {
const data = await getItem({ id: params.id });
// rendered_body を body に修正
const item = { id: data.id, title: data.title, body: data.body };
return { props: { item } };
}
export async function getStaticPaths() {
const data = await getItems();
// data.map を data.contents.map に修正
const paths = data.contents.map(item => `/items/${item.id}`);
return { paths, fallback: false };
}
export default Item;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- アプリにアクセスして確認してみましょう
- アプリを停止してしまった人は
yarn devで起動しましょう
- アプリを停止してしまった人は
- うまくいっていればmicroCMSに登録した記事が表示されているはずです

- 最新版をnowにデプロイしましょう
now --prod
1
- これでローカルで表示していたページを公開することができました
# 3-3.microCMSのデータ追加をトリガーに再デプロイする
- 前節でmicroCMS化対応は完了しました
- ですが、コンテンツのデータはビルド時に取得するためmicroCMS上でブログ記事を追加したら再ビルド/デプロイを実行する必要があります
- 毎回手動で叩くのは面倒なので自動化してしまいましょう
# GitHubにソースをアップロード
- ビルド/デプロイを自動化するためにはソースコードをネット上にあげておく必要があります
- GitHubにリポジトリを作成しアップロードしましょう
- 以下のURLから作成します

- gitコマンドを使ってアップロードします
TIP
gitコマンドが入っていない人は公式サイトからダウンロードしてください
# URL部分はコピーしたものを貼り付け
git remote add origin https://github.com/xxxx/jamstack-sample.git
git add .
git commit -m "Jamstackハンズオン"
git push origin master
1
2
3
4
5
2
3
4
5
- 最後のコマンドでGitHub上にアップロードされます
- ID/パスワードを求められたら適宜入力してください
- GitHubのページに戻りリロードするとアップロードできていることを確認できます

# nowとGitHubを連携する
- デプロイ先のnowと先程作成したGitHubのリポジトリを連動させます
- nowのダッシュボードにアクセスしてください
- これまでnowコマンドでデプロイしていたアプリが表示されています

- 次の手順はこの画面からスタートするので閉じずにそのまま残しておいてください
# microCMSの更新をnowのトリガーに設定する
- 最後にmicroCMSのコンテンツが更新された時に自動でnowに再ビルド/デプロイされるようにします
- nowでビルド/デプロイを実行させるURLを発行します

- コピーしたURLをmicroCMSに登録します

- これで設定が完了しました
# 3-4.動作確認
- microCMSで記事を追加してみましょう

- nowのダッシュボードに戻ってしばらくすると黄色いビルド中のステータスに変更されるはずです

- ビルド/デプロイが完了すると緑のステータスに戻ります
- 完了したらWebページに再度アクセスしてみましょう

- コンテンツが最新化されていることを確認できました!

# まとめ
- microCMSを使ってコンテンツの管理しAPIとして公開する方法を学びました
- GitHub、now、microCMSを連動させてコンテンツを更新すると自動でビルドデプロイされる仕組みを構築しました
- 本番システムとしての使用例も多くある構成なのでJamstackなアプリを作りたくなったらこの構成を試してみてください