一応の完成
このサイトは 最初の投稿 も書いた自作の静的サイトジェネレータで作っているのですが、当面欲しい機能というのは用意できたかなと思っています。
あとやろうとしていること(残していること)は以下のものです:
- CSS を自分でかく (今のCSSはAIに生成してもらったやつなので、自分好みに作り直す。)
- Pushしたら自動で本番サーバに適用する。 (Drone/Woodpecker を立ててCDする)
自身の学習的な観点から、マークダウンパーサーもどこかで挑んでみようと思います。
採用パターンと問題点
生かされていないビルダー/ストラテジーパターン
各ページ(投稿ページ・一覧ページ・Aboutページ)や、RSS、Sitemapは対して持つべきデータに差異はなく、ただ見せ方が違う程度だと思って、レンダラーとかビルダーを交換できるようにしたのですが、結局あまり共通するところはなく、無駄に複雑になってしまったように思います。
やっぱりパターンを見出すまでは変な抽象化には手を出さない方が良いってことでしょうね...反省です。
<?php
// 投稿ページ用のビルダー
$postRenderer = new Renderer($config, $page, new PostBuilder($config, $page, 'pages/page.php'));
// インデックスページ用のビルダー
$indexRenderer = new Renderer($config, $indexPage, new PageIndexBuilder($config, $indexPage, $postPages));
// RSS用のビルダー
$rssRenderer = new RssRenderer($config, new RssBuilder($config, $postPages));
テンプレート
レンダラーは以下のようにレンダリング対象を呼び出しているのですが、結局 templates/layout.php の中で getContents して、ビルダーでサブレンダリングするものですから、ページ組み立て処理を追いかけるにあたってわかりづらさがあります。
素直にメインレンダラーに $sub->render() (HTMLの生成結果)を渡すようにして、レンダリングの箇所では単に文字列操作するだけという形に落とし込むのがよかったかなと思います。
<?php
public function render() {
$renderer = $this;
ob_start();
include 'templates/layout.php';
$output = ob_get_clean();
return $output;
}
おわりに
開発速度や最新技術を追いかけようとしたことによってないがしろにされてきた部分を埋めていきたい。
以上!