CMS開発進捗:Cloudflare KVでのデータ永続化に挑戦中

作成日:
約3分で読めます

どーも、ちょりんだです。

現在、このブログにCMS機能を実装すべく開発を進めています。Astro + Cloudflare Pagesで構築されたこのサイトに、実用的なコンテンツ管理システムを追加し、Cloudflare KVによるデータ永続化を実現しようと挑戦しています。

なぜCMSが必要なのか

このブログはAstroフレームワークとCloudflare Pagesで構築されていますが、当初は静的サイトジェネレーターとしての機能のみでした。新しい記事を追加するたびに、ローカルでファイルを作成し、ビルドしてデプロイする必要がありました。

もっと手軽に記事を管理できるように、ブラウザから直接記事を作成・編集・削除できるCMS機能を実装することにしました。

技術選定

今回のCMS開発では、以下の技術スタックを選択しました。

  • フロントエンド: Astro + TailwindCSS(既存技術を活用)
  • バックエンド: Cloudflare Pages Functions
  • データベース: Cloudflare KV
  • 認証: Cookieベースのシンプル認証

現在の進捗状況

できていること

まず、基本的なCMS機能は実装できました。

  • 記事の作成・編集・削除: ブラウザから直接操作可能
  • 下書き/公開の切り替え: 記事の状態管理
  • AIによる記事生成: ChatGPT連携で記事作成をサポート
  • 認証機能: シンプルなログインシステム
  • UIインターフェース: 直感的な管理画面

今の課題

一番の課題が、データの永続化です。

現状、記事データは一時的に保存されていますが、サーバーを再デプロイするとデータが消えてしまいます。これをCloudflare KVを使って永続化したいのですが、ここでつまづいています。

具体的な課題:

  • KVにはデータは保存できている
  • しかし、プログラムからそのデータをうまく読み込めない
  • 結果として、メモリ上の一時保存に頼っている状態

技術的なつまづきと学び

KVの接続問題

最初の大きな壁が、Cloudflare KVとの接続でした。

エラーメッセージ Cannot read properties of undefined (reading 'POSTS') に苦しんだのですが、これはCloudflareのダッシュボードでKV namespaceを作成し、wrangler.tomlで正しく設定することで解決できました。

データ形式の違い

次に、KVに保存するデータ形式と、プログラムで扱うデータ形式の違いに悩みました。

KVは配列形式でデータを保存する必要がありますが、プログラム内ではMap形式で扱いたい。この変換処理が意外と複雑で、まだ完全には解決できていません。

UIの表示問題

CMS画面で「undefined」と表示されたり、日付が「Invalid Date」になったりする問題もありました。

これはKVから取得したデータの構造に合わせて、表示ロジックを調整することで改善できました。

今後の予定

短期的な目標

まずはKV永続化の課題を解決したいです。

  • データアクセスロジックの改善
  • KVからの正しいデータ読み込み
  • 再デプロイ後もデータが保持される状態の実現

中長期的な目標

CMSが安定動作するようになったら、以下の機能も追加したいです。

  • 画像アップロード機能
  • タグ管理機能
  • 記事のプレビュー機能
  • 検索機能

まとめ

現在、CMS開発は80%くらい完成しています。

基本的な機能はすべて動作するし、UIも直感的に使える状態です。あとはKV永続化の課題を解決すれば、実用レベルのCMSが完成します。

この開発を通じて、CloudflareのエコシステムやモダンなWeb開発について多くを学ぶことができました。技術的な課題に直面するたびに、ドキュメントを読んだり、試行錯誤を繰り返したりすることで、着実にスキルアップできたと感じています。

KV永続化の課題を乗り越えたら、また進捗を報告したいと思います。


この記事は、進行中のCMS開発プロジェクトの現状を記録したものです。同じような開発に挑戦している方の参考になれば嬉しいです。

Share