パーポーフルート公式ブログ
【リリース】ブログを Blogger から内製システムに移行した話

2020/11/08
テーマ: リリース / 2020 / すべて


Blogger で書いていた個人の開発ブログを内製のに移行してみました。

移行した理由

  • 外部サービスは突然終わったりサービス改悪があったりして長期的には変化に脆弱である。変化に強くありたい。
  • データを構造化された形で手元に置くことで、自動ツイートシステムとの連携などデータを再利用しやすくしたい。
  • 見せ方も完全にコントロールしたい。OGPに何を出すとか。
  • 記事は markdown で書いて管理したい。

まとめると外部ブログサービスからデータとコントロールを取り戻す!という感じですね。

内製システムの概要

  • トラックバック、コメント機能、管理画面、html のサーバサイド動的生成、DB はオーバースペックなので使わない
  • (トラバとか昔流行ったよな...)
  • ブログ記事データは Contents.py に構造化して記述して PC の DropBox フォルダに置く
  • 1 つの記事は date, title, themes, body を持つ python dict
  • ブログ更新するときは Contents.py に記事データを追記した上で make する
  • make するとブログの全ての html を生成してレンタルサーバに rsync する
  • ブログの全ての html とは、個別記事、テーマ一覧、テーマに属する記事リンク一覧、index.html あたり
  • 個別記事の permalink は投稿日時の yyyymmdd_hhmm を含む名前とする
  • 画像もセルフホストするが、既存の記事のは無理に移行しない
  • 埋め込み tweet や youtube 動画、ツイートボタンなど、外部サービスの javascript はごちゃごちゃや変化に弱くなる要因なので読み込ませない
  • tweet を埋め込みたいときはなるべく画像化して貼る(引用したtweetが消えたりもするし)

こんな感じでシンプルにします。

1 つの記事データはこんな感じです。

{
    "date": "2020-11-08T12:00:00.000+09:00",
    "title": "ブログを Blogger から内製システムに移行した話",
    "themes": ["Release"],
    "body": "記事本文"
}

移行ステップ

  • Blogger からデータ(XML)を export してそれを parse して半自動で html から markdown に戻す(スーパー汚れ仕事)
  • ブログ生成/アップロードスクリプトを開発 (markdown ライブラリ利用 + 文字列処理で 250 行くらい)
  • いい感じに css を定義
  • tweet を画像化するスクリプトを開発(puppeteer利用)
  • tweet の画像化、画像置き換え
  • 既存の記事へのリンクを新リンクに変更(意外とめんどくさい)

とやって全部で 6 時間くらいかかった気がします。

まとめ

この記事は移行後初めて書いた記事ですが、記事を書いて make するだけで更新完了なのでめっちゃ楽ですね。

そして外部ブログサービスに依存しなくなったので長期的に変化に強くなりました。

めでたしめでたし。


2020/11/08
テーマ: リリース / 2020 / すべて