ブログを移行しました。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/CD | — | GitHub Actions(無料枠) |
| 月額合計 | 有料 | 0円 |
「無料にしたら品質が落ちた」という感じもなく、むしろ以前より速くなった気がしています。Cloudflare の CDN はさすがです。
やってみての感想
移行自体は一日かからずできました。Ghost からのエクスポートデータを整形して Markdown に変換し、リポジトリに突っ込んでデプロイするだけです。
何より、「自分のコンテンツを自分で管理している」という感覚が気持ちいいです。記事はテキストファイルなので、どこにでも持っていけるし、エディタも自由。Git のログを見れば「あの記事、いつ書いたっけ」もすぐわかります。
コスト0で、自由度も上がって、速度も改善。やらない理由がなかったな、というのが正直なところです。
同じように Ghost や他のブログサービスからの移行を考えている方の参考になれば幸いです。