りゅーそう
元高校地歴科教員。現在microCMSでエンジニアをしています。
Saitama.jsというLT会を運営中です。
発言はすべて個人の意見です。
now
nextjs
microcms
2020/03/04
2022/01/23
こんにちは。
当サイトはプロダクトをデプロイするのにnowを使用しています。
今回はNext.js×microCMSで作成したプロダクトを実際にnowでデプロイする際の手順を解説していこうと思います。
Next.jsの開発も行なっているZEITが開発をしているサーバーレスなクラウドプラットフォームです。最低限だとターミナルでnowと入力するだけでデプロイをすることができます。その手軽さが大変魅力です。
ホスティングに設定・監視などを必要としません。
Jamstackなどの静的サイト・サーバーレスなWebサービスに主に使用されています。
ドキュメントは以下になります。
now docs
Next.jsで作成したプロジェクトがあることを前提に話を進めます。Next.jsでなくてもnowは使用できますが、ZEITが開発してあるだけあってNext.jsとの相性がとても良いです。
当ブログはCMSはmicroCMSを利用していますが、特に指定はありません。
Next.js microCMSという構成でのJamstackなサイトのデプロイを実際に行なっていきたいと思います。
プロダクトがない方はぜひ、私が以前に書いたブログでプロダクトを開始してみて下さい。
またnowのアカウントを作成しておいてください。
now
envファイルにmicroCMSのkeyを設定しましょう。GETメソッドにはAPI_KEY,POSTメソッドを使用している場合はX_API_KEYが必要です。値はmicroCMSの管理画面から確認して下さい(例の値は架空のものです)。
[.env]
API_KEY=abcdefg-12345-98765
X_API_KEY=gfedcba-54321-12345
.gitignoreを忘れずに!.envファイルのあたいの扱いは当サイトではdotenvを利用しています。
Next.jsには静的なHTMLを各ルーティングにexportし、exportすることができます。その設定を行いましょう。
next.config.jsファイルに設定を行います。
const axios = require('axios');
require('dotenv').config();
module.exports = {
exportPathMap: async function() {
//作成したルーティングをpathに設定して下さい。
const paths = {
'/': { page: '/' },
'/contact': { page: '/contact' },
'/work': { page: '/work' },
'/success': { page: '/success' },
};
const key = {
headers: {
'Content-Type': 'application/json',
'X-API-KEY': process.env.API_KEY,
},
};
const res = await axios.get(
`https://ryusou-mtkh.microcms.io/api/v1/posts/`,
key,
);
const data = await res.data.contents;
//postで作成した動的なページはqueryを取得して、ルーティングを配置します。
data.forEach(post => {
paths[`/posts/${post.id}`] = {
page: '/posts/[id]',
query: { id: post.id },
};
});
return paths;
},
env: {
api_key: process.env.API_KEY,
x_api_key: process.env.X_API_KEY,
},
};
npmscriptに以下のコマンドを設定
"scripts": {
"export": "yarn run build && next export",
},
next export でStatic HTML exportを行うことができます。exportの設定はnext.config.jsに基づきます。
yarn export
out/ディレクトリが作成されていれば成功です。
nowのデプロイの設定を行います。
now.jsonを作成して設定していきましょう。設定についてはドキュメントをご覧ください。now.json docs
{
"build": {
"env": {
"API_KEY": "@api_key",
"X_API_KEY": "@x_api_key"
}
}
}
以下のコマンドをターミナルで入力して設定します。
now secrets add API_KEY abcdefg-12345-98765
now secrets add X_API_KEY gfedcba-54321-12345
(値は先ほど使用した架空のものです。)
以上で設定は完了しました。
あとはnow devと入力すればデプロイ完了です。now --prodで後ほど設定するドメインでデプロイをすることも可能です。
先ほど作成したプロダクトをGitHubにpushしてください。GitHubのリポジトリとnowの設定を行います。
アカウント < Overview < Import Product < From Git Repository < Import project from GitHub
から先ほど作成したリポジトリを選択して取り込んでください。
設定はOUTPUT DIRECTORYを out/に変更しておきます。そのほかはdefaultで大丈夫です。
・Import Productをクリック
・From Git Repositoryをクリック(Gitでプロジェクトを管理している場合
・作成したプロダクトを選択
・設定はデフォルトでOK。OUTPUTDIRECTORYは先ほどexportしたoutにしておきましょう
これでGitHubのリポジトリとnowのProductが紐づけられました。
以降はmasterブランチにpushされるか、ターミナルコマンドでnow --prodを入力することでデプロイを行うことができます。
またnowのプロダクトページのsetting < Domainから自身のDomainを設定することもできます。(.now.shなら無料。Custom Domainを設定することも可能)
OptionとしてmicroCMSとnowのプロダクトの設定を行います。
今回はmicroCMSでコンテンツを更新したら、nowで自動デプロイをするように設定をしたいと思います。
nowのProductページからProject Settingのページに行って下にスクロールするとDeploy hooksを設定する項目があります。
Create Hooksで作成しましょう。
名前はわかりやすければなんでも構いません。また、GitBranchNameはmasterを入力しておきましょう。
・ProductのSettingをクリック
・下にスクロールするとCreateHookがあります。今回はGitは関係ないので、テキトーにmasterとかでOK
nowと紐づけたいコンテンツ < API設定 < Webhook < カスタム通知
に先ほど作成したhooksを貼り付けます。そして変更をクリックしましょう。
以上です。
簡単ですね。
これで、コンテンツが更新されると、それに連動してnowでも更新されるようになりました。microCMSのカスタム通知については以下のブログをご覧ください。
microCMS CustomWebhook
nowはサーバーレスでとても簡単でmicroCMSとの連動もとてもやりやすかった。ぜひ、ご自身の好きなライブラリ・CMSと組み合わせて試してみてください。
Create Next.js App with Contentful
他にも色々な例が乗っているので、試してみてください。(microCMSの例を載せたいなあ。。。)
microCMS Blog
microCMSさんの公式ブログです。
Next.js + microCMS + NetlifyでJAMstackな世界に入門する
かみむらさんの記事にいつも助けられています。