
Astroを使ってmicroCMSと連携したサービスを作ります。
microCMSは本格的に使う場合は有料ですが、小規模であれば、無料でも使えます。
STEP1
まずはmicroCMSの公式サイトの右上のログインボタンからログインします。

microCMSでまずはサービス作成します。
サービス名:任意
サービスID:任意

次にAPIを作成(自分で作成)
内容は任意の内容になります。

API名:任意
エンドポイント:任意
今回リスト形式で進めます。



エンドポイントはURLの一番最後に表示されます。こちらも任意の値に
なります。
次にAPIスキーマの定義をしていきます。
画面右上のAPI設定をクリックします。

API設定の中のAPIスキーマを選択してください。
入力値は任意です。
今回はフィールドID:title 表示名:タイトル
フィールド名:content 表示名:内容
とします。

画面右上の追加を押して記事の内容を書いていきましょう。
これで公開ボタンを押します。
ここで確認のための画面が必要になりますが、プレビュー画面は自分で作る必要があります。

AstroとmicroCMSの接続
そのための設定として、AstroとmicroCMSを接続していきます。
準備が2つ必要になります。
SDK AstroとmicroCMSをつなぐ中間のプログラムのようなものです。
・SDKのインストール
・src/library/microcms.tsに以下のコードを貼り付け
src/library/microcms.ts 表示内容
//SDK利用準備
import { createClient } from "microcms-js-sdk";
const client = createClient({
serviceDomain: import.meta.env.MICROCMS_SERVICE_DOMAIN,
apiKey: import.meta.env.MICROCMS_API_KEY,
});
//型定義
export type Blog = {
id: string;
createdAt: string;
updatedAt: string;
publishedAt: string;
revisedAt: string;
title: string;
content: string;
};
export type BlogResponse = {
totalCount: number;
offset: number;
limit: number;
contents: Blog[];
};
//APIの呼び出し
export const getBlogs = async (queries?: any) => {
return await client.get<BlogResponse>({ endpoint: "blogs", queries });
};
export const getBlogDetail = async (contentId: string, queries?: any) => {
return await client.getListDetail<Blog>({
endpoint: "blogs",
contentId,
queries,
});
};
接続にSDKというものが必要になるので、まずはインストールしていきます。
パワーシェルもしくはターミナルを開き、「npm install microcms-js-sdk」と
入力していきます。
次にsrcフォルダ内にlibraryフォルダを作成します。
(srcフォルダは一番上の階層 .gitignoreと同じ階層)
microcms.ts というファイルを作成
上のコードをmicrocms.tsにコピペ

.envファイルを作ります。
![]()
環境変数も.env内にコピペしていきましょう。
MICROCMS_SERVICE_DOMAIN=<YOUR_SERVICE> # .microcms.io は含まない値 MICROCMS_API_KEY=<YOUR_KEY_VALUE>
↓ 自分のmicroCMS情報に書き換え
アドレスの先頭のところ
![]()
こちらを MICROCMS_SERVICE_DOMAIN=0ka0hdimm3 のように入力する
microCMSの設定
次はAPIキーが必要になります。 microCMS歯車マークのとこクリック

ここのAPIキーをコピー

MICROCMS_API_KEY=ここにコピーした分を貼り付け
![]()
STEP2
ブログの一覧ページを作成する
src > pages > index.astro
HTMLとJavaScriptを書いていく
コードを書いてmicroCMSと接続していきます。
---
import { getBlogs } from '../library/microcms';
const response = await getBlogs({fields: ["id", "title"]});
---
パワーシェルまたはターミナルで「npm run dev」
とコマンドを打ち、動作確認をします。

ローカルにアクセスしてmicroCMS内の記事を表示確認します。
以下のようにmicroCMSの内容が表示されます。

STEP3
リンク先の詳細ページを表示する
記事の左上に表示されているコンテンツIDは変更も可能です。

変更したらこちらも自動で変わります。
![]()
しかし、このままだと記事の詳細を表示しようとするとエラーになりますのでmicroCMSと接続していきます。
汎用的な形にするため、ダイナミックルーティングしていきます。
ダイナミックルーティングとは動的なルーティングのことです。
src > pages > [blogId].astro
blogId.astroを作成します。 []内は任意となる

HTMLを記述 [blogId].astro
書式を変える 先頭から10文字切り取り
タグを表示しないようにする set:html={}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{blog.title}</title>
</head>
<body>
<h1>{blog.title}</h1>
<p class="publishedAt">公開日時:{blog.publishedAt.substring(0, 10)}</p>
<div set:html={blog.content} />
</body>
</html>
先頭にJSを記述 [blogId].astro
---
import { getBlogs, getBlogDetail } from '../library/microcms';
export async function getStaticPaths(){
const response = await getBlogs({ fields: ["id"] });
return response.contents.map((content) => ({
params: {
blogId: content.id
}
}));
}
const { blogId } = Astro.params;
const blog = await getBlogDetail(blogId);
---
これでエラーがなくなります。
ちなみにエンドポイントが違っているとエラーになります。
microcms.tsのエンドポイントの設定も確認しておきましょう。

※URLのnewblogの箇所がエンドポイント
![]()
これまでの記述を画面に表示させるため
パワーシェルもしくはターミナルを開き、「npm run dev」 で立ち上げ直して再度確認します。
すると、データが存在する分の詳細ページが表示される。

STEP4
ネットに公開する
ネットに公開するにはビルドする必要があります。
パワーシェルもしくはターミナルを開き、「npm run build」とします。
これでdistフォルダが出来上がります。

あとは、この中身をサーバにアップすれば通常のWebサイトのように表示されます。

