CMSとは?サイト全体に入れず、ニュースだけ更新する設計とCloudflare

CMSは記事や画像を管理する仕組みで、サイト全体に入れる必要はありません。会社案内を静的に配信し、ニュースなど更新する部分だけにCMSを使う設計も選べます。ただし、編集する範囲と、サーバーで処理を動かす範囲は別に決める必要があります。CloudflareとEmDashを例に、その分け方を説明します。
担当者が記事や画像を更新するときに使う仕組み、CMS
会社の休業日をホームページへ載せたいときは、ページのコードを直す代わりに、管理画面でタイトル・本文・画像を入力して公開します。この更新作業を支えるのがCMSです。正式にはContent Management System、日本語ではコンテンツ管理システムといいます。
CMSを入れる範囲は、制作時に決められます。会社概要やサービス紹介は固定しておき、担当者が書き換えるニュースだけに入力欄を用意する構成も選べます。ページ全部を編集できるようにしなくてもよいんですよ。

下の画面は、RealAIzeで使っているニュースの入力画面です。タイトル、一覧画像、本文を分けておくと、担当者は更新に必要な欄へ入力できます。ヘッダーやページ全体のレイアウトを触る必要はありません。

ただ、会社概要も頻繁に変わるなら、そこをCMSで編集できるようにする意味があります。小さくすること自体を目的にせず、誰がどこを更新するかで範囲を選びます。
「CMSで編集する範囲」と「ページの配信方法」は別に決める
ここで混同しやすいのが、CMSに入れたページは必ず動的で、それ以外は必ず静的だという見方です。編集する仕組みと、訪問者へページを届ける仕組みは分けて設計できます。
静的配信は、前もって作ったHTMLなどのファイルを返す方式です。動的配信は、アクセスを受けてからデータを読み、ページを作る方式。例えば、全員に同じ会社概要を見せるなら、閲覧のたびに本文を作り直さなくても済みます。Astroの配信方式の説明

静的サイトを「実行能力のないサイト」と呼ぶと、少し誤解が生じます。事前に作ったページでも、ブラウザー側ではメニューやアニメーションのJavaScriptが動きます。問い合わせフォームが外部の処理を呼ぶこともあります。
減らせるのは、ページを閲覧するたびにサーバー側で動かす処理です。入力を受ける処理やデータベースへのアクセスを減らせば、その部分を狙う攻撃の入口も減らせます。ただし、配信アカウントの乗っ取りや読み込む外部スクリプトなど、別のリスクへの対策は残ります。
会社案内は静的なまま、ニュースと管理機能だけ必要なときに動かす
企業サイトなら、会社概要・サービス紹介・プライバシーポリシーを事前生成し、ニュースはCMSから内容を読んで表示する構成が考えられます。固定したページは静的に返し、ニュースの表示や更新に必要なところで処理を動かす形です。
動的な部分はニュースの公開ページだけではありません。記事を保存する管理画面、データをやり取りするAPI、画像の配信経路、問い合わせの送信処理も確認します。「ニュースだけCMS化したから、守る場所もニュースだけ」とはならない点に注意してください。

EmDashは、AstroというWebサイトを作る仕組みに組み込むCMSです。標準では公開サイトと管理画面が同じアプリ、データベース、画像の保存先を共有します。管理画面などを動かすサーバー出力を使いながら、固定ページを事前生成する設計が可能です。EmDashの構成
つまり、ニュースだけを編集対象にすることと、CMSを別の実行環境へ隔離することは違います。URLを分けただけで、ほかのページへ被害が絶対に及ばなくなるわけではありません。実行環境や権限まで分離する必要がある場合は、構築時に別途設計します。
Cloudflareなら、静的なファイルとプログラムを一緒に扱いやすい
Cloudflare Workersには、プログラムと一緒にHTML・画像などの静的アセットを配信する機能があります。標準の動作では、URLに一致する静的ファイルがあれば、Workerのコードを呼ばずにそのファイルを返します。特定のURLだけ先にWorkerで処理する設定もできます。Workersの静的アセットとURLごとの振り分け
会社案内はファイル配信、ニュースはCMS、フォームは送信処理と、同じ基盤の中で組み合わせられます。この構成を選べるので、Cloudflareと部分的なCMS導入は相性がよいと考えています。
ただし、EmDashを設置するだけで固定ページがすべて静的になるわけではありません。Astro側のページ設定と、Cloudflare側の配信経路をそろえる必要があります。静的に配信するページに、毎回最新の記事やログイン中のユーザー情報を埋め込むなら、その扱いも決めておきます。
また、非公開の下書きや管理画面を、公開ファイルと同じように誰にでも配信してはいけません。公開用のページと認証が必要な画面で、配信やキャッシュの設定を分けます。
ニュースを静的に配信するときも、公開後に再生成する流れを組み込む
CMSで管理している記事でも、内容を取り出してHTMLを事前に作れば、静的に配信できます。担当者には管理画面を用意し、閲覧者には完成したページを届ける、というイメージです。

この方式では、CMSで公開ボタンを押しただけでは古いHTMLが残ります。ページを作り直す再ビルドと、配信先への反映が必要です。EmDashの公式説明でも、事前生成したページは再ビルドするまで変わらないと案内されています。EmDashで記事が表示される仕組み
公開をきっかけに再生成する自動処理を設定すれば、担当者の手作業は減らせます。ただし、その仕組みの構築や、再生成に失敗した場合の通知も必要です。更新直後に見せたいのか、反映まで少し待てるのかで、動的に表示する方式と比べて選びます。
CMSと配信基盤を組み合わせる考え方は、WordPressにも使える
WordPressでも、ニュース用の場所だけで運用したり、記事データを別の公開サイトへ渡したりできます。公式のREST APIは、別のアプリからコンテンツを扱うための窓口です。これを使って記事を取り出し、静的なページを作る構成も設計できます。WordPress REST API
WordPressはCMS、Cloudflareは配信や実行の基盤なので、どちらか一方しか選べない関係でもありません。WordPressとCloudflareを組み合わせる選択肢もあります。既存の編集画面やプラグインを継続したいなら、それを使う構成から比較してよいと思います。
新しくAstroとEmDashで作る場合は、静的ファイルの配信と、CMSを動かすWorkersをCloudflare上でまとめて設計できます。ここが「組み合わせやすい」といえる理由です。WordPressではできない、あるいはどの案件でも工数が少ない、という意味ではありません。
制作を依頼するときは、更新するページ、その担当者、反映までに待てる時間、フォームなどの必要な機能を伝えてください。「サイト全体をCMSにしてください」だけでなく、「ニュースは担当者が随時更新し、会社案内は変更時に制作会社へ依頼したい」と伝えると、編集と配信の範囲を決めやすくなります。
安全性の仕組みはEmDashとCloudflareの防御、日々の更新担当の役割はEmDash移管後のサイト運営も参照してください。
よくある質問
静的なサイトでも問い合わせフォームを置けますか?
置けます。フォームの画面を静的に配信し、送信先にはWorkerや外部のフォームサービスなどを使えます。その送信処理には、入力内容の検証や迷惑送信への対策が必要です。
CMSで公開したニュースは、すぐサイトに出ますか?
配信方式によります。CMSから記事を読んで動的に表示するページでは、公開後のアクセスに反映できますが、キャッシュの扱いも確認します。事前生成したページでは、再ビルドと配信への反映が必要です。
ニュースのURLを分ければ、CMSも完全に隔離できますか?
URLを分けるだけでは完全な隔離になりません。EmDashは標準では公開サイトと管理画面が同じアプリやデータの保存先を共有します。隔離が必要なら、実行環境と権限を含めて設計します。
会社概要も後からCMSで更新できるようにできますか?
できますが、入力欄を用意し、その内容を公開ページへ表示する改修が必要です。頻繁に変わる情報か、誰が更新するかを確認してから追加すると、日々の操作を絞れます。