同じデザイン・同じ中身のコーポレートサイトを、3つの構成で作りました。部品・CSS・記事3件はすべて共通で、違うのはCMS(記事の置き場所と表示のしかた)だけです。

DEMOSデモ

A

Astroのみ

  • 記事は Markdown(Git で管理)
  • 表示は静的HTML
  • 管理画面なし

https://cms-static.pages.dev

B

Astro+microCMS

  • 記事は microCMS(クラウドのCMS)
  • 表示は静的HTML(公開時に再ビルド)
  • 管理画面は microCMS

https://cms-microcms.pages.dev

C

Astro+EmDash

  • 記事は EmDash(サイトと同じサーバーのDB)
  • 表示はサーバー(公開した瞬間に反映)
  • 管理画面は /_emdash/admin

https://cms-emdash.masanari-nagayama.workers.dev

COMPARE比較表

観点A. AstroのみB. +microCMSC. +EmDash
構成Astro+Markdown(Git)Astro+microCMS(API)Astro+EmDash(SQLite/D1)
記事を書く人制作会社(Markdown・Git)お客様(管理画面)お客様(管理画面)
管理画面なしmicroCMS(クラウド)EmDash(サイトと同じサーバーの /_emdash)
反映の速さ依頼 → 編集 → ビルド・公開(数分+依頼待ち)公開 → Webhook で再ビルド(1〜数分)公開した瞬間
公開先静的ホスティング(Cloudflare Pages 等)静的ホスティング+Webhookサーバーが必要(Workers+D1+R2/Node)
月額0円〜¥0(Hobby)/業務は ¥4,900〜(Team)$5程度(Workers 有料)
保守の重さ軽い(Astro の更新のみ)軽い〜中(APIキー・Webhook の管理)重め(本体の更新・DB・管理画面のセキュリティ)
向いている案件更新が少ないLP・サイト。更新は制作側で受けるお知らせ等をお客様が更新するコーポレートサイト即時反映や WordPress 的な運用を求める案件(要検証)

※ 叩き台です。定例で話し合って直します(apps/hub/src/data/hub.ts)

RESULTSdocs/比較記録.md の内容

比較記録

記入者:     実施日:

1. 同じ作業を3つでやってみる

# 作業 A. Astroのみ B. +microCMS C. +EmDash
1 お知らせを1件追加(画像付き):手順数・時間
1’ 公開してからサイトに出るまでの時間 約2分半(Git に push → Pages が再ビルド) 約40秒(公開 → Webhook → Pages が再ビルド。Webhook 未登録だと反映されない) 即時(保存・公開した瞬間。ビルドなし)
2 公開済みの記事を直す:手順数・時間
3 下書き → プレビュー → 公開(できるか・どこで見るか)
4 公開予約(できるか)
5 AIに下書きを作らせる(MCP。どこまで任せられるか)
6 お客様役(制作以外の社員)が1件追加:迷った場所・質問
7 記事を消して元に戻す(戻せるか・どこまで)
8 Astro・EmDashの更新:作業時間・壊れたところ

2. 数字で比べる

項目 A B C
Lighthouse(パフォーマンス/SP)
トップページの転送量
ブラウザに送られるJSのファイル数
ビルド時間 約1.3秒(記事3件・画像6枚) 約2.5秒(API取得+画像ダウンロード込み) 約5.1秒(サーバー用。記事はビルドに含まれない)
月額費用(CMS+公開先) 0円〜 ¥4,900〜(業務はTeam) $5程度(Workers有料)
外に出ている管理画面・API なし なし(microCMS側) あり(/_emdash)

3. 気づき・お客様役の感想

  • 【B】microCMS の日時は UTC で届く(例:2026-10-14T15:00Z)。日本時間に直さないと表示が1日前にずれる → 共通の日付処理(packages/ui/src/lib/date.ts)で対応済み
  • 【B】microCMS のリッチエディタの HTML は Markdown の出力と書き方が違う(表のセルに <p>、見出しに付けた太字は <strong> が残る)。本文のCSSは両方で崩れないことを確認したが、入稿時の装飾(見出しの太字など)はそのまま見た目に出る
  • 【B】記事は check/dev/build のたびに API から取得するため、.env(APIキー)がないと型チェックも通らない
  • 【C】記事の修正はビルド不要で即反映(CLI で記事タイトルを変更 → 再読み込みで反映を確認)。代わりにサイトは常時サーバーで動かす必要がある
  • 【C】seed(初期データ)の画像は URL からしか取り込めない。ローカルのファイルは管理画面か CLI(emdash media upload)で上げる
  • 【C】記事は初回設定(管理画面)を終えた時点で入る。初回アクセスで入るのはスキーマだけ
  • 【C】日時フィールドは文字列で届く・ローカル保存の画像は URL を持たず保存キーだけ、など「共通の形」に直す処理は3つの中で一番多い
  • 【C】本文の表は EmDash の表の部品が独自のスタイルを持つため、static と見た目が少し違う(セル余白・見出し背景・縞模様)
  • 【C】管理画面・API が /_emdash でサイトと同じドメインに公開される(公開時はアクセス制限の検討が必要)
  • 【C】Cloudflare(Workers)版のサイズは圧縮後 5.1MB で、無料プランの上限 3MB を超える。管理画面の翻訳(36言語・約2.4MB)を admin: { locales: ['ja'] } で日本語だけにすると 2.7MB になり無料に収まる(余裕は約0.3MB。EmDash の更新で超える可能性あり)
  • 【C】Cloudflare への初回デプロイ:本番の初回アクセスは DB の準備で 73秒かかったが、エラー(CPU超過)にはならなかった。2回目以降は 0.1〜0.4秒
  • 【C】Cloudflare 版では、管理画面のログイン状態の保存に KV、画像変換に Cloudflare Images が自動で使われる(どちらも無料枠内)。API トークンに KV の権限が必要だった
  • 【B】Webhook を登録する前に公開しても、サイトはまったく変わらなかった(microCMS 側は公開済みなのに本番は古いまま)。Webhook の設定漏れに気づきにくい
  • 【全体】Cloudflare Pages の環境変数がビルドに渡らず、hub のリンクが localhost のままになった。秘密でない値は .env.production に書いて Git に入れる方式に変えて解決

SCREENSHOTS管理画面のスクリーンショット