← 一覧へ戻る

ブログを移行しました。Ghost から Markdown + GitHub Actions + Cloudflare Pages + R2 へ、コスト0で。

技術 ブログ

ブログをリニューアルしました。

以前は Ghost.io というサービスを使っていたのですが、ずっと気になっていた「コスト」と「コンテンツの管理方法」という2つの課題を解消すべく、思い切って移行することにしました。

以前の構成:Ghost.io

Ghost は洗練された UI と Markdown エディタが使いやすく、しばらくお世話になっていました。ただ、使い続けるうちにいくつか引っかかる点が出てきました。

  • 月額費用がかかる — セルフホストも選択肢としてあるものの、サーバー代がかかる
  • コンテンツが Ghost に依存している — エクスポートはできるが、プラットフォームに縛られている感覚が拭えない
  • Git で管理できない — 記事のバージョン管理や差分確認がやりにくい

「自分の書いたものは、自分でちゃんと持っておきたい」という気持ちが積もっていったのがきっかけです。

新しい構成

移行後の構成はこうなっています。

コンテンツ管理:Markdown + Git

記事はすべて Markdown ファイルで書き、GitHub リポジトリで管理しています。Git で管理することで、

  • 変更履歴がすべて残る
  • ブランチを切って下書きを管理できる
  • エディタは何でも好きなものを使える(VSCode、Obsidian など)

という自由度が生まれました。ファイルが手元にあるので、サービスが終了してもコンテンツは消えません。

ビルド:GitHub Actions

リポジトリに push すると、GitHub Actions が自動でビルドを走らせます。静的サイトジェネレータでビルドし、成果物を Cloudflare Pages にデプロイする流れです。

設定ファイルを一度書いてしまえば、あとは git push するだけで公開まで完結します。CI/CD の恩恵をブログ運営にも持ち込めるのが、エンジニアとしては気持ちいいですね。

ホスティング:Cloudflare Pages

静的サイトのホスティングには Cloudflare Pages を選びました。

  • 無料枠が十分すぎる — 個人ブログ程度のトラフィックならまず課金しない
  • CDN が世界中に展開されている — アクセス速度が速い
  • カスタムドメインも無料で設定できる

GitHub と連携しているので、Actions からのデプロイも簡単に設定できました。

画像:Cloudflare R2

画像ファイルは Cloudflare R2 に置いています。R2 は AWS S3 互換のオブジェクトストレージで、Cloudflare の大きな特徴として エグレス料金(転送費用)が無料 という点があります。

ブログの画像程度であれば、無料枠の範囲内で十分収まります。R2 に置いた画像は Cloudflare の CDN 経由で配信されるため、表示速度も問題なしです。

コストは0円になった

これが今回の移行で一番の成果です。

項目移行前移行後
ブログ基盤Ghost.io(有料)Cloudflare Pages(無料)
画像ストレージGhost 込みCloudflare R2(無料枠)
CI/CDGitHub Actions(無料枠)
月額合計有料0円

「無料にしたら品質が落ちた」という感じもなく、むしろ以前より速くなった気がしています。Cloudflare の CDN はさすがです。

やってみての感想

移行自体は一日かからずできました。Ghost からのエクスポートデータを整形して Markdown に変換し、リポジトリに突っ込んでデプロイするだけです。

何より、「自分のコンテンツを自分で管理している」という感覚が気持ちいいです。記事はテキストファイルなので、どこにでも持っていけるし、エディタも自由。Git のログを見れば「あの記事、いつ書いたっけ」もすぐわかります。

コスト0で、自由度も上がって、速度も改善。やらない理由がなかったな、というのが正直なところです。

同じように Ghost や他のブログサービスからの移行を考えている方の参考になれば幸いです。

コメント