888 words
4 minutes
知識ゼロから始めるAstroブログ構築(2) ~Astroでとりあえず記事とインデックスページを表示させる~

Astroで最小構成の状態で、まずは記事と記事一覧のページが表示されるように設定していきます。 まずは動くことを目標に、デザインなどは特段ない状態でやっていきます。

astroで最低限、記事と記事一覧ページが表示されるように設定#

astroのconfig.tsを設定#

VS Codeでastroをインストールしたフォルダを開きます。

vscodeで開いた様子

srcフォルダの中に、contentフォルダを作成し、config.tsファイルを作成し、以下をコピペします。

import { defineCollection, z } from 'astro:content';
const blogCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
summary: z.string(),
category: z.enum(['setup', 'troubleshoot', 'checklist']),
tags: z.array(z.string()).optional(),
pubDate: z.date().optional(),
}),
});
export const collections = {
'blog': blogCollection,
};

適当な記事を用意する#

first.mdのプレビュー

先ほど作成したcontentフォルダの中にblogフォルダを作成します。 そしてその中にfirst.md(ファイル名は一例)を作成します。

このmd(Markdown)ファイルに、以下のような内容を書いておきます。 この記事ではローカルのみではありますが、あとでここで書いた通りにお手軽に全世界へ公開できるようになります。

---
title: "GitHubからCloudflare Pagesへ自動デプロイ!"
summary: "知識ゼロから爆速構築"
category: "setup"
tags: ["Astro", "Cloudflare"]
pubDate: 2026-01-19
---
## 成功
これは **VS Code** で書いて **GitHub** にプッシュした記事です。
自動的にCloudflare Pagesが検知して、数分でWebサイトに表示されます。
### 仕組み
1. Markdownを書く
2. GitでPushする
3. Cloudflare Pagesが処理
4. 完成!
`print("Hello World")`

記事が描写されるよう設定#

first.mdは、いわば、ウェブページにどのような内容を記載するかの情報を与えるファイルです。 Astroではその情報をどのように表示するかと言う設定も作成する必要があります。

/src/pages/blog/[...slug].astroの中身を以下に置き換えます。 ファイル自体が存在しない場合は、フォルダ名やファイル名を変えることなく新規作成してください。

[...slug].astroのプレビュー

---
import { getCollection } from 'astro:content';
import type { GetStaticPaths, InferGetStaticPropsType } from 'astro';
import Layout from '../../layouts/Layout.astro';
export const getStaticPaths = (async () => {
const blogEntries = await getCollection('blog');
return blogEntries.map((entry) => ({
params: { slug: entry.slug },
props: { entry },
}));
}) satisfies GetStaticPaths;
type Props = InferGetStaticPropsType<typeof getStaticPaths>;
const { entry } = Astro.props as Props;
const { Content } = await entry.render();
---
<Layout>
<h1>{entry.data.title}</h1>
<p>公開日: {entry.data.pubDate?.toISOString().split('T')[0]}</p>
<hr />
<Content />
</Layout>

ホーム画面を記事一覧を表示するよう変更#

デフォルトのWelcomeページではなく、指示一覧を表示するように置き換えます。

デフォルトのインデックス画面の設定

blog/src/pages/index.astroの中身を以下に置き換えます。

---
import { getCollection } from 'astro:content';
import Layout from '../layouts/Layout.astro';
const allPosts = await getCollection('blog');
---
<Layout>
<h1>ブログ記事一覧</h1>
<ul>
{allPosts.map((post) => (
<li>
<a href={`/blog/${post.slug}`}>{post.data.title}</a>
</li>
))}
</ul>
</Layout>

Astroの設定に問題がないか確認#

VS Codeでターミナルを開きます。

ターミナルの開き方

そしてnpm run devを実行し、http://localhost:4322/などの表示されたリンク先に移動します。

表示を確かめる#

記事一覧画面

テスト用にいくつか記事を追加しているので私の場合複数表示されていますが、手順通り進めた方はこちらの画面に1つ記事が表示されるはずです。

テスト記事の表示

そして一覧画面から記事をクリックすると、このように記事が表示されます。

これで最低限のastroでの記事表示ができました。 お疲れ様です。

知識ゼロから始めるAstroブログ構築(2) ~Astroでとりあえず記事とインデックスページを表示させる~
https://fuwari.vercel.app/posts/astro-min-site-dev/
Author
Lorem Ipsum
Published at
2026-01-19
License
CC BY-NC-SA 4.0