Astroをはじめたけど、やめました


とAstro使いながら言っても説得力ないですが、現在 Next で構築中です Next.jsに移行しました。

以前から「ブログを自分で作りたい」という気持ちがあり、Astro + MicroCMSの構成を試してみました。

ただ、使っていくうちにちょっと合わないなと感じる部分が出てきて、結局やめることにしました。この記事はその話です。

Astroとは

AstroはコンテンツサイトやブログにフォーカスしたWebフレームワークです。

デフォルトでJavaScriptの配信量が少なく、静的サイトの生成が得意です。

ReactやVueなど他のフレームワークのコンポーネントも組み合わせて使えるのが特徴で、「Islands Architecture」という考え方を採用しています。

microCMSとは

microCMSは日本製のヘッドレスCMSです。

管理画面から記事を作成・編集でき、APIを通じてコンテンツを取得する仕組みになっています。

WordPressのようにサーバー側でHTMLを生成するのではなく、フロントエンドのフレームワークと自由に組み合わせられるのが特徴です。

日本語のドキュメントが充実していて、個人開発でも使いやすいサービスです。

なぜAstroを選んだか

ブログを作るにあたって、最初にAstroを選んだのはシンプルな理由です。

「ブログに特化したフレームワーク」として名前をよく見かけていたこと、
そしてフロントエンドエンジニアとして新しいツールを触ってみたかったというのが正直なところです。

使ってみて感じたこと

実際に使ってみると、セットアップはスムーズで、ドキュメントも充実していました。

ただ、気になったのが「記事を更新するたびにビルドが必要」という点です。

AstroはデフォルトがSSG(静的サイト生成)のため、記事を公開・更新するたびにサイト全体をビルドし直す必要があります。
Webhookで自動ビルドは設定していたものの、それでもどこか煩わしさを感じていました。

SSRモードに切り替えれば解決できますが、Cloudflare PagesでのNext.js SSRはEdge Runtimeの制約が大きく、
Cloudflare自身も現在はPages単体ではなくOpenNext + Cloudflare Workersでの運用を推奨しています。

Astroでも同様の制約を抱えることになるため、どちらにせよホスティング構成を見直す必要が出てきます。

それなら最初からNext.jsで組んだほうが、自分には馴染みがあってシンプルだと感じました。

Next.jsに移行することにした

なので、次の構成を考え始めました。

普段から使い慣れているNext.jsなら、ISR(増分静的再生成)やOn-demand Revalidationを使うことで、ビルドなしで記事を自動反映できます。

ホスティングはCloudflare Workersを選び、Next.jsをWorkers上で動かすためのアダプターであるOpenNextを使って現在構築中です。

ブログ運用としてはかなり快適になりそうです。

まとめ

Astro自体は素直に使えて、セットアップもスムーズでした。

ただ、一番のネックはビルド運用です。記事を公開・更新するたびにビルドが走るため、実際に記事が反映されるまでに時間がかかります。
「ちょっと修正したい」という場面でもビルド待ちが発生するのは、思ったより気になりました。

SSRに切り替えれば解決できますが、Cloudflare PagesではNext.jsのSSRに制約が多く、ホスティング構成ごと見直す必要がありました。

それならいっそ、使い慣れたNext.jsで作り直す方がシンプルだと判断しました。

現在はNext.js + Cloudflare Workers(OpenNext)の構成で構築中です。
次回以降ではその移行過程を書いていこうと思います。