1ヶ月前、Supabaseの社内アプリ実装に挑戦し始めた。正直、最初は「データベースのツールでしょ?」くらいの理解だった。
でも、認証機能の実装で何度も躓いて、試行錯誤を繰り返すうちに、Supabaseはただのデータベースじゃない。バックエンド全体の役割を担っていることに気づいた。
フロントエンドは、ブラウザで見える情報すべて。F12を押せば、誰でもコードを検証できる。
バックエンドは、ユーザーから見えない処理。認証、データベース連携、画像処理、役割分担など。ここにセキュリティ上大事な情報を置く。
もしバックエンドに書くべきことをフロントエンドに書いてしまうと、ユーザーに見られてしまう。悪意のある人なら操作もできてしまう。だからこの切り分けがめちゃくちゃ大事。
僕の場合、フロントエンドはNext.jsでVercelを使い、バックエンドはPythonのAPIで、補助的にNotionのデータベースを使っていた。
でもNotionはあくまで「データベース」。Supabaseはデータベースとバックエンドの機能を一元管理してくれる。しかもRLS(Row Level Security)で、レコードごとに細かいアクセス制御ができる。
パスワードは管理者でも閲覧できないレベルで暗号化されていて、表示すらされない。流出パスワードのチェック機能まである。
Replit、Bolt.new、Bubbleなど、主要なノーコードツールはSupabaseと連携できる。ボタンをポチポチ押すだけで、勝手に設定してくれる。
でも、これが怖い。
理解せずに自動化すると、後で問題が起きたときに直せない。翻訳の仕事をしている人から聞いた話だが、お客さんがAIで無茶苦茶にした文章を直すのが大変だと。「1から作った方が楽」って言ってた。
プログラミングも同じ。ある程度知らないと、暴走したときに手がつけられなくなる。
最初から本を読んで体系的に学ぶより、まず作ってみて、ぶつかった問題を解決する方が理解が深まる。
僕の場合、LangChainやLangSmithを使いながら本を読んだら、「俺、このことを言ってるんだ」って分かるようになった。毎日同じ画面を見ていると、点と点が線になる瞬間がある。
Progateで最近CLIを学んだのも、実際に自分で環境構築をやった後だったから、「あの時の俺の間違いはここだったんだ」と分かった。