Astroとは?

Astroは、コンテンツ重視のWebサイトを作るために設計されたモダンなWebフレームワークです。2022年に正式リリースされて以来、ブログやポートフォリオ、マーケティングサイトなど幅広いサイトで採用されています。

最大の特徴は「アイランドアーキテクチャ」と呼ばれる設計思想です。JavaScriptを必要な部分だけに限定することで、デフォルトでゼロJSのHTMLを出力します。これにより、高速なサイト表示が実現できます。

Astroの主な特徴

高速なパフォーマンス

AstroはデフォルトでJavaScriptをほとんど出力しません。サーバーサイドでHTMLを生成するため、初回ロードが非常に速いです。Google Lighthouseのスコアも高く出やすい特徴があります。

複数フレームワーク対応

React、Vue、Svelte、SolidJSなど、好きなUIフレームワークのコンポーネントを同じプロジェクト内で使えます。既存のコンポーネントを活かしつつ、段階的に移行することも可能です。

コンテンツコレクション

TypeScriptで型安全なコンテンツ管理ができます。Markdownや MDXファイルを自動的に読み込み、スキーマバリデーションも行えます。

MDX対応

MarkdownファイルにJSXコンポーネントを埋め込める MDXにネイティブ対応しています。記事内にインタラクティブなコンポーネントを配置できます。

インストール方法

まずはNode.js(v18以上)がインストールされていることを確認してください。

# npmでプロジェクト作成
npm create astro@latest

# プロジェクト名を入力
# テンプレートを選択(Blogが使いやすい)
cd my-blog
npm install
npm run dev

開発サーバーが起動したら、http://localhost:4321 でサイトを確認できます。

プロジェクト構造

Astroプロジェクトの基本的なディレクトリ構造は以下のとおりです。

my-blog/
├── public/          # 静的ファイル(画像、faviconなど)
├── src/
│   ├── components/  # 再利用可能なコンポーネント
│   ├── content/     # MarkdownやMDXのコンテンツ
│   ├── layouts/     # ページレイアウト
│   ├── pages/       # URLに対応するページ
│   └── styles/      # CSSファイル
├── astro.config.mjs # Astroの設定
└── package.json

pagesディレクトリ

src/pages/ 配下のファイルは、そのパス構造がそのままURLになります。

pages/
├── index.astro        → /
├── about.astro        → /about
└── articles/
    ├── index.astro    → /articles
    └── [slug].astro   → /articles/任意のスラッグ

Astroコンポーネントの書き方

.astroファイルはHTMLに近い独自の構文を使います。

---
// フロントマター(サーバーサイドで実行されるTypeScript)
const greeting = "Hello, World!";
---

<!-- HTMLテンプレート -->
<h1>{greeting}</h1>

<style>
  /* スコープ付きCSS */
  h1 { color: blue; }
</style>

コンテンツコレクションの使い方

src/content/config.ts でスキーマを定義します。

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

const articles = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    publishedAt: z.coerce.date(),
    category: z.enum(['tech', 'lifestyle', 'review']),
  }),
});

export const collections = { articles };

記事ページでは getStaticPaths を使ってパスを生成します。

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

export async function getStaticPaths() {
  const articles = await getCollection('articles');
  return articles.map((article) => ({
    params: { slug: article.slug },
    props: { article },
  }));
}
---

まとめ

Astroは、ブログやコンテンツサイトを作るのに非常に適したフレームワークです。高速な表示速度、型安全なコンテンツ管理、柔軟なコンポーネント対応など、モダンなWeb開発に必要な機能が揃っています。

次の記事では、作成したAstroサイトをCloudflare Pagesで無料でデプロイする方法を解説します。