AIを使ってブログをCMSごと作り直した話
レンタルサーバーを引っ越しました。
今まではPHP7.4で動作していたため、ついでにPHP8.Xで動作するようにブログを修正したかったのです。

今までの動作環境
ブログ作成に使用していたCMSは割とマイナーな
GetSimple CMS
というものです。PHP製でデータベースを使用しないという特徴があります。
選択理由は
- 管理が面倒ではない(運用の簡略化): データベースの設定や保守が必要ないため、システム構築や維持における手間が少なくなります
- セキュリティ上のリスク軽減: 使用していたCMSがマイナーであったことも理由の一つですが、データベースを使用しない構成は、一般的なデータベースを狙った攻撃を受けにくいという特徴があります
- カスタマイズの容易さ: システムがシンプルであるため、独自の改造が比較的簡単に行えます
です。

GetSimpleでは、ブログのコンテンツはどこに保存されるのかといえば、XMLファイルに保存されています。
このGetSimpleを魔改造した上に、Bootstrap4でフロントを構築していたものが、旧環境になります。
バージョンアップは無理だが移行はしたい
魔改造してあるので、バージョンアップして差分を反映…って躊躇しますね。とてもできません。
なので、とりあえず今のままブログを公開できることを目標とします。

最初に一つのページを選び、ブラウザのソースからHTMLを持ってきて静的ファイルとして保存します。
そのHTMLをAIを使ってBootstrap4→Bootstrap5に変換してもらいます。

Twigテンプレート変換
ここでcomposerを用いてtwigをインストールします。
先ほど変換したHTMLの本文の部分は切り抜いて、継承元のtwigファイルを作ります。
あとは継承元のtwigファイルを使った、各ページのtwigファイルをAIに作ってもらいます。
変換元はGetSimpleのXMLで、テンプレートファイル名はページのスラッグとします。

しばらく待つだけで全部のページができました。うーん、AI使うと楽だね。

ルーティング
各ページをブログとして表示するためには、URLのスラッグに対応するテンプレートを読んで出力する部分を作ればOKです。
個々のページはそれでよいのですが、インデックスページをどうするかという問題が残りました。

GetSimpleはページのリストもXMLで管理しているので、AIを使ってXMLをJSON形式に変換してもらいました。
ブラウザからURLを受け取った後、JSON内に対応するスラッグがあれば、存在しているページということでテンプレートを読みに行きます。これで個々のページに対応するルーティングは完成です。
カテゴリ、日付、タイトルなどもJSONで同時に管理して、インデックスページは自動出力する方式としました。以前までは手作業でインデックスページを作っていました。
とここまで作らせて、JSONで管理する意味がまるでないので、JSONからPHPの配列に変換してもらってPHPの配列そのままで管理する方式としました。

細々した機能
あとは、sitemap.xmlとかあったわ。ということでAIに一瞬で作ってもらいました。 sitemap.xmlのキャッシュとページのリストを管理するPHPファイルの更新時間を比較して、古い場合のみキャッシュを作り直すことにしました。
と、この記事を書きながらアクセス解析もあったわ。ということでAIにまたも一瞬で作ってもらいました。ブログ組み込みです。

WYSIWYGエディタどうする?
これで90%AI製のCMS?が公開できたのはいいのですが、どうやって新しいブログを書くのか?という問題が残っていました。
WYSIWYGエディタを組み込もうと思ったのですが、ピンときたものがなかった(組み込む手間に対してリターンが少ない)ので、Markdownで書くことにしました。

「VSCodeを使ってMarkdownで書く→AIにTwigテンプレートに変換してもらう」でいいんじゃないの!ということで、この記事はMarkdownで書いています。

WYSIWYGエディタで書いても、途中でHTMLモードに切り替えて記述したり、非公開モードでブラウザを見ながらHTMLモードで調整していたので、今後は直接テンプレートを編集できるようになったのでかなり手間が減りました。

終わりに
Bootstrap4+jQuery+GetSimpleからBootstrap5+オリジナルになりました。
見た目はほぼ変わっていないですが、裏では自動制御が多くなってとても楽になりました。
今のところメリットは
- php -Sを使えばローカルでブログがそのまま起動するので、調整が簡単
- Gitで丸ごと管理できるのでソース管理とバックアップが同時にできる
- ブログのカスタマイズもAIに丸投げできるので全く苦労しない
です。デメリットは特にないですね。

一般的にDBを使わないデメリットは「検索・ソートでDBの機能が使えない」「複数ユーザーでの管理」等ありますが、個人の小規模ブログにおいては全く関係ない話ですし、むしろDBアクセスがない分かなり高速になっているはずです。
キャッシュされてるテンプレートを表示しているだけなので。