🚀

SQL 必須と言い出すエンジニアの 8 割は、ただ設計が下手なだけだ

に公開

── Firestore を使えないのは、Firestoreのせいではない。思考が複雑すぎるだけだ。

現場でよくある光景がある。

「Firestoreでは無理です」
「SQLじゃないと要件を満たせません」
「NoSQLは限界があります」

こういうセリフが出た瞬間、私はほぼ確信する。

あ、この人たぶん“課題をシンプルに考える力”がないだけだな。

Firestore や DynamoDB に問題があるのではなく、
あなたの設計が破綻しているだけなのに、それを技術のせいにしている。

■ 古い DynamoDB ですら普通のサービスを作れた。それでも文句言うの?

今よりずっと制約だらけの DynamoDB を使っていた時代ですら、
普通に Web サービスは成立していた。
初期のDynamoDBは

  • インデックス追加不可
  • インデックス数に超厳しい制限
  • クエリ機能はほぼ原始的
  • JOIN?そんなもの最初から無い

と、今よりも厳しい制約。それでもWebサービスは作れた。

なぜか?

頭を使って設計するから。

Firestore を「使えない」というエンジニアは、
単に RDB の思考から抜け出せないだけだ。

それは “技術的問題” ではなく “思考の問題” である。

■ Firestore が無理なんじゃない。「考え方を変えるのが無理」なだけ

Firestore に向いていないのは、
Firestore ではなくて あなたのモデリング力 の方だ。

典型的なパターン:

  • なんでも正規化しようとする
  • JOIN 前提で設計する
  • 画面の仕様をそのまま DB の形にしようとする
  • 「後から柔軟に変えたい」と言いながら、柔軟性を失う設計をする
  • 書き込みコストを気にしすぎて逆に破綻する

結局のところ、

「SQL が欲しい」ではなく、「SQL 以外で考える力がない」だけ

だ。

■ 制約下で設計できない人は、結局どのDBを使っても破綻する

制約を嫌うエンジニアは、一見“知識が豊富”に見える。
だが実態は逆だ。

  • シンプルに割り切れない
  • 余計なレイヤーや抽象化を加えたがる
  • 技術の選択がプロダクト初期に対して重すぎる
  • 「複雑な設計ができる=優秀」と勘違いしている

それ、全部 オーバーエンジニアリングの典型 である。

経験上、こういう人に SQL を渡しても、

  • 無駄な JOIN
  • 過剰なトランザクション
  • 意味不明な正規化
  • 処理が遅いビュー
  • 抽象化しすぎて誰も理解できないスキーマ

を作って破綻する。

問題は技術ではなく習慣なのだ。

■ スタートアップの初期で SQL 必須と言ってる時点で終わってる

スタートアップの0→1フェーズで
「SQLサーバが必須です」と言い出した時点で、
プロダクトはほぼ間違っている。

なぜなら、SQL が必須なほど複雑なものを初手から作るべきではないからだ。

初期プロダクトで SQL が必要って、もうそれだけで以下が透けて見える:

  • 初期から複雑すぎる
  • MVP の概念を理解していない
  • プロダクトの “核” を絞れていない
  • 技術ドリブンで思考している
  • 要件が肥大化している
  • そもそも PM もエンジニアもシンプルにまとめる気がない

言い方を変えると、

SQL が必須なのではなく、やろうとしていることがアホみたいに複雑すぎる。

スタートアップはそんなもの作るフェーズじゃない。

■ Firestore でできない? いや、大体のサービスは Firestore の方が向いてる

ほとんどの Web サービスは、以下で十分だ。

  • Create
  • Update
  • Get
  • Query(想定されたアクセスパターン)
  • List with filters
  • Aggregate 少し

これ、Firestore で全部できる。

一方で、SQL が輝く本当に“必要な”ケースは少ない。

  • 高度な集計
  • 巨大な OLAP
  • 超複雑 JOIN
  • 銀行級トランザクション

普通のスタートアップの MVP でこれを必要とすることは、ほぼ無い。

もし必要だと思っているなら、

あなたはプロダクトを理解していない
→ 要件を整理できていない
→ ユーザーの問題を見誤っている

可能性が高い。

■ 結論:SQL は悪くない。だが「SQL必須」と言う人はだいたい悪い。

SQL という技術自体は素晴らしい。
私も好きだし、必要な場面では使う。

問題なのは、

SQL を“使いこなす力”ではなく、
SQL しか“考えられない力のなさ”。

Firestore が弱いんじゃない。
あなたの思考が弱いのだ。

プロダクト初期は、

  • シンプルに考える力
  • 制約を味方につける力
  • MVP 構築のスピード
  • 最小構成で出す勇気

ここが勝敗を決める。

そして、最後にひとつだけ。

「SQLが必要」と言い始めたら、プロジェクトが迷走しているサインだ。
真っ先に疑うべきは、技術ではなくメンバーの思考回路である。

シンギュラリティ・ソサエティ

Discussion