ゼロから Astro ブログを構築:1 時間でトップページからデプロイまで
ある技術ブログを開くと、0.8 秒で完全に読み込まれ、ページ遷移も滑らか。自分の WordPress ブログを見ると——3 秒の白画面、閉じたくなる。Hexo、Hugo、Gatsby も試しましたが、毎回どこかでつまずきました。公式ドキュメントが分かりにくい、チュートリアルが断片的、インストールからデプロイまで何かが足りない感じ。Astro は性能も開発体験も優れ、全体の流れは想像以上にシンプルです。
この記事では、ゼロからデプロイまでの全工程を 1 時間で完了します。トップページ、記事一覧、タグ分類、RSS を備えた完全なブログ。実践的な操作手順です。
第 1 章:なぜ Astro か?(宣伝ではなく、本当に使える)
性能は本当にそこまで違うのか?
最初は半信半疑でした。公式サイトの「従来の React フレームワークより 40% 速い」「デフォルトで JavaScript ゼロ出力」——マーケティング文句に聞こえますよね。でも WordPress ブログを Astro に移行したら、数字は嘘をつきません。
- 初回表示時間:3.2 秒 → 0.8 秒
- Lighthouse スコア:100 点満点(以前の WordPress は 65 点)
- JavaScript サイズ:280KB → 20KB 未満
ここまで性能が上がる理由は、Astro の核心理念——コンテンツ優先、JavaScript は必要なときだけ読み込み——にあります。デフォルトで純粋な HTML+CSS を出力し、インタラクティブが必要な箇所だけ JavaScript を配信します。React の「全部入り」とは真逆のアプローチです。
興味深い比較:同じ記事を Next.js と Astro でテストしました。Next.js は初回表示でフレームワークランタイム(約 100KB)を読み込み、Astro はクリーンな HTML ファイルだけ。読むことが主目的のブログでは、この差は歴然です。
開発体験はどう?
性能の次は開発体験。Astro で好きなのは Islands アーキテクチャ——聞こえは大げさですが、要するに「インタラクティブが必要な場所だけ JavaScript を使う」です。
記事詳細ページの例:
- 記事本文 → 静的 HTML(速い)
- コメント欄 → React コンポーネント(インタラクティブ)
- ナビゲーション → Vue コンポーネント(はい、混在できます)
小さな機能のためにサイト全体を SPA にする必要がありません。初心者に優しいのは、Markdown で記事を書くだけで、データベースや CMS をいじらなくていいこと。今は VSCode で Markdown を書き、GitHub に push すれば自動デプロイ——快適です。
他フレームワークとの比較
この疑問、私も半日悩みました。表で比較しましょう。
| フレームワーク | 用途 | 学習コスト | 性能 | メンテナンス |
|---|---|---|---|---|
| Astro | ブログ/ドキュメント | 低(HTML が分かれば OK) | ⭐⭐⭐⭐⭐ | 低(ほぼゼロ) |
| Next.js | 複雑なアプリ | 中(React 必須) | ⭐⭐⭐⭐ | 中(API 維持) |
| Hexo | 純静的ブログ | 低(拡張性は弱い) | ⭐⭐⭐ | 低 |
| WordPress | CMS が必要 | 中(プラグイン豊富) | ⭐⭐ | 高(セキュリティ+更新) |
おすすめ:
- ブログや技術ドキュメント → Astro 一択。性能も開発体験も優秀
- EC や複雑なインタラクティブアプリ → Next.js が適切
- 最もシンプルな静的ブログでカスタム不要 → Hexo でも十分
- 非エンジニアも記事を投稿する CMS → WordPress
2025 年のデータでは、Astro の npm ダウンロード数は 300 万回を突破し、シェアは 18% に成長。開発者が実際に選んでいる——もはやニッチではありません。
第 2 章:環境準備(5 分で完了)
Node.js のインストール(未インストールの場合)
Astro には Node.js v18 以上が必要です。まずバージョンを確認:
node -v
npm -v
バージョンが表示されればこのステップはスキップ。未インストールなら Node.js 公式サイト から LTS 版をダウンロード。
Windows ユーザーの注意点:インストール時に「Add to PATH」にチェックを入れること。後でコマンドが見つからなくなります。一部のウイルス対策ソフトが npm インストールをブロックする場合もあるので、インストール後はコマンドプロンプトを再起動してください。
Astro プロジェクトの作成
想像より簡単です。コマンドラインで:
npm create astro@latest
選択肢が並びますが、こう選べば OK:
- プロジェクト名:
my-blogなど好きな名前 - テンプレート:Blog を選択(方向キー + Enter)
- 依存関係のインストール:Yes
- TypeScript 設定:Strict または Strictest(型チェックでバグを減らせます)
- Git リポジトリの初期化:Yes
全体で 1〜2 分。テンプレートと依存関係が自動ダウンロードされます。
Blog テンプレートを推奨する理由:記事一覧、タグ分類、RSS の基礎コードが入っています。空白テンプレートから始めると、ページネーションだけで 2 時間かかりました。
開発サーバーの起動
プロジェクトディレクトリに入り、サーバーを起動:
cd my-blog
npm run dev
Local: http://localhost:4321 と表示されれば成功。ブラウザでアクセスすると、すでに骨組みのできたブログが見えます。
初心者向け注意:
- ポート 4321 が使用中なら、
astro.config.mjsのserver.portを変更 EACCESエラーなら権限問題。sudo npm run devを試す(Mac/Linux)- 文字化けする場合は、コマンドラインのエンコーディングが UTF-8 か確認
ここまでで環境は整いました。動く Astro ブログが手元にあります。次は各ファイルの役割を見ていきましょう。
第 3 章:プロジェクト構成の解説(各フォルダの役割)
ディレクトリ構成
VSCode などで my-blog フォルダを開くと、こんな構成です:
my-blog/
├── src/
│ ├── pages/ # ルーティング。ファイル名が URL になる
│ ├── layouts/ # レイアウト(ヘッダー、フッターなど)
│ ├── components/ # 再利用コンポーネント(ボタン、カードなど)
│ └── content/ # Markdown 記事の保存場所
├── public/ # 静的アセット(画像、フォント、favicon)
├── astro.config.mjs # Astro 設定ファイル
└── package.json # プロジェクト依存関係
普通のフロントエンドプロジェクトに似ていますが、Astro にはいくつか特徴があります。これを理解すると、なぜ使いやすいかが分かります。
pages/ ディレクトリ:ファイル即ルート
Astro で好きな機能の一つ。ルーティング設定不要、ファイル名がそのまま URL になります:
pages/index.astro→ トップページ/pages/about.astro→ About ページ/aboutpages/blog/index.astro→ ブログ一覧/blogpages/blog/[...slug].astro→ 記事詳細/blog/xxx
[...slug].astro は動的ルート。角括弧内が変数になり、/blog/ 以下のすべての記事 URL を処理します。
Next.js から移行したとき、この設計に一目惚れしました。
content/ ディレクトリ:記事の置き場
src/content/blog/ を開くと、サンプル記事がいくつかあります。各記事は .md または .mdx ファイルで、先頭に Frontmatter(3 本のハイフンで囲まれた部分)があります:
---
title: '私の最初の記事'
description: 'これはテスト記事です'
pubDate: 'Dec 02 2025'
heroImage: '/blog-placeholder.jpg'
tags: ['Astro', 'チュートリアル']
---
ここから本文...
Astro がこの情報を自動認識し、ページ内で post.data.title のように呼び出せます。型チェックもあり、フィールド名を間違えるとビルド時にエラー——潔癖な人には嬉しい機能です。
layouts/ と components/:コードの再利用
layouts/ にはページレイアウト。全記事共通のヘッダー、フッター、サイドバーなど。Blog テンプレートには BaseLayout.astro と BlogPost.astro が付属しています。
components/ には再利用可能な小さなコンポーネント。ボタン、カード、タグクラウドなど。Astro 構文でも React/Vue でも書けます。非常に柔軟です。
public/ ディレクトリ:そのまま出力フォルダへ
ここに置いたファイルは、最終サイトのルートにそのままコピーされます。public/favicon.ico はデプロイ後 https://あなたのドメイン/favicon.ico になります。
ブログの画像、フォント、robots.txt などはここに置くのが一般的です。
astro.config.mjs:コア設定ファイル
Astro の動作を制御するファイル。よく使う設定:
export default defineConfig({
site: 'https://あなたのドメイン.com', // デプロイ先ドメイン
integrations: [mdx()], // プラグイン(Markdown 拡張、RSS など)
server: {
port: 4321 // 開発サーバーポート
}
})
今は大きく変更する必要はありません。機能追加時に戻って調整すれば OK。
正直、この構成を理解することは本当に重要です。いきなりコードを書き始めて、ファイルの置き場所が分からず、プロジェクトが散らかる人をよく見ます。5 分かけてここを押さえれば、後で 1 時間節約できます。
第 4 章:コア機能の実装(ここが本番)
4.1 トップページ:最新記事の表示
Blog テンプレートがトップページの骨組みを用意していますが、少し調整しましょう。src/pages/index.astro を開くと、こんなコードがあります:
---
import { getCollection } from 'astro:content';
import BaseLayout from '../layouts/BaseLayout.astro';
// 全ブログ記事を取得し、日付順にソートして最新 5 件
const allPosts = (await getCollection('blog'))
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf())
.slice(0, 5);
---
<BaseLayout>
<h1>私のブログへようこそ</h1>
<ul>
{allPosts.map((post) => (
<li>
<a href={`/blog/${post.slug}/`}>{post.data.title}</a>
<time>{post.data.pubDate.toDateString()}</time>
</li>
))}
</ul>
</BaseLayout>
このコードの動き:
getCollection('blog')で全記事を取得- 公開日の降順でソート(新しい順)
slice(0, 5)で最新 5 件だけ取得- ループでリストとしてレンダリング
初心者向け注意:日付ソートには .valueOf() を使うこと。文字列ソートになると順序が狂います。
4.2 記事一覧ページ:ページネーション付き
src/pages/blog/index.astro を作成(テンプレートにない場合)、完全な記事一覧を実装:
---
import { getCollection } from 'astro:content';
import BaseLayout from '../../layouts/BaseLayout.astro';
const allPosts = (await getCollection('blog'))
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
const pageSize = 10;
const currentPage = 1;
const totalPages = Math.ceil(allPosts.length / pageSize);
const posts = allPosts.slice(0, pageSize);
---
<BaseLayout title="記事一覧">
<h1>すべての記事</h1>
<div class="post-list">
{posts.map((post) => (
<article>
<h2><a href={`/blog/${post.slug}/`}>{post.data.title}</a></h2>
<p>{post.data.description}</p>
<time>{post.data.pubDate.toLocaleDateString('ja-JP')}</time>
<div class="tags">
{post.data.tags?.map(tag => <span>#{tag}</span>)}
</div>
</article>
))}
</div>
{totalPages > 1 && (
<div class="pagination">
<span>{currentPage} / {totalPages} ページ</span>
</div>
)}
</BaseLayout>
ここではページネーションを簡略化しています。本番では Astro の paginate() 関数で自動生成できます。記事が 100 件未満なら、1 ページ表示でも十分です。
UX 改善の提案:
- 読了時間の推定(文字数 ÷ 400 字/分)
- 記事要約の切り詰め(先頭 150 字 + 省略記号)
- サムネイル追加(
heroImageフィールドを使用)
4.3 記事詳細ページ:最も重要なページ
動的ルートで実装します。Blog テンプレートに src/pages/blog/[...slug].astro があれば編集、なければ新規作成:
---
import { getCollection } from 'astro:content';
import BlogPost from '../../layouts/BlogPost.astro';
// 全記事の静的パスを生成
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map(post => ({
params: { slug: post.slug },
props: { post },
}));
}
const { post } = Astro.props;
const { Content } = await post.render();
---
<BlogPost {...post.data}>
<Content />
</BlogPost>
このコードのポイント:
getStaticPaths()はビルド時に実行され、各記事の静的 HTML を生成post.render()が Markdown を HTML コンポーネントに変換<Content />が記事本文
初心者がつまずきやすい点:
- コードハイライトが効かない:Shiki プラグインが必要(Blog テンプレートには付属)
- Markdown のスタイルが地味:
@tailwindcss/typographyプラグイン推奨 - 画像パスが間違う:画像は
public/に置き、参照は/images/xxx.jpg
目次(TOC)を追加するなら、コミュニティプラグイン remark-toc を astro.config.mjs で設定:
import { defineConfig } from 'astro/config';
import remarkToc from 'remark-toc';
export default defineConfig({
markdown: {
remarkPlugins: [remarkToc],
},
});
4.4 タグ分類システム:コンテンツを整理
src/pages/tags/[tag].astro を作成し、タグフィルタ機能を実装:
---
import { getCollection } from 'astro:content';
import BaseLayout from '../../layouts/BaseLayout.astro';
export async function getStaticPaths() {
const allPosts = await getCollection('blog');
// 全ユニークタグを収集
const allTags = [...new Set(allPosts.flatMap(post => post.data.tags || []))];
// 各タグのページを生成
return allTags.map(tag => ({
params: { tag },
props: {
posts: allPosts.filter(post =>
post.data.tags?.includes(tag)
).sort((a, b) =>
b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
),
},
}));
}
const { tag } = Astro.params;
const { posts } = Astro.props;
---
<BaseLayout title={`タグ: ${tag}`}>
<h1>#{tag} 関連記事 ({posts.length})</h1>
<ul>
{posts.map((post) => (
<li>
<a href={`/blog/${post.slug}/`}>{post.data.title}</a>
</li>
))}
</ul>
</BaseLayout>
各タグごとに独立ページが生成されます。例:/tags/astro、/tags/チュートリアル など。
応用:タグクラウドページ(src/pages/tags/index.astro)を作り、全タグと記事数を表示。記事数に応じてフォントサイズを変えると見た目が良いです。
4.5 RSS フィード:読者に更新を届ける
RSS プラグインをインストール:
npx astro add rss
src/pages/rss.xml.js を作成:
import rss from '@astrojs/rss';
import { getCollection } from 'astro:content';
export async function GET(context) {
const posts = await getCollection('blog');
return rss({
title: '私の技術ブログ',
description: 'フロントエンド開発の経験と学びを共有',
site: context.site,
items: posts.map((post) => ({
title: post.data.title,
pubDate: post.data.pubDate,
description: post.data.description,
link: `/blog/${post.slug}/`,
})),
});
}
デプロイ後、RSS 購読 URL は https://あなたのドメイン.com/rss.xml。RSS ユーザーは減りましたが、技術ブログにはまだプロフェッショナルな印象を与えます。
ここまででコア機能は完成。トップページ、記事一覧、詳細ページ、タグ分類、RSS——機能的なブログシステムができました。次は検索エンジン向けの最適化です。
第 5 章:SEO 最適化(見つけてもらうために)
ブログを作るだけでは不十分。見つけてもらう必要があります——それが SEO(検索エンジン最適化)の意味。幸い Astro は SEO に強い。静的 HTML、高速読み込み、セマンティックタグ——検索エンジンが好む要素が揃っています。
Meta タグの設定:検索エンジンにコンテンツを伝える
src/layouts/BaseLayout.astro(またはベースレイアウト)の <head> に追加:
---
interface Props {
title: string;
description?: string;
image?: string;
}
const { title, description = '私の技術ブログ', image = '/og-image.jpg' } = Astro.props;
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
---
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>{title} | 私のブログ</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonicalURL} />
<!-- Open Graph(SNS シェア) -->
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={new URL(image, Astro.site)} />
<meta property="og:url" content={canonicalURL} />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={new URL(image, Astro.site)} />
</head>
各ページに完全な Meta 情報が付き、Twitter などでシェアしたときもきれいなカードが表示されます。
Sitemap の生成:検索エンジンにページ一覧を伝える
とても簡単。一行コマンド:
npx astro add sitemap
astro.config.mjs でドメインを設定:
export default defineConfig({
site: 'https://あなたのドメイン.com',
integrations: [sitemap()],
});
デプロイ後、sitemap は https://あなたのドメイン.com/sitemap-index.xml に自動生成。Google Search Console にこの URL を登録すれば、数日後に記事がインデックスされ始めます。
性能最適化:速度も SEO の要素
Astro 自体は十分速いですが、さらに効くテクニックがあります。
1. 画像最適化
Astro の <Image> コンポーネントを通常の <img> の代わりに:
---
import { Image } from 'astro:assets';
import myImage from '../assets/photo.jpg';
---
<Image src={myImage} alt="説明文" />
自動で:
- モダン形式(WebP/AVIF)に変換
- 複数サイズのレスポンシブ画像を生成
- 遅延読み込み
2. CSS/JS 圧縮
本番ビルド時に Astro が自動圧縮。追加設定は不要。ただし使わない依存関係は削除してサイズを減らしましょう。
3. フォント最適化
Google Fonts やカスタムフォントを使う場合、font-display: swap を追加して、フォント読み込みがレンダリングをブロックしないように:
@font-face {
font-family: 'MyFont';
src: url('/fonts/myfont.woff2') format('woff2');
font-display: swap;
}
これらの最適化を終えると、Lighthouse スコアは 95 点以上に安定します。私のブログは第三者スクリプトで Best Practices が少し減点される以外、他は満点です。
第 6 章:デプロイ(無料ホスティングを選ぶ)
コードができたら、いよいよ全世界に公開——最もワクワクする部分です。無料で使いやすいホスティングを 2 つ紹介します。どちらか 1 つを選んでください。
方法 1:Vercel デプロイ(初心者向け)
Vercel が最もおすすめ。Astro をネイティブサポートし、ゼロ設定で動きます。
ステップ 1:GitHub にコードを push
リポジトリがなければ、プロジェクトルートで:
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/あなたのユーザー名/my-blog.git
git push -u origin main
ステップ 2:Vercel でプロジェクトをインポート
- vercel.com でアカウント登録(GitHub ログインが便利)
- 「New Project」をクリック
my-blogリポジトリを選択- Vercel が Astro を自動認識。設定変更不要
- 「Deploy」をクリック。1〜2 分で完了
ステップ 3:ブログにアクセス
デプロイ成功後、xxx.vercel.app のドメインが付与されます。アクセスすればブログが見えます。
カスタムドメインの紐付け(任意)
独自ドメインがあれば、Vercel のプロジェクト設定でドメインを追加し、DNS プロバイダーで CNAME レコードを Vercel の指示どおり設定。Vercel が手順を案内してくれます。
初心者向け注意:
astro.config.mjsに正しいsiteアドレスを設定- 環境変数は Vercel ダッシュボードで設定。コードに直接書かない
- 初回デプロイは 5 分かかることも。焦らず待つ
方法 2:Netlify デプロイ(代替案)
Netlify も Vercel と似ていますが、国内からのアクセス速度はやや安定する場合があります。
ステップ 1:GitHub にコードを push
(Vercel と同じ)
ステップ 2:Netlify でプロジェクトをインポート
- netlify.com でアカウント登録
- 「Add new site」→「Import an existing project」
- GitHub を接続し、リポジトリを選択
- ビルド設定:
- Build command:
npm run build - Publish directory:
dist
- Build command:
- 「Deploy」をクリック
ステップ 3:ブログにアクセス
同様に xxx.netlify.app のドメインが付与されます。
どちらを選ぶ?
| プラットフォーム | 強み | 弱み | 向いている人 |
|---|---|---|---|
| Vercel | Astro 自動設定 エッジネットワークが速い CI/CD 体験が良い | 国内アクセスがたまに遅い | 体験を重視する開発者 |
| Netlify | 国内アクセスが安定 無料枠が大きい プラグインが豊富 | 設定がやや複雑 | 日本語読者向けブログ |
おすすめ:まず Vercel を試し、国内が遅ければ Netlify に切り替え。どちらも GitHub に push すれば自動ビルド・更新。非常に便利です。
自動デプロイの魔法
今やることは 3 ステップだけ:
- ローカルで記事を書く(Markdown ファイル)
git add .→git commit -m "新記事"→git push- 2 分待てば、サイトに自動公開
サーバーにログインする必要も、手動ビルドも、ファイルアップロードも不要。モダンなデプロイの魔法——初めて体験したとき、本当に驚きました。
第 7 章:よくある問題と解決策(踏んだ坑を先に知る)
コミュニティで実際につまずいた問題集。事前に知っておけば時間を節約できます。
問題 1:Tailwind スタイルが効かない
症状:Tailwind クラス名を書いても、ページに反映されない。
原因:tailwind.config.mjs の content パス設定が間違い、Tailwind がファイルをスキャンしていない。
解決策:
tailwind.config.mjs を開き、content 配列にスキャン対象ファイルがすべて含まれているか確認:
export default {
content: [
'./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}',
],
theme: {
extend: {},
},
plugins: [],
}
変更後、開発サーバーを再起動(Ctrl+C で停止 → npm run dev)。
問題 2:ビルド時に “Invalid frontmatter” エラー
症状:ローカルでは正常、npm run build でエラー。
原因:Markdown 記事の frontmatter 形式が不正、または必須フィールド不足。
解決策:
src/content/config.ts(あれば)で必須フィールドを確認。Blog テンプレートの一般的な要件:
---
title: '記事タイトル' # 必須
description: '記事の説明' # 必須
pubDate: 'Dec 02 2025' # 必須。日付形式に注意
tags: ['タグ1', 'タグ2'] # 任意
---
Content Collections の利点は、ビルド時に検証してくれること——本番障害を防げます。
問題 3:デプロイ後 404、ローカルは正常
症状:ローカル開発は問題なし、Vercel/Netlify デプロイ後に記事ページが 404。
原因:astro.config.mjs の base パス設定ミス、または site 未設定。
解決策:
設定ファイルに以下があるか確認:
export default defineConfig({
site: 'https://あなたのドメイン.com', // 必須
// base: '/blog', // サブディレクトリデプロイ時のみ
});
ブログがサブディレクトリ(xxx.com/blog など)にないなら、base は設定しない。
問題 4:画像の読み込みが遅い
症状:記事内の画像読み込みが遅く、体験が悪い。
原因:Astro の Image コンポーネント未使用、または画像自体が大きすぎる。
解決策:
- Image コンポーネントを使用(推奨):
---
import { Image } from 'astro:assets';
---
<Image src="/images/photo.jpg" alt="説明" width={800} height={600} />
-
画像を圧縮:TinyPNG や Squoosh.app で圧縮してからアップロード
-
CDN を使用:Cloudinary、Imgur などの画像ホスティングに置き、CDN リンクで参照
問題 5:コードブロックにシンタックスハイライトがない
症状:Markdown のコードブロックがプレーンテキスト表示。
原因:テーマ未設定、または Shiki プラグインの問題。
解決策:
astro.config.mjs でコードハイライトテーマを設定:
export default defineConfig({
markdown: {
shikiConfig: {
theme: 'github-dark', // または 'dracula', 'nord' など
},
},
});
Blog テンプレートには Shiki が付属。それでもダメなら依存関係を再インストール:rm -rf node_modules && npm install。
問題 6:開発サーバーの起動が遅い
症状:npm run dev の起動に時間がかかる。
原因:記事が多い、またはプラグインが多すぎる。
解決策:
node_modulesとpackage-lock.jsonを削除して再インストール- 不要なプラグインを減らす
- 最新版 Astro にアップグレード(
npm install astro@latest)
Astro 5.x では起動速度が大幅改善。4.x を使っているならアップグレード推奨。
大半の問題には遭遇しないでしょう。万一つまずいたら、この章に戻って確認してください。私もこれらの坑でかなり時間を浪費しました——経験を共有します。
結論
このチュートリアルをここまで進めたなら、おめでとうございます。機能的で性能に優れた、すぐ使える Astro ブログが手元にあります。実現したことを振り返りましょう:
✅ 完全なブログシステム:トップページ、記事一覧、詳細ページ、タグ分類、RSS
✅ SEO 最適化:Meta タグ、Sitemap、性能最適化でコンテンツを見つけやすく
✅ モダンなデプロイ:自動 CI/CD。push すれば公開、サーバー保守不要
✅ 優れた性能:Lighthouse 95 点以上、初回表示 0.8 秒、UX も抜群
さらに重要なのは、Astro の核心理念——コンテンツ優先、性能至上——を理解したこと。この考え方はブログだけでなく、他の静的サイトにも応用できます。
次にできること
今すぐ行動(先延ばしにしない):
- 1 時間かけて実践。記事を見ながら手を動かす
- 最初の本当の記事を公開。テスト内容でも OK
- 友人や SNS で共有し、フィードバックを集める
応用機能(少しずつ):
- コメントシステム:Giscus(GitHub Discussions ベース)や Disqus
- 検索機能:Algolia DocSearch や Pagefind
- ダークモード:テーマ切替ボタン
- 閲覧統計:Google Analytics や Plausible
- 前後記事ナビゲーション:記事間の関連性を高める
学習リソース(Astro を深掘り):
- Astro 公式ドキュメント — 最も信頼できる資料。日本語版あり
- Astro 中文网 — コミュニティが維持する中国語ドキュメント
- Astro Paper — SEO に優れたブログテンプレート
- Astro GitHub ディスカッション — 質問と経験共有
コミュニティに参加(一人で戦わない):
- Astro Discord — 公式 Discord。活発
- GitHub で “awesome-astro” を検索。優れたリソース集が多数
- ブログ URL を Astro コミュニティの Showcase チャンネルで共有し、フィードバックを得る
最後に
ブログ構築で、技術は第一歩にすぎません。継続的な執筆の方がはるかに重要です。1 週間かけてフレームワークをいじり、2 記事で更新停止——そんな人をたくさん見てきました。Astro は技術的ハードルを最小限にしてくれます。残るのは、出力を続ける意志です。
実践中に問題があれば:
- Astro 公式ドキュメントの「Troubleshooting」を確認
- GitHub リポジトリの Issues でキーワード検索
- Astro Discord で質問(英語中心だが、中国語チャンネルもあり)
失敗を恐れないで。私も最初の Astro ブログ公開まで 3 日かかりました。一度慣れれば、保守は本当に楽です。
さあ、コマンドラインを開いて、Astro ブログの旅を始めましょう。
ゼロから Astro ブログを構築する完全フロー
1 時間で環境準備からデプロイまで。トップページ、記事一覧、タグ分類、RSS、SEO 最適化を含む
⏱️ 目安時間: 1 時間
- 1
ステップ1: 環境準備とプロジェクト作成
環境準備:
• Node.js 18 以上を確認(node -v でチェック)
• 未インストールなら nodejs.org からダウンロード
プロジェクト作成:
• 実行:npm create astro@latest my-blog
• テンプレートを選択(Blog テンプレート推奨)
• TypeScript を使うか(Yes 推奨)
• 依存関係をインストールするか(Yes)
開発サーバー起動:
• プロジェクトディレクトリへ:cd my-blog
• 実行:npm run dev
• http://localhost:4321 で確認 - 2
ステップ2: プロジェクト構成とレイアウト作成
プロジェクト構成:
• src/pages:ページファイル
• src/components:コンポーネント
• src/layouts:レイアウト
• src/content:Markdown 記事
レイアウト作成:
• src/layouts/BaseLayout.astro をベースレイアウトとして作成
- HTML 構造、ナビゲーション、フッターを含む
• src/layouts/BlogLayout.astro を記事レイアウトとして作成
- BaseLayout を継承し、記事用スタイルを追加 - 3
ステップ3: トップページと記事一覧の実装
トップページ:
• src/pages/index.astro でトップページを作成
• 最新記事一覧とカテゴリを表示
記事一覧:
• Astro の Content Collections を使用
• src/content/posts 配下の Markdown を読み込み
• 日付順に表示
ページネーション:
• 記事が多い場合はページネーションを実装
• 1 ページ 10 件表示
タグ分類:
• 記事 frontmatter から tags を抽出
• タグクラウドとカテゴリページを生成 - 4
ステップ4: 記事詳細ページと RSS の実装
記事詳細ページ:
• src/pages/posts/[...slug].astro で動的ルートを作成
• slug に応じて Markdown をマッチさせてレンダリング
Markdown レンダリング:
• Astro 組み込みの Markdown サポートを使用
• コードハイライト、リンク、画像などを自動レンダリング
RSS 設定:
• @astrojs/rss パッケージをインストール
• src/pages/rss.xml.ts で RSS フィードを生成
• 全記事のタイトル、説明、公開日時などを含める - 5
ステップ5: SEO 最適化とデプロイ
SEO 最適化:
• レイアウトに meta タグ(title、description、og:image など)を追加
• sitemap.xml でサイトマップを自動生成
• robots.txt を設定
性能最適化:
• Astro の Image コンポーネントで画像を最適化
• コード分割を有効化
• プリロードを設定
デプロイ:
• Vercel(GitHub 連携で自動デプロイ)
• Netlify(dist フォルダのドラッグ&ドロップ、または Git 連携)
• Cloudflare Pages(Git 連携で自動デプロイ)
• デプロイ後すぐアクセス可能。HTTPS 自動、グローバル CDN、無料枠あり
FAQ
なぜ Astro を選ぶのか?性能上のメリットは?
• 初回表示が 3.2 秒から 0.8 秒に短縮
• Lighthouse 100 点(以前の WordPress は 65 点)
• JavaScript サイズが 280KB から 20KB 未満に
• React フレームワークより 40% 速い
Islands アーキテクチャの要点:
• コンテンツ優先で JavaScript は必要なときだけ読み込み
• デフォルトは純粋な HTML+CSS
• インタラクティブが必要な箇所だけ JavaScript を配信
• React と Vue コンポーネントを混在可能
開発体験:Markdown で記事を書くだけ。データベースや CMS は不要。VSCode で Markdown を書き、GitHub に push すれば自動デプロイ。
Astro ブログをゼロから構築する手順は?
• Node.js 18 以上を確認
• npm create astro@latest my-blog を実行
• Blog テンプレート、TypeScript、依存関係インストールを選択
• cd my-blog でプロジェクトディレクトリへ移動
• npm run dev で開発サーバーを起動
プロジェクト構成:
• src/pages:ページファイル
• src/components:コンポーネント
• src/layouts:レイアウト
• src/content:Markdown 記事
レイアウト作成:
• BaseLayout.astro をベースレイアウトとして作成
• BlogLayout.astro を記事レイアウトとして作成
トップページと記事一覧:
• src/pages/index.astro でトップページを作成
• Content Collections で Markdown を読み込み
• 日付順に表示、ページネーションとタグ分類に対応
記事詳細ページ:
• src/pages/posts/[...slug].astro で動的ルートを作成
• slug に応じて Markdown をマッチさせてレンダリング
RSS 設定:
• @astrojs/rss パッケージをインストール
• rss.xml.ts で RSS フィードを生成
Astro ブログのコア機能はどう実装する?
• src/pages/index.astro でトップページを作成
• 最新記事一覧とカテゴリを表示
• Content Collections で src/content/posts 配下の Markdown を読み込み
記事一覧:
• 日付順に表示
• ページネーション(1 ページ 10 件)
• タグ分類(frontmatter から tags を抽出し、タグクラウドとカテゴリページを生成)
記事詳細ページ:
• src/pages/posts/[...slug].astro で動的ルートを作成
• slug に応じて Markdown をマッチさせてレンダリング
• Markdown レンダリング(コードハイライト、リンク、画像など自動)
タグ分類:
• frontmatter から tags を抽出
• タグクラウドとカテゴリページを生成
RSS:
• @astrojs/rss パッケージをインストール
• src/pages/rss.xml.ts で RSS フィードを生成
• 全記事のタイトル、説明、公開日時などを含める
Astro ブログの SEO と性能はどう最適化する?
• レイアウトに meta タグ(title、description、og:image など)を追加
• sitemap.xml でサイトマップを自動生成
• robots.txt を設定
性能最適化:
• Astro の Image コンポーネントで画像を最適化
• コード分割を有効化
• プリロードを設定
Astro の Islands アーキテクチャは性能最適化に天然適合:
• デフォルトは純粋な HTML+CSS
• インタラクティブが必要な箇所だけ JavaScript を配信
• 従来の React フレームワークより 40% 速く、JavaScript サイズは 90% 削減
Astro ブログはどうデプロイする?選択肢は?
Vercel:
• GitHub リポジトリと連携して自動デプロイ
• 無料、HTTPS 自動、グローバル CDN
Netlify:
• dist フォルダのドラッグ&ドロップ、または Git 連携
• 無料、HTTPS 自動
Cloudflare Pages:
• Git 連携で自動デプロイ
• 無料、グローバル CDN
デプロイ手順:
• npm run build で dist フォルダを生成
• 選択したプラットフォームに dist をデプロイ、または GitHub 連携で自動デプロイ
• デプロイ後すぐアクセス可能。HTTPS 自動、グローバル CDN、無料枠あり
Astro ブログに追加できる応用機能は?
• Giscus(GitHub Discussions ベース)や Disqus を統合
• 読者が記事下にコメント可能
検索機能:
• Algolia DocSearch や Pagefind でサイト内検索
• 読者が欲しいコンテンツを素早く発見
ダークモード:
• テーマ切替ボタンを追加
閲覧統計:
• Google Analytics や Plausible(プライバシー重視)を統合
• 記事の閲覧状況を把握
これらは対応する Astro インテグレーションをインストールするだけ。設定はシンプルで、性能への影響も小さい。
8分で読めます · 公開日: 2025年12月2日 · 更新日: 2026年6月8日
Astro 完全ガイド
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。
前の記事
Astro とは?3 分でわかるゼロ JS・アイランドアーキテクチャ・コンテンツ優先の本当の意味
Astro はコンテンツ優先のフレームワークです。ゼロ JS デフォルトとアイランドアーキテクチャでブログのパフォーマンスを 3 倍に引き上げます。Astro の核心理念、Next.js/React との本質的な違い、適用シーンの判断基準を解説します。
第 1 / 18 記事
次の記事
Astro Content Collections 完全ガイド:概念から Schema 検証の実践まで
Astro Content Collections の仕組みを深掘り。content.config.ts のゼロからの設定、Zod Schema による検証テクニック、型安全なコンテンツ管理の実装まで、完全なコード例とよくあるエラーの解決策を解説します。
第 3 / 18 記事
関連記事
Astro Markdown 応用:ブログをプロ品質に引き上げる 7 つの実践テクニック
Astro Markdown 応用:ブログをプロ品質に引き上げる 7 つの実践テクニック
おすすめ Astro ブログテーマ 5 選|インストール・設定チュートリアル付き
おすすめ Astro ブログテーマ 5 選|インストール・設定チュートリアル付き
Astro i18n 設定ガイド:30分で多言語サイトを実装(言語切り替え付き)
コメント
GitHubアカウントでログインしてコメントできます