4年ぶりのブログ更新である。
このブログをAnchorCMSからHugoに乗り換えた。
きっかけ
なにやら世間がphp2shellで大騒ぎになっていたので、これを機にようやく重い腰を上げて、PHP製のブログエンジンから静的サイトに移行した。
AnchorCMSはすでに開発が止まっていて、いい加減次のブログについて検討しないとなと思いつつ、動いているからと後回しにしていた。
php2shellについてはいろいろ思うところがあるが、まあいいきっかけにはなった。
いきなり別のブログエンジンに移るのではなく、まずは静的なページにしてしまうことにして、将来的にコンテンツ管理の機能が欲しくなったら、そのときにまた考えることにした。
最悪AIに作らせてもいいでしょの気持ち。
移行したもの
- 記事: 48件(公開41件、下書き7件)
- カテゴリ: 14件
- コメントはなし
AnchorCMS一式と記事のDBは手元に残っているので、それをベースにやっていくことにした。
SSGの選定
静的サイトジェネレータ(SSG)選びについてはChatGPTに相談した。
候補に挙がったのはHugo、Zola、Astro、Eleventyで、最終的にHugoにした。ブログのようなコンテンツ中心のサイトを静的HTMLにできて、公開側でPHPもDBも動かさなくていいのが決め手。
移行で気にしたのはこのあたり。
- 既存のURL(パーマリンク)を変えない
- 記事本文、カテゴリ、画像を移す
- RSS、sitemap.xmlを出す(OGPは後回し)
外部からのリンクや検索エンジンへの影響は減らしたいので、URLは維持する方針にした。
記事の移行
既存の記事をHugo用にする作業もChatGPTにお願いした。流れはこう。
- AnchorCMSのDBをダンプして、記事・カテゴリ・固定ページをJSONにエクスポートする
- そのJSONを、Hugo用のMarkdownに変換する
- Hugoで静的HTMLを生成する
記事はcontent/posts/<slug>/index.mdの形で置いて、Front Matterには旧URLを維持するためのslugとurl、日時(JSTのまま)、description、draft、カテゴリを持たせた。公開状態はdraftに反映して、AnchorCMS側のIDもanchor_idとして残してある。記事のURLは/posts/<slug>/で、旧URLと変わらない。
配信は今までのNginxで
配信環境も、最初は静的サイト用にNginxのコンテナを立てようかと考えていた。CloudflareやTraefikを使う案も出たけれど、結局これまでブログを配信していたNginxをそのまま使うことにした。
やったのは、PHPで動かしていた設定を、Hugoで生成したファイルを配るだけの設定に置き換えることだけ。ついでなのでNginxの設定はきれいにし直した。HTTPからHTTPSへのリダイレクト、Let’s Encryptの証明書の自動更新(更新時にNginxをreloadする)あたり。
公開
生成したpublic/をrsyncで同期して、トップページや記事、RSS、sitemapが200 OKで返ってくることを確認した。
これで公開サーバーは、PHPにもDBにも依存しない静的サイトだけになった。
ts3.onodai.comもついでに
このドメインでホストしているts3.onodai.comもWordPressだったので、ついでにChatGPTにペライチを作ってもらった。
感想
LLMすげー
ちなみにこの記事も、メモを渡してClaudeに書かせた。