Jeffgeerling.comがHugoに移行しました
概要
- DrupalからHugoへの移行理由と経緯
- 静的サイトジェネレーター(SSG)の選定理由
- Markdown中心の執筆ワークフローの利便性
- 大規模CMSのメンテナンス負担と課題
- 今後の課題(コメント機能・検索機能)
DrupalからHugoへの移行経緯
- 2009年からDrupalを使用、バージョン6から10まで段階的にアップグレード
- 本業でも同じCMSを使い続けていたため、サイトでの「dogfooding」を実施
- Drupal 7から8への移行が特に大変で、個人ブログにエンタープライズ向けDXPを維持するモチベーション低下
- ブログは趣味・メモ・YouTube動画の補足用であり、複雑なCMS管理に時間を割きたくない現状
静的サイトジェネレーター(SSG)の選定理由
- 他の趣味サイトでは静的ホスティングを活用
- 更新停止サイトはスクレイピングしてアーカイブ化
- 継続運用したいサイトはJekyllやHugoへ移行
- JekyllはGitHub Pagesでの無料ホスティングに最適
- Ruby非習得のため、Hugoを自前インフラ向けに選択(Geerling Engineering等)
- Hugoはセットアップが簡単で高速
サイト移行と運用課題
- GitHub issueで移行作業を進行中
- 画像参照ミスや古いURLの消失リスク
- 20年分・3500件超の投稿データ移行の困難
- 可能な限り既存URL維持やリダイレクト追加を試みるが、完全な移行は困難
Markdown中心のワークフロー
-
2020年以降、全投稿をMarkdownで執筆
-
それ以前もSublime TextでMarkdown下書き→HTML化して投稿
-
HugoはMarkdownをネイティブサポートしており、執筆体験が向上
-
Drupal 6時代は30個以上のモジュールを導入したが、アップグレードのたびに問題発生
-
Drupal 8以降は機能を最小限に絞った結果、コンテンツ作成体験が悪化
- Markdownファイルで記事作成
- Drupalで新規記事作成・Markdown貼り付け・タイトル追加
- 画像を個別アップロードし、本文内に1枚ずつ挿入
- 投稿日時フィールドを手動で調整
- 公開設定を切り替えて保存
- AnsibleでDrupal/Nginx/Cloudflareキャッシュを手動パージ
- これらの作業が執筆や創造性に寄与せず、単なる手間
-
Drupalには自動化モジュールも存在するが、モジュールの安定化・パッチ管理に疲弊
-
メジャーバージョンアップごとにWYSIWYGエディタ・メディア管理・コンテンツフィールド等の再構築が必要だった過去
Hugo運用のシンプルさ
- 元々Markdownで執筆しているため、Hugoでは1ステップで公開可能
- 投稿のfrontmatterで日付・ドラフト設定を変更するだけ
- コマンド一発(hugo && git commit -m "Updated post." && git push)で即時公開
- Composer・Drush・PHP・MariaDB・Nginx・Cloudflare等の複雑な管理から解放
- 複数ユーザー・RBAC等が必要な大規模サイトならDrupalも有効だが、個人ブログには不向き
今後の課題(TODOs)
- 当面はコメント機能が全サイトで未実装(後日、自前静的コメントシステム導入予定)
- コメント欄はモデレーション負担があるものの、ブログの一体感に不可欠
- サイト内検索機能も未実装、過去はApache Solrと連携していたが現在は未導入
- Hugoでの検索機能実装方法を検討中