去年の秋、私はSupabaseなら簡単だと思い込んでいた。
「Firebase使ってた時代は終わり。Supabase最高!」みたいなノリで、新しいプロジェクトを立ち上げた。ユーザー認証、データベース、リアルタイム機能……全部Supabaseに丸投げするつもりだった。設定に30分、実装に2時間、デプロイに1時間で完成させるつもりだった。
結果?3日かかった。反省している。
最初の落とし穴は認証周りだった。Supabaseの認証システムは強力なんだけど、私は「強力=簡単」だと勘違いしていた。Row Level Securityっていうセキュリティ機能があるのね。これがね、設定しないと「なんか動かない」ってことになる。
私は1時間くらい「あれ、なんでデータ取得できねえんだ」って悩んでた。ログを見ると「permission denied」って書いてあるじゃないですか。その時点で気づけよ、という話である。結局、Row Level Securityをちゃんと設定したら、あっさり動いた。設定って大事。
次は本当にバカなミス。データベースのテーブル設計で、ユーザーテーブルとプロフィールテーブルを分けたんだよ。普通の判断だ。でも、外部キー制約を「CASCADE DELETE」に設定するの忘れちゃった。
結果、ユーザー削除しても、そいつのプロフィールデータが孤児になってた。データベースに浮遊データが3,000件くらい溜まってから気づいた。削除機能のテストで「あれ、何か多くね?」ってなったやつ。修正に4時間使った。
リアルタイム機能も痛い目見た。Supabaseのリアルタイムサブスクリプション機能は本当に便利なんだけど、私はメモリ管理を甘く見てた。アンサブスクライブ処理を忘れてたんだ。
何も考えずにコンポーネント作り直すたびに新しいリスナーが増殖して、ブラウザが重くなった。100個のアクティブなリスナーが動いてた時の絶望感ったら。スマートフォンで試したら、バッテリー10分で死んだ。
でもね、失敗から学べることの方が多い。RLSの仕組みをちゃんと理解したし、テーブル設計でも気をつけるようになった。何より、「FrameworkやツールってシンプルなUIの裏に複雑さがある」ってことを身にしみて理解した。
今なら、Supabaseで新規プロジェクト立ち上げるなら、最初に30分使ってドキュメント読む。セキュリティとデータ設計に時間かける。そこをサボると後で3倍の時間を失う。
Supabase自体は本当に良いツールだ。ただ、使い手の心構えが大事。あなたがもしこれから使うなら、私と同じ失敗はするなよ。その分を違うことに使った方が絶対マシだ。