microCMS+Next.js+Vercel+お名前.comで独自ドメインのブログを作る

# はじめに
個人ブログをある程度カスタマイズ性高く実現したい！と思ったので、勉強がてらmicroCMSを使ってみました。
各種SNSアカウントは一応持っていますが、今までの活動記録等をまとめていなかったのが制作背景にあります。

# microCMSとは

https://microcms.io/

> microCMSはAPIベースの日本製ヘッドレスCMSです。
> 快適な管理画面により、開発・運用コストを大きく削減することで、ビジネスを加速させます。

従来のCMS…例えばWordPressはフロントエンドとバックエンドが密結合でした。
PHPをベースにしているものの、WordPress独自の設定や書き方が多数存在し、コンテンツ管理のバックエンドと、コンテンツ表示のフロントエンドを分離することができませんでした。
また、全世界で最も使われているシステムであるがゆえに攻撃に最も晒されやすいCMSでもあり、WordPressやPHP、プラグイン等をセキュリティ対策でバージョンアップしていく際、オールインワンであるがゆえに管理が煩雑で運用コストがかかります。

microCMSはヘッドレスCMSであり、コンテンツ管理のバックエンド管理画面とAPIのみを提供します。
よってフロントエンドはNext.jsやアプリ等、自由な環境で開発が可能となります。
バックエンドはシンプルなAPIを提供しているにすぎず、基本的にフロントエンドのバージョン追従をしていけば良いです。

オールインワンでないためフロントエンドは自前で用意する必要があるのですが、ゼロから構築するのは大変！
と思いきや、microCMSテンプレートというサービスも存在するため、フロントエンドもテンプレートから簡単に作成可能です。

https://templates.microcms.io/

# テンプレートからの作成

microCMSへの登録方法は割愛します。
Hobbyプラン（無料）で開始できますが、2週間は上位プランのトライアルができます。
今回使うブログは **APIが3個と無料プランの範囲内なので、無料** で使い続けることができます。

テンプレートは以下を選択します。

https://templates.microcms.io/templates/detail/a530e59f-d66d-4b85-9ef5-4cf4288adb09

「このテンプレートを使用」ボタンを押して、GitHubリポジトリを作成します。

とりあえず名前はsimple-blogのように付けます。
![スクリーンショット 2025-03-08 10.17.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/43183e0c-7d91-493c-beab-5806dcd375f0.png)

作成が完了したらGitHubリポジトリに飛び、READMEの指示に従って動かします。

# ローカル環境での立ち上げ

リポジトリをcloneしてきます。sshキーの登録等は割愛します。

![スクリーンショット 2025-03-08 10.21.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/46bdd084-25f2-40c2-bcb9-c1e767682262.png)

```bash
$ git clone git@github.com:{YOUR_GITHUB_NAME}/simple-blog.git
Cloning into 'simple-blog'...
remote: Enumerating objects: 91, done.
remote: Counting objects: 100% (91/91), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 91 (delta 8), reused 63 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (91/91), 1.15 MiB | 1.33 MiB/s, done.
Resolving deltas: 100% (8/8), done.
```

cloneが終わったらディレクトリに移動してVSCodeで開きます。

```bash
$ cd simple-blog
$ code .
```

.envファイルを配置します。Credential情報なのでGit管理下に置かないように気を付けましょう。

```.env
MICROCMS_API_KEY=xxxxxxxxxx
MICROCMS_SERVICE_DOMAIN=xxxxxxxxxx
BASE_URL=http://localhost:3000
```

> `MICROCMS_API_KEY`
> microCMS 管理画面の「サービス設定 > API キー」から確認することができます。
>
> `MICROCMS_SERVICE_DOMAIN`
> microCMS 管理画面の URL（https://xxxxxxxx.microcms.io）の xxxxxxxx の部分です。

```bash
$ npm install
$ npm run dev
```

ページが立ち上がります。

![スクリーンショット 2025-03-08 10.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/00219389-4320-4415-b0a3-231fc72bcd11.png)

# コンテンツの登録

記事が無いとイメージが湧きづらいので、microCMSの管理画面からコンテンツを登録します。

- タグ
    - 自己紹介→公開
- ライター
    - 自分の情報を登録→公開
- ブログ
    - 自己紹介のテキストを入力→公開

コンテンツを登録すると、ブログ記事が追加されているはずです。
一覧が変わっているかと、記事ページや検索がちゃんと動くか試してみてください。
画面が変わらない場合はスーパーリロードを試してみてください。

![スクリーンショット 2025-03-08 10.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/8364cf1a-2c6e-460d-8bf7-62d676958f99.png)

# Vercelへのdeploy

ローカルで動くことが確認できたら、Vercelにdeployして本番環境を構築しましょう。
Vercelの登録方法は割愛します。

Vercelを開いたらリポジトリを連携します。
`Missing Git repository? Adjust GitHub App Permissions →`
のリンクからGitHubに飛び、simple-blogリポジトリを許可します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/9d616cdf-306c-4a95-bdd7-7a4d60183c00.png" width="500">

するとVercelで連携できるようになるので、Importを押します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/4caea87e-8c48-424d-9260-7f365c93fe6e.png" width="500">

値は以下のように選択します。デフォルトのままでOKのはずです。
環境変数として、.envファイルから以下2行をコピペします。ちなみに一気に2行イコールごとコピペすれば、いい感じに行列に分割して貼り付けしてくれます。

BASE_URLはdeployするとURLが決まるので、その後設定します。今は未登録でOKです。

```.env
MICROCMS_API_KEY=xxxxxxxxxx
MICROCMS_SERVICE_DOMAIN=xxxxxxxxxx
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/5cd40468-9077-41fa-9ce3-a0d4cbe2d24a.png" width="500">

無事にdeployが成功したらページを見てみましょう。
URLをコピーし、Settings→Environment VariablesにBASE_URLと、vercelの本番環境URLを貼り付けましょう。

こうなっていればOKです。
![スクリーンショット 2025-03-08 10.59.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/52ea9d6e-db0d-4c3a-ad48-31e9f6125e16.png)

# テキスト情報の調整

ブログのテキストを差し替えます。
ロゴやOGPは画像ですが、今回は割愛します。必要であれば画像も差し替えてください。

## ブログタイトルを変える

```diff:app/layout.tsx
 export const metadata = {
   metadataBase: new URL(process.env.BASE_URL || 'http://localhost:3000'),
-  title: 'Simple Blog',
-  description: 'A simple blog presented by microCMS',
+  title: 'サンプルブログだよ',
+  description: '説明入力する',
   openGraph: {
-    title: 'Simple Blog',
-    description: 'A simple blog presented by microCMS',
+    title: 'サンプルブログだよ',
+    description: '説明入力する',
     images: '/ogp.png',
   },
```

:::note warn
【既知の不具合】
トップページのmetadataがhtml上では反映されているのに、Vercel環境のURLをシェアしても反映されません
解決法ご存じの方いらっしゃったら教えてください
:::

## コピーライトを変える

```diff:components/Header/index.tsx
 export default function Footer() {
+  const currentYear = new Date().getFullYear();
   return (
     <footer className={styles.footer}>
-      <p className={styles.cr}>© SIMPLE. All Rights Reserved 2023</p>
+      <p className={styles.cr}>© {Your Name}. All Rights Reserved {currentYear}</p>
     </footer>
   );
-}
+}
```
※立ち上げ年のベタ書きでもOK

## 投稿日のフォーマットを変える

```diff:libs/utils.ts
 export const formatDate = (date: string) => {
   const utcDate = new Date(date);
   const jstDate = utcToZonedTime(utcDate, 'Asia/Tokyo');
-  return format(jstDate, 'd MMMM, yyyy');
+  return format(jstDate, 'yyyy/M/d');
 };
```

## Vercelに反映
ブランチを切ってPull Requestを作り、MergeをすればOKです。
Vercelのdeployが自動的に走ります。
反映されていればOKです。

# 独自ドメインの取得

お名前.comで独自ドメインを取得します。
レンタルサーバは不要なので外します。
オプションは自己責任でご判断ください。
とりあえず個人情報保護を考えるとWhois情報公開代行は付けた方が良いように思います。

https://www.onamae.com/

# 独自ドメインの設定
参考：[【Vercel】お名前.comで取得したドメインの設定方法](https://qiita.com/umekikazuya/items/684b0414e3a2b9865fa7)

Vercel管理画面でSettings→Domains→Add
www付きを無しにredirectする設定がRecommendされているので、それでOKです。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/c6fcd16e-f514-44e4-b4bc-186d924566cc.png" width="300">

お名前.comのドメインの管理画面に移動します。

https://www.onamae.com/domain/navi/dns_manage

DNSレコード設定ページに移動し、Vercelの画面を確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/7424089c-f050-471e-9da7-574707691473.png" width="300">

AレコードとCNAMEをコピペします。
CNAMEは末尾のピリオドを外して登録する必要があります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/648649af-5383-4213-94a8-3b9efdad12d5.png" width="300">

確認画面に進み、レコードの登録を終えます。
Vercelに移動し、ステータスのアラートが消えていればOKです。

![スクリーンショット 2025-03-08 11.58.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/4af0d1c7-7051-4f98-bb82-eec2f72d596b.png)

最後にSettings→Environment VariablesのBASE_URLを登録した独自ドメインに差し替えれば完了です。

# 終わりに
今回はデザイン調整等を加えていません。
必要に応じてデザイン変更や機能追加をしてみると良いと思います。

最後まで読んでいただきありがとうございまｓ