こんにちは、えふてぃです!
普段はNext.jsでWebアプリを作ることが多いですが、今回はコンテンツ駆動のウェブサイト向けのフレームワーク「Astro」でこのブログを作ってみました。
結論から言うと、めちゃくちゃ良いです。
特に個人ブログを作るなら、Next.jsよりAstroの方が圧倒的に楽でした。今回はその理由と、実際に使ってみて感動したポイントを共有しますね。
🚀 Astroを選んだ3つの理由
1. ビルド時間が爆速!開発体験の良さに感動
まず驚いたのがビルド時間の速さです。このブログをビルドしてみたら:
[build] 12 page(s) built in 1.49s
[build] Complete!
たった1.5秒でビルド完了!Next.jsのプロジェクトだと10秒以上かかることも多いので、この速さは割と驚きでした。
さらに、Astroの設計思想が「Zero JavaScript by default」なので、生成されるサイト自体もかなり軽いです。
// Next.jsだと自動でReactがバンドルされる
// Astroは必要な部分だけJavaScriptを送る
といった感じですね。
2. Markdownファイルがそのまま記事になる快適さ
Next.jsあたりでブログを作ると、MDXの設定やらremark/rehypeプラグインの設定やらが面倒そうだ…。
Astroなら最初から全部入ってます(圧倒的感謝):
---
title: '記事のタイトル'
description: '記事の説明'
pubDate: 'Oct 17 2024'
---
## 見出し
本文をMarkdownで書くだけ!
しかも、Content Collectionsという機能で型安全に記事を管理できます。
// content.config.tsで記事のスキーマを定義
const blog = defineCollection({
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.coerce.date(),
categories: z.array(z.enum(['技術', '映画', '読書']))
})
});
これでタイポしたらビルド時にエラーで教えてくれる!TypeScript使いには最高です。
3. 必要な時だけReactが使える柔軟性
「でも動的な機能が欲しくなったらどうするの?」
これも大丈夫らしい。Astroはアイランドアーキテクチャを採用していて、必要な部分だけReactやVue、Svelteを使えます:
---
// 静的な部分はAstroコンポーネントで
import Header from '../components/Header.astro';
// 動的な部分だけReactを使う
import CommentSection from '../components/CommentSection.jsx';
---
<Header />
<article>
<!-- 記事の内容 -->
</article>
<CommentSection client:visible />
client:visibleで、コンポーネントが画面に表示されたタイミングでJavaScriptを読み込みます。賢い!
💡 実際に使ってみて感じたメリット・デメリット
メリット
- 爆速ビルド: 2秒でビルド完了。開発時に試しでブログ記事を20件とかにしても秒で終わりました。
- 画像最適化が自動:
astro:assetsで画像を自動でWebP変換 - デプロイが簡単: 今回はCloudflare Pagesにポチッとデプロイ
- SEO対策が楽: sitemap、RSS、OGP画像が最初から対応
デメリット
- 動的機能は工夫が必要: SPAを作りたいならNext.jsの方が向いてる
- アセット管理でキャッシュに注意: 画像を移動したらキャッシュクリアが必要なことも
🎯 おすすめできる人
- ブログやポートフォリオサイトを作りたい
- Markdownで記事を書きたい
- 余計な設定に時間をかけたくない
🛠️ 簡単!Astroブログの始め方
興味を持った方のために、最速でAstroブログを始める方法を紹介します:
# 1. プロジェクト作成(ブログテンプレート使用)
npm create astro@latest my-blog -- --template blog
# 2. 開発サーバー起動
cd my-blog
npm run dev
# 3. ブラウザで確認
open http://localhost:4321
📁 ちなみにプロジェクト構造はざっとこんな感じ
astro-blog/
├── src/
│ ├── pages/ # ページコンポーネント
│ │ ├── index.astro # トップページ
│ │ ├── about.astro # アバウトページ
│ │ └── blog/ # ブログ関連ページ
│ ├── content/ # コンテンツ管理
│ │ └── blog/ # ブログ記事(.md/.mdx)
│ ├── components/ # 再利用可能なコンポーネント
│ ├── layouts/ # レイアウトテンプレート
│ ├── styles/ # スタイルシート
│ └── assets/ # 画像などの静的アセット
├── public/ # 静的ファイル(フォント、favicon等)
├── astro.config.mjs # Astro設定ファイル
├── tsconfig.json # TypeScript設定
└── package.json # プロジェクト依存関係
まぁわかりやすいフォルダ構成だーって感じです。
💡 実際に遭遇した小ネタ
Viteベースで爆速開発環境
- Astroはお馴染みViteを使ってるから開発サーバーの起動が爆速
- ホットリロードも一瞬で反映される。ブログ作成の上でこれは地味にありがたいポイント。
キャッシュでハマった話
- 画像ファイルを移動したら謎のエラーが…
.astroフォルダにキャッシュが残ってた- もしやと思い
rm -rf .astroでキャッシュクリアしたら解決!
これだけで、このブログとほとんど同じような構成のサイトが立ち上がります!
まとめ:個人ブログならAstro一択かも
Next.jsは自分で自由にできる反面、個人ブログには少しオーバースペック気味になってまう。
Astroなら:
- 設定不要で始められる
- 爆速サイトが作れる
- Markdownで快適に記事が書ける
もし個人ブログを作ろうと思っているなら、ぜひAstroを試してみてください。きっと・・・多分気に入るはずです!
P.S. (小声)でも静的ブログ以外だと自分は使わなそうなのでこれがAstroとの一期一会開発なのかもしれない涙