さとまたwiki

なぜTursoか

データベース選定の考察

2025年12月21日

前提:この選定基準は1人でClaude Codeを使って開発する場合のものです。チーム開発や異なる開発スタイルでは、最適な選択が変わる可能性があります。

結論

D1でエラー連発して嫌になった。Tursoに変えたら全て解決した。最初からTursoにしておけばよかった。

私がデータベースに求めたもの

データベースを選ぶ時、私が重視したのはシンプルに3つだけです:

1. 無料であること

個人開発で毎月お金を払うのは嫌だ

2. 商業利用OK

将来お金を稼ぎたくなった時に困りたくない

3. エラーが出ない

Claude Codeと開発する時にエラーで止まりたくない

私が試したデータベース

Supabase 却下

最初に試したのがSupabaseでした。PostgreSQLベースで機能も豊富、UIも綺麗で「これだ!」と思いました。

良かった点

  • • 管理画面が使いやすい
  • • 認証機能が組み込まれている
  • • リアルタイム機能がある
  • • ドキュメントが充実

なぜ却下したか

1週間でスリープ。無料プランは1週間使わないとデータベースがスリープ状態になります。個人開発で毎週ログインするなんて現実的じゃない。作ったアプリを放置できないのは致命的でした。

Firebase 却下

Googleのサービスだし安心かな、と思って調べました。

良かった点

  • • Googleの安定したインフラ
  • • 無料枠が結構ある
  • • スマホアプリ開発者に人気

なぜ却下したか

Googleは複雑すぎる。サービスの数が多すぎて、どれを使えばいいかわからない。Firestore? Realtime Database? どっち?しかもNoSQLなのでSQLが使えない。シンプルさを求める私には合いませんでした。

Neon 検討中

サーバーレスPostgreSQLとして注目されているサービス。

良かった点

  • • PostgreSQLがそのまま使える
  • • ブランチ機能がある
  • • スリープしない

なぜ選ばなかったか

無料枠の容量が少ない。512MBは本格的なアプリには不十分。将来的にデータが増えた時に困りそうでした。悪くはないけど、決め手に欠けました。

JAMStackで絞り込んだ結果

SvelteKitを選んでCloudflare Pagesにデプロイすると決めた時点で、選択肢が一気に絞られました。エッジで動くデータベースは実質2つだけ:

Cloudflare D1

Cloudflare純正のSQLiteベースDB

Turso

libSQLベースの分散DB

Cloudflare D1での地獄

最初は「Cloudflareで統一できるし、D1でいいじゃん」と思ってD1を使い始めました。これが間違いでした。

問題1:99列の制限

D1はテーブルに99列までしか作れません。「そんなに列使わないでしょ」と思うかもしれませんが、複雑なアプリを作ると意外とすぐ到達します。途中でスキーマを変更する羽目になって大変でした。

問題2:ローカル開発が地獄

wrangler dev で動かそうとすると、エラーが連発。Claude Codeと一緒に開発していても、D1関連のエラーで何度も止まりました。「接続できない」「バインディングが見つからない」「マイグレーションが失敗」...毎回違うエラーが出て、本当にストレスでした。

問題3:ドキュメントがわかりにくい

まだ新しいサービスなので、ドキュメントが整備されていない部分が多い。エラーが出てもググっても解決策が見つからないことが多かったです。

Tursoに変えたら全て解決した

2025年12月、ついにD1に嫌気がさしてTursoに移行しました。最初からこっちにしておけばよかった。

列数制限なし

普通のSQLiteと同じように使える

ローカル開発が超シンプル

普通にSQLiteファイルを使うだけ。エラーゼロ

無料で500データベース

個人開発なら一生困らない

商業利用OK

無料プランでも制限なし

ORMは使わない(Drizzle等)

「Drizzle ORMを使った方がいいのでは?」と聞かれることがあります。確かにチーム開発なら型安全性は重要です。でも1人でClaude Codeを使って開発する場合は違います

ORMを使わない理由

  • • スキーマ定義を書く手間が増える
  • • マイグレーション管理が複雑になる
  • • Claude Codeは生のSQLを正確に書ける
  • • 型安全性より「速く動くこと」が優先

生SQLで十分な理由

  • • Claude CodeがSQLを正確に生成してくれる
  • • SQLiteは構文がシンプル
  • • 1人なら型の不整合は起きにくい
  • • 何かあってもすぐ直せる

チームで開発するならDrizzleは良い選択です。でも1人でAIと開発するなら、工数を増やす意味がありません。

まとめ

D1で何ヶ月も苦しんだ末にTursoに移行しました。移行作業自体は1日で終わり、それ以降はエラーゼロ。最初からTursoにしておけばよかったというのが正直な感想です。

Cloudflareで統一したい気持ちはわかります。でも、D1はまだ成熟していません。2025年12月時点では、Tursoがベストプラクティスです。

🤖 Claudeからのアドバイス

この選定には矛盾と見落としがあります。

同意できる点

  • D1の問題は実在する:99列制限とローカル開発の複雑さは、多くの開発者が報告している問題です。
  • Tursoの開発体験:ローカルでSQLiteファイルを使う方式は確かにシンプルで、エラーが少ないです。

矛盾点・疑問点

  • ? 「Cloudflareで統一」を諦めた矛盾:ホスティングはCloudflare Pages、ストレージはR2を使うと言いながら、データベースだけTursoに逃げています。本当に「1つのシステムで完結」を重視するなら、D1の問題を解決する努力をすべきでは?
  • ? 「エラー連発」の原因は本当にD1?:D1のエラーの多くは設定ミスや理解不足が原因です。Tursoに変えて「エラーゼロ」になったのは、D1で学んだ知識があるからでは?
  • ? ORMを「工数が増える」と言うが:Drizzleの型定義にかかる時間は数時間。それで得られる型安全性と自動補完は、長期的には開発速度を上げます。「速く動くこと」を優先すると言いながら、長期的な効率を無視していませんか?

見落としている可能性

  • ! Tursoの将来性:Tursoはスタートアップです。Cloudflareのような大企業と比べて、サービス継続のリスクがあります。
  • ! D1は進化している:2025年12月時点でD1はまだベータ版ですが、Cloudflareは積極的に改善しています。来年には状況が変わっている可能性があります。

総合的に見て、「今すぐ動くものが欲しい」という要求にはTursoが合っています。しかし、D1を「地獄」と切り捨てるのは早計かもしれません。技術は進化します。定期的に再評価することをお勧めします。