公開面にPHPもDBも置かないCMSを作った。向くものと、向かないもの

WordPressの復旧を179件引き受けてきて、原因がいつも同じところにあると分かりました。そこで作ったCMSの中身と、向かない用途を書きます。

この記事の結論

  1. 公開サイトにPHPもデータベースも置かないCMSを作った
  2. 動機はWordPressの復旧を179件やって、原因が同じだったこと
  3. 向かない用途もある。そこも書く
  • 公開サイトにPHPもデータベースも置かないCMSを作った
  • 動機はWordPressの復旧を179件やって、原因が同じだったこと
  • 向かない用途もある。そこも書く

最初に立場を書いておく。これは自分たちで作ったものの紹介になる。無料で配っているが、宣伝であることに変わりはない。

そのうえで、できないことを隠さずに書く。このサイトでずっと他社の発表を「何が書かれていて、何が書かれていないか」で読んできた以上、自分のものだけ都合よく書くわけにはいかない。

なぜ作ったのか

北海道でWebの仕事を14年やってきて、いちばん多く引き受けたのがWordPressの修理だった。

  • エラーで表示されなくなったサイトの修理と復旧が179件
  • 止まったサイトを復活させ、ウイルスを取り除く仕事が27件
  • WordPressの引越しが33件

何度もやっていると、原因がいつも同じところにあると分かってくる。

管理画面も、本体も、プラグインも、訪問者に見せるページと同じサーバーの上で動いている。だからプラグインの更新が止まった瞬間に狙われる。

1件ずつ直しても、この構造が変わらない限り同じことがまた起きる。

この秋、それが目に見える形になった

10月だけで、このサイトでは不正アクセスの公表を何本も扱った。2,335万人、2,251万件、1,118万件。

規模は違っても、共通していたのは「公開されている側から、裏の仕組みに手が届いてしまう」ことだった。

SPONSORED

やったこと

役割を分けた。編集は管理画面で行い、公開するのは書き出した静的HTMLだけにする。

一般的な動的CMSこの形
訪問時の処理アクセスのたびにサーバーでページを組み立てる何も動かない。書き出し済みのファイルを返す
公開サイトにあるものPHP、データベース、プラグインHTMLとCSSと画像だけ
守る対象公開サイト全体ログインの内側にある管理画面ひとつ

公開ボタンを押したときに一度だけページを書き出す。訪問者が受け取るのは、その結果だけになる。

結果として変わること

  • 狙われる面が小さい。訪問者のアクセスで動くプログラムが無い
  • 速い。組み立てる処理が無いので、ファイルをそのまま返す
  • 壊れにくい。管理画面を止めて作業している間も、公開中のページは表示され続ける

3つ目が地味に効く。直している最中にサイトが落ちない。

向かない用途

ここが本題になる。公開面でプログラムが動かないということは、裏返せば動かせないということだ。

やりたいことこの形だと
会員登録・ログインが要るページ公開面では作れない
リアルタイムの在庫や予約状況の表示公開した時点の内容で固定される
訪問者が投稿する機能(コメント、口コミ)外部のサービスに頼ることになる
問い合わせフォームの送信別のサービスが要る。無料枠があるものもあるが、追加費用になりうる
会員ごとに違う内容を出すできない

つまり更新する内容が決まっていて、訪問者は読むだけという使い方に向いている。店舗、士業、クリニック、工務店、会社案内。そのあたりが対象になる。

逆に会員制のサービスや、在庫が動く通販をやりたいなら、この形は選ばないほうがいい。

もう一つの制約

公開ボタンを押すまで反映されない。書いた瞬間に公開される仕組みではない。

確認してから出せるという意味では利点だが、急いで1行だけ直したいときに、ひと手間増えるのは事実になる。

いま実装されているもの

売り文句ではなく、管理画面で使える機能として挙げる。

  • ブロックエディタ — 基本ブロック11種とデザイン済みセクション15種
  • 業種別デザイン10種 — 選ぶと全ページ入りで始まる
  • プレビュー — PC / タブレット / スマホの3幅。リンクも辿れる
  • 3要素の認証 — メール+パスワード+認証アプリ。5回失敗で15分ロック
  • 監査ログ — 誰がいつ何をしたかを記録
  • リビジョン30世代 — 差分を見て復元できる
  • 画像の実体検証 — 拡張子ではなく中身で判定し、再エンコードして保存
  • 署名付きワンクリック更新 — 検証してから適用し、失敗したら自動で元に戻す
  • 多言語 — 管理画面7言語、公開サイトの言語切り替え
  • WordPressからの移行

AI検索への対応も入れた

このサイトでサイトマップとrobots.txtを見直したときにやった作業を、そのまま機能にしている。

  • llms.txtの自動生成
  • 構造化データ(JSON-LD) — 店舗・FAQ・営業時間・記事
  • AIクローラーの許可 / 拒否の切り替え
  • 公開前の見出しの階層・description・altのチェック

すべて静的ファイルとして書き出すので、外部サービスは要らない。

AIによる編集支援もあるが、既定はオフで、使うには自分のAPIキーが要る。送信する内容は送信前に画面で示す形にした。仕事で使うときの線引きで書いたことを、そのまま設計に入れている。

動く環境と、かかる費用

項目内容
PHP8.2以上(8.3推奨)
データベースSQLite。DBサーバーは不要
公開先同じサーバーの public_html か Cloudflare Pages
設置zipを置いて /cms/install/ を開く
価格無料。商用利用可
バージョン0.9.0

0.9.0であること

正直に書くと、まだ1.0ではない。動作確認はXserverとローカル環境で取っているが、あらゆるサーバーで試せているわけではない。

いま入れるなら新しく作るサイトか、止まっても困らないサイトから始めるのが現実的だと思う。

維持費について

ドメインとレンタルサーバーだけなら、月1,000〜1,500円程度が目安になる。ただし追加でかかる場合もある。

  • 問い合わせフォームの送信にメール送信サービスを使う場合
  • 有料の写真素材や撮影を依頼する場合
  • 原稿づくりや初期設定の一部を人に頼む場合
  • ドメインやサーバーの特典期間が終わった場合

運営の仕方も書いておく

無料で配っているものは、どこかで費用を回収しているはずだと思って読むのが正しい。

この場合は、ホームページ準備ガイド内のアフィリエイト広告(ドメイン・サーバーの紹介)で支えている。広告には「PR」と表示している。

それと、設置の代行は有料にしている。自分で設置できるなら要らない部分になる。

まとめ

  • 公開サイトにPHPもデータベースも置かない。訪問者に届くのは書き出したHTMLだけ
  • 動機は復旧を179件やって、原因が同じ構造にあると分かったこと
  • 会員制・リアルタイム・訪問者の投稿には向かない
  • フォームの送信には別のサービスが要る
  • 公開ボタンを押すまで反映されない
  • PHP 8.2以上とSQLite。DBサーバーは不要
  • 無料・商用利用可。ただしバージョンは0.9.0
SPONSORED

出典

  • 白樺 SHIRAKABA CMS 公式サイト(機能、動作要件、設置方法、維持費の目安、よくある質問、ライセンスとバージョン。2026年10月18日に確認)

本記事は自社プロダクトの紹介であり、宣伝を含む。機能とバージョンは2026年10月18日時点のもの。維持費の目安は各社の公表価格に基づくもので、契約条件により変わる。本記事は法的な助言ではない。

新しい記事が出たら、ブラウザの通知でお知らせします。

メールアドレスの登録は要りません。いつでも止められます。

AUTHOR

北海道のWEB屋

北海道を拠点に、Web業界14年・サポート実績1,000件以上。WordPressの復旧、サーバー移転、独自ドメインとメールの設定、PHP・JavaScriptの修正まで対応します。相談と見積もりは無料です。

SPONSORED

関連記事

RELATED