開発・個人開発

Astroで爆速ブログ・メディアを作る入門 インストールから記事公開まで

Astroで爆速ブログ・メディアを作る入門 インストールから記事公開まで

この記事の要点

Astroは静的サイトジェネレーターの中でメディア・ブログ向けに最適化されており、Markdownで記事を管理しながら表示速度とSEOを両立できる。ゼロから記事が公開できる状態になるまでの手順を解説する。

結論

Astroでブログを作る手順は大きく5つだ。プロジェクトの初期化→記事のMarkdown管理設定→ページデザイン→Vercelへのデプロイ→SEO設定の順に進めると、1〜2日で記事を公開できる環境が完成する。表示速度はNext.jsやWordPressより出しやすく、個人開発のメディアサイトに適している。

なぜAstroか

静的サイトジェネレーターは他にもNext.js・Hugo・Jekyllなどがあるが、Astroがメディア・ブログ向けに優れている理由がある。

デフォルトでJavaScriptゼロ:Astroは、ページに必要なJavaScriptだけを出力する設計になっている。不要なJSバンドルを送らないため、ページの読み込みが速い。Lighthouseスコアで100を出しやすいのがAstroの特徴だ。

コンテンツコレクションsrc/content/ディレクトリにMarkdownを置くと、そのままブログ記事として扱える仕組みが標準で入っている。フロントマターのスキーマを定義することで、タイプミスや必須フィールドの漏れをビルド時に検知できる。

フレームワーク非依存:ReactコンポーネントもVueコンポーネントもSvelteコンポーネントも、Astroのページ内で一緒に使える。既存の経験やコンポーネントを活かしやすい。

デプロイが簡単:静的ファイルを出力するので、Vercel・Netlify・GitHub Pagesなどどこにでもデプロイできる。Vercelとの連携は特に設定なしで動く。

環境の準備

Astroを動かすにはNode.jsが必要だ。バージョン18以上を推奨する。

node --version
# v18.x.x 以上であればOK

Node.jsが入っていない場合は、Node.jsの公式サイト(nodejs.org)からLTSバージョンをインストールする。

プロジェクトの作成

npm create astro@latest

対話形式でセットアップが進む。

Where should we create your new project?
> my-blog

How would you like to start your new project?
> Use blog template   ← ブログ向けのテンプレートを選ぶ

Do you plan to write TypeScript?
> Yes

How strict should TypeScript be?
> Strict

Install dependencies?
> Yes

Initialize a new git repository?
> Yes

ブログテンプレートを選ぶと、記事の管理に必要なコンテンツコレクションの設定・サンプル記事・基本レイアウトが最初から含まれる。

ディレクトリ構成の理解

プロジェクトが作成されると、主要なディレクトリは次の通りだ。

my-blog/
├── src/
│   ├── content/
│   │   ├── config.ts      ← コンテンツコレクションのスキーマ定義
│   │   └── blog/          ← 記事のMarkdownファイルを置く場所
│   ├── pages/
│   │   ├── index.astro    ← トップページ
│   │   └── blog/
│   │       ├── index.astro  ← 記事一覧ページ
│   │       └── [slug].astro ← 記事詳細ページ(動的ルーティング)
│   ├── layouts/
│   │   └── BlogPost.astro  ← 記事のレイアウト
│   └── components/         ← 再利用するコンポーネント
├── public/                 ← 静的ファイル(画像・robots.txtなど)
├── astro.config.mjs        ← Astroの設定ファイル
└── package.json

コンテンツコレクションのスキーマ設定

src/content/config.tsでフロントマターのスキーマを定義する。

import { z, defineCollection } from 'astro:content';

const blog = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    description: z.string(),
    pubDate: z.coerce.date(),
    updatedDate: z.coerce.date().optional(),
    tags: z.array(z.string()).default([]),
    draft: z.boolean().default(false),
    faq: z.array(z.object({
      q: z.string(),
      a: z.string(),
    })).optional(),
  }),
});

export const collections = { blog };

このスキーマを定義すると、titleがないMarkdownをコミットしたときにビルドエラーが出る。量産フェーズでのミスを早期に発見できる。

最初の記事を書く

src/content/blog/my-first-post.mdを作成する。

---
title: "最初の記事"
description: "Astroでブログを始めました。この記事では○○について解説します。"
pubDate: 2026-06-04
tags: ["Astro", "ブログ"]
draft: false
---

## 結論

ここに記事の本文を書く。

保存後に開発サーバーを起動すると、ブラウザで確認できる。

npm run dev

http://localhost:4321/blog/my-first-post/にアクセスすると記事が表示される。

Vercelへのデプロイ

GitHubにリポジトリを作成し、プロジェクトをプッシュする。

git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git push -u origin main

Vercelのダッシュボード(vercel.com)で「Add New Project」を選択し、GitHubリポジトリを指定するだけでデプロイが完了する。Astroプロジェクトを自動で認識して、ビルドコマンド(npm run build)も自動設定される。

デプロイ完了後、mainブランチへのプッシュが自動でビルド・公開に繋がる状態になる。

SEO設定:メタタグとサイトマップ

Astroにはサイトマップ生成のプラグインが公式で提供されている。

npx astro add sitemap

astro.config.mjsにサイトのURLを設定する。

import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';

export default defineConfig({
  site: 'https://your-site.com',
  integrations: [sitemap()],
});

これだけで、/sitemap-index.xmlが自動生成される。

記事レイアウト(src/layouts/BlogPost.astro)にメタタグを追加する。

---
const { title, description, pubDate } = Astro.props;
---
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="description" content={description} />
    <title>{title}</title>
    <!-- OGP -->
    <meta property="og:title" content={title} />
    <meta property="og:description" content={description} />
    <meta property="og:type" content="article" />
    <link rel="canonical" href={Astro.url} />
  </head>
  <body>
    <slot />
  </body>
</html>

SEOと構造化データのより詳しい設定はAstroでSEO・構造化データを自動化するで解説している。

記事の一覧ページを作る

src/pages/blog/index.astroで全記事を取得して一覧表示する。

---
import { getCollection } from 'astro:content';

const posts = await getCollection('blog', ({ data }) => !data.draft);
const sorted = posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
---

<ul>
  {sorted.map(post => (
    <li>
      <a href={`/blog/${post.slug}/`}>{post.data.title}</a>
      <p>{post.data.description}</p>
    </li>
  ))}
</ul>

draft: trueの記事をフィルターしているため、下書き記事は一覧に表示されない。

Vercelへの独自ドメイン設定

サイトが公開できたら、独自ドメインを設定する。ドメインはお名前.com・Cloudflare Registrar・Google Domainsなどで取得できる。

Vercelのプロジェクト設定(Settings → Domains)で取得したドメインを入力し、ドメインレジストラ側でDNSレコードを設定する。手順の詳細はVercelに独自ドメインを設定する手順で解説している。

VercelとGitHubの連携手順についてはVercelの初期設定とGitHub連携・自動デプロイも参照してほしい。

まとめ

Astroでのブログ立ち上げは、npm create astro@latestからVercelデプロイまで半日で完成する。コンテンツコレクションを使ったMarkdown管理は、記事の量産・管理に適しており、スキーマによる型チェックで品質を保ちやすい。まずはブログテンプレートで始めて、デザインはあとから調整するアプローチが最短で公開に至れる。

よくある質問

AstroとWordPressはどちらを選べばいいですか

コンテンツ中心のメディアサイトや技術ブログならAstroを勧めます。表示速度が速く、サーバー不要でホスティングコストがほぼゼロです。WordPressはプラグインが豊富で非エンジニアでも操作しやすいですが、PHPサーバーのコストと保守が必要です。

Astroを使うのにどんな知識が必要ですか

HTMLとCSSの基礎、JavaScriptの最低限の知識(関数・変数・配列)、Node.jsの実行環境(インストール済みの状態)があれば始められます。TypeScriptは必須ではありませんが、型チェックの恩恵を受けるために導入を勧めます。

Astroでブログを作るのにどのくらいかかりますか

インストールから最初の記事を公開するまで、半日〜1日あれば完成します。SEO・OGP・サイトマップの設定込みで2〜3日を見ておくと余裕があります。

Astroは個人開発に向いていますか

向いています。特にAstroのコンテンツコレクション機能は、記事をMarkdownで管理してSEO対応を自動化するのに適しており、AIで記事を量産するワークフローとも相性がよいです。