0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(25卒)新入社員がデータベースを開発してみた【個人開発】

Last updated at Posted at 2025-04-23

はじめに

サーバー管理ゼロ、世界中どこからでもミリ秒台の読み出しが可能なグローバル分散型キー・バリュー・ストア API「AwesomeKV」を個人開発しました。本記事では、その特徴、使い方、アーキテクチャ、今後のロードマップなどをご紹介します。

背景とコンセプト

  • サーバーレス: インフラ管理不要で、コードだけ書いてデプロイ。
  • Key–Value ストア: 簡単な CRUD(生成・取得・更新・削除)操作を HTTP で完結。
  • グローバル分散: Cloudflare Workers KV 上に構築し、Edge キャッシュによる低レイテンシを実現。

多くのプロジェクトで、ちょっとした設定やフラグを保存したいだけのためにフルマネージド DB を立てるのはオーバースペック。そこで、最低限の機能に絞った軽量 KV ストアを自分で作ってみました。


主な特徴

  • シンプル RESTful API
    • GET /<key> … 値を取得(存在しない場合は 404)
    • PUT/POST /<key> … 値を保存(初回は 201、上書きは 200)
    • DELETE /<key> … キーを削除(200)
  • CORS 完全対応
    • 標準的な Access-Control-Allow-* ヘッダーを全て設定
  • MIME タイプ自動判別
    • .json.png など拡張子から IANA 登録済みのメディアタイプを自動設定
  • グローバル低レイテンシ
    • Edge キャッシュを使ったリクエストはミリ秒単位
  • サーバー管理ゼロ
    • Cloudflare Workers + KV ネームスペースでフルマネージド

API 仕様・使い方

JavaScript からの利用例

// キーに値を登録(作成/上書き)
await fetch('https://awesomekv.dev/mynamespace/mykey', {
  method: 'PUT',
  body: 'Hello, AwesomeKV!'
});

// キーの値を取得
const res = await fetch('https://awesomekv.dev/mynamespace/mykey');
if (res.ok) {
  console.log(await res.text());  // → "Hello, AwesomeKV!"
} else {
  console.error('Key not found:', res.status);
}

// キーを削除
await fetch('https://awesomekv.dev/mynamespace/mykey', { method: 'DELETE' });

Python からの利用例

import requests

# 値を登録
r = requests.put('https://awesomekv.dev/mynamespace/mykey', 'Hello from Python')
print(r.status_code)  # 201

# 値を取得
r = requests.get('https://awesomekv.dev/mynamespace/mykey')
if r.status_code == 200:
    print(r.text)      # → Hello from Python
else:
    print('Not found', r.status_code)

# キーを削除
r = requests.delete('https://awesomekv.dev/mynamespace/mykey')
print(r.status_code)  # 200

アーキテクチャ

  1. Cloudflare Worker
    • worker.js にて HTTP メソッドとパスを判定し、env.KV.get/put/delete を呼び出し
    • CORS ヘッダー、MIME タイプを付与してレスポンスを返却
  2. Workers KV
    • グローバル分散ストレージ
    • 読み出しはエッジキャッシュ、書き込みはオリジン
  3. デプロイ

パフォーマンスと制限

  • レイテンシ: キャッシュヒットで 5ms 以下
  • KV 制限
    • 値サイズ上限 25 MiB
    • キー長最大 512 バイト
    • 無料枠: 読み込み 100k/日、書き込み 1k/日(有料プランで増量可)

ユースケース

  • エッジでの 設定/機能フラグ の保存
  • CDN 経由の 静的アセット(画像、JSON)配信
  • ユーザーごとの セッション情報プレファレンス のキャッシュ

ロードマップ

  1. マルチキー操作(Bulk GET/DELETE)
  2. 自動 TTL(有効期限)機能
  3. API 認証(API キー/JWT)
  4. Web UI ダッシュボード
  5. メトリクス・分析連携(Workers Analytics)

まとめ

「AwesomeKV」は、Cloudflare Workers KV を最大限に活かした、超シンプルかつスケーラブルな HTTP KV ストアです。
インフラ管理を一切せずに、グローバル分散と低レイテンシを手軽に導入できるため、小規模プロジェクトからエンタープライズまで幅広く活用いただけます。
ぜひお試しください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?