Astroで最小構成の状態で、まずは記事と記事一覧のページが表示されるように設定していきます。 まずは動くことを目標に、デザインなどは特段ない状態でやっていきます。
astroで最低限、記事と記事一覧ページが表示されるように設定
astroのconfig.tsを設定
VS Codeでastroをインストールしたフォルダを開きます。

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,};適当な記事を用意する

先ほど作成した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のプレビュー](/_astro/20260120134056.BP1XZ8BN_1MIjqH.webp)
---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での記事表示ができました。 お疲れ様です。