
【実践レポート】ブログをAstroで作ってみた!驚くほど快適な開発体験を徹底解説
📑 目次
こんにちは、KnowHack(ノウハック)です。
このブログはAstroというフレームワークで作っています。今回は実際の開発を通して感じたAstroの特徴と利点について、具体的な実装例を交えながら解説していきたいと思います。
選択の背景:Next.js vs Astro
フレームワークの選定において、「Next.jsで実装するか、Astroで実装するか」という判断で悩みました。Next.jsはReactベースで広く使われているフレームワークであり、私自身も開発経験がありました。
しかし、今回はブログサイトという特性上、複雑なインタラクションはそれほど必要なく、コンテンツの表示を最優先したかったため、Astroを採用することにしました。
Astroを採用して感じた5つの利点
1. サーバーサイドレンダリングの設計思想
最近のNext.jsでは、Client ComponentsとServer Componentsの使い分けを意識する必要があります。一方、Astroは基本的にサーバーサイドでレンダリングされる設計になっているため、その判断に悩む機会が少なくなります。
「このコンポーネントはクライアントで実行すべきか、サーバーで実行すべきか」という判断が不要になることは、開発効率の観点で大きなメリットでした。
2. 柔軟なReactコンポーネントの統合
例えば、このブログのモバイルメニュー(ハンバーガーメニュー)はReactコンポーネントを使用していますが、Astroではこれが非常にシンプルに実装できます。
---
// モバイルメニューだけReactを使う例
import MobileMenu from '../components/MobileMenu.jsx'
---
<header>
<!-- 通常のAstroコンポーネント -->
<nav class="desktop-menu">...</nav>
<!-- Reactで作ったモバイルメニュー -->
<MobileMenu client:load />
</header>
このように、必要な箇所だけReactを活用できる柔軟性は、実装の自由度を高めています。
3. マークダウンによる固定ページの管理
運営者情報ページやプライバシーポリシーなどの固定ページは、マークダウンで管理できます。Astroにはこの機能が標準で組み込まれており、フロントマターでメタ情報も設定できるためSEO対策も容易です。
---
title: プライバシーポリシー
description: KnowHackのプライバシーポリシーについて
---
# プライバシーポリシー
...
4. 充実した標準機能
ブログに必須のページネーション機能も、Astroには標準でAPIが用意されています。
export async function getStaticPaths({
paginate,
}: {
paginate: PaginateFunction;
}) {
const posts = await getPosts({
fields: "id,title,category,eyecatch,publishedAt",
limit: 100,
});
return paginate(posts.contents, { pageSize: POSTS_PER_PAGE });
}
他にも画像の最適化機能とか、必要な機能が揃ってるのが嬉しいポイントです。
5. 優れた開発体験
Next.jsでは開発が進むにつれて環境が重くなる傾向がありましたが、Astroは一貫して高速な開発環境を維持できました。
特にホットリロードの速度は印象的で、開発効率の向上に大きく貢献しています。
パフォーマンスの実測値
Astroには「Fast by default(デフォルトで高速)」という設計思想があり、具体的な数値でもその効果が表れています。
- JavaScriptの使用量が90%削減(Next.jsとの比較)
- ページ読み込み速度が40%向上
特別なパフォーマンスチューニングを行わなくても、このような優れたパフォーマンスを実現できる点は注目に値します。
でも、全てのケースでAstroがベストなわけじゃない
ただし、以下のようなケースではNext.jsの方が適している可能性があります:
- ダッシュボードのような複雑なUIが必要な場合
- リアルタイムでのデータ更新が必要な場合
- 複雑な状態管理が必要な場合
一方で、ブログやドキュメントサイト、ランディングページのようなコンテンツ主体のサイトでは、Astroの特徴を最大限に活かすことができます。
まとめ
実装を通じて、Astroの開発体験は当初の期待を上回るものでした。特に以下のようなニーズがある場合に有効です:
- パフォーマンスの最適化
- 効率的な開発環境の構築
- マークダウンベースのコンテンツ管理
- 必要に応じたReactの部分的活用
次回のプロジェクトでの採用を検討される際の参考になれば幸いです!
最後まで読んでいただき、ありがとうございました。