静的サイトの設計の話

ブログの引っ越しがおわった。
さくらのコンパネで障害が起きてた影響もあって、最終的には3日かかった。
3日で20年分の記事をリプレイスしたら御の字よ。

どこに記事を置こう

さくらは信用のおける会社だ。それはそうだが、記事が全部吹っ飛んだ時に私はなすすべがない。
いや大したこと書いてなくったって20年分あったら愛着もわくんだよ。痛い記事も多いけど。
解決方法としては、マスターを自分のPCに置くこと。且つ、google-driveとかでバックアップを取ること。
でもそれだとネットに載っけておけない。

書き方を考える

ローカルの記事はmarkdownで書く。
markdownで書かれた記事をHugoに食わすとHTMLを吐いてくれる。
いろいろスタイルを整えたりして、ブログの体裁にもできる。
もちろんコメントはできなくなるけど、うちにコメントするのってよっぽどの変わり者だから、まあいいでしょう。Twitterかなんかでたのむよ。

ブログっぽい機能どうする

フックを書くことで、年月別とか、カテゴリ別とかの整理もできる。
記事をいっこ置いたりするたびに、日付的に前後の記事を見つけてリンクしたり、記事のカテゴリとか年・月を集約してインデックス作ったりしてる。
こいつはけっこうな力技だけど、相手すんのがせいぜい2000ファイルのテキストだから、あんま困んない。
あとは画像をどうたらとか、サムネを置くときのルールを定めたり。
このへんはどっちかというとobsidian側の環境設定の話になってくる。
こういうルールで画像をおいたら、ビルドの時にこうするねみたいな連携を作っておく。

反映

markdownで書いた記事はgitで管理することにした。
記事書いて、git add , commit, pushと、普通のプログラマが普通にやる動作で記事の反映をする。
リポジトリが更新されると、接続してあるCloudFlareがブログサイト丸ごとをビルドして、Cloudflare Pagesにデプロイする。
Cloudflare Pagesのサイトは、さくらのDNSから「あっちいけ」って設定を入れてあるので、いままでと同じURLで新サイトに飛んでくることができる。

技術スタック

レイヤー採用技術役割
執筆Obsidian + Templater + Paste image renameMarkdown執筆、新規記事テンプレ自動生成、画像ペースト時の自動リネーム
サイト生成Hugo (extended)Markdown → 静的HTML。テーマは既製品を使わず自前実装
ソース管理Git / GitHub (private, SSH)コンテンツ・テーマコードのバージョン管理
ビルド・ホスティングCloudflare Pagespushを契機に hugo --gc --minify を実行し配信
DNSCloudflare DNS独自ドメインのサブドメインをCNAMEでPagesに接続
インフラ管理TerraformPagesプロジェクト・DNSレコードをコード化。state は Cloudflare R2
移行ツールPython (標準ライブラリ + bs4 + Pillow)WordPress WXR → Markdown変換、画像最適化