Claude Codeでアプリにデータ保存機能を足す前に知っておくこと:データベース、Supabase、そして「壊さない意識」
安野貴博の自由研究安野貴博氏による「バイブコーディング超入門講座」の第7回は、データベースがテーマだ。これまでの回で、受講者はアプリをひと通り作り、少しずつ改善できるようになった。ただし、画面を作れてもデータを保存する場所がなければ、アプリでできることは限られる。今回はデータベースの基本、初心者向けとして選んだSupabaseの位置づけ、そしてAIにデータベースを触らせるときの注意点の3点を扱う。安野氏が特に時間を割いたのは3点目で、AIが本番データを消したり書き換えたりする事故をどう防ぐかという実践的な話である。
なぜデータベースが必要なのか
安野氏はまず、データを保存する「箱」がないアプリで何が困るのかを説明する。例として挙げたのは、講座の第4回で作ったシューティングゲームだ。保存先がなければ、自分がどれくらいのハイスコアを取ったか、どのステージまで進んだかといった情報は、アプリを閉じるたびに失われる。ユーザー側から見れば、毎回同じデータを入れ直さなければならないことになる。
データベースは、見た目を担当するフロントエンドと連携して動く保存の仕組みだ。アプリを閉じると消えてしまうデータをデータベースに保存し、次に起動したときに読み込む。安野氏は、画面作りに加えてデータの保存までできるようになると、作れるアプリの幅が大きく広がると述べる。
データベースは「すごいExcel」
データベースと聞くと難しそうに感じるが、安野氏によれば、ざっくり言えばExcelやスプレッドシートのようなものだ。表形式のデータを保存でき、縦の列と横の行にデータを書いていく点は同じである。
違いは、縦の列の扱いがExcelより厳密なことだ。データベースでは「この列には数値しか入れてはいけない」「この列には名前の文字列しか入れてはいけない」「この列には日付しか入れてはいけない」といったルールを列ごとに決められる。スライドでは「名前」「メールアドレス」「登録日」を列に持つ表が示され、「田中太郎」「佐藤花子」が行として追加されていた。構造自体はスプレッドシートとほぼ同じで、そこにデータがどんどん追加されていく。
列ごとに決めるデータの種類を「データ型」と呼ぶ。代表例として、文字列型(VARCHAR)、数値型(INTEGER)、日付型(DATE)、真偽値型(BOOLEAN)が紹介された。真偽値型はtrueかfalse、0か1しか取らない型である。安野氏は、細かい名前を覚えるよりも、まずは「列ごとに型がある」と理解しておけばよいとしている。
覚えておきたい4つのキーワード
データベースの用語は数多くあるが、安野氏は初心者向けに4つだけを挙げた。
1つ目は「テーブル」で、1枚の表を指す。データベースの中には、通常いくつものテーブルを作る。たとえば名前・メールアドレス・登録日を持つユーザー登録のテーブルがあり、ゲームであれば「この人が何月何日にプレイして何点取ったか」を記録するスコアのテーブルがある。さらに、ハードモードかイージーモードか、画面を軽めにしているか暗めにしているかといった個人の設定を記録するテーブルも作れる。これらのテーブルをつなぎながら使うのがデータベースの使い方だ。
2つ目は「レコード」で、表の横の行にあたる。3つ目は「カラム」で、縦の列にあたる。4つ目が先ほどの「データ型」で、その列にどんな種類のデータが入るかを表す。この4つを組み合わせてデータを保存していくのがデータベースだ、と安野氏はまとめている。
Supabaseとは何か
2つ目の論点はSupabaseである。安野氏の説明では、Supabaseはデータベースを簡単に使えるようにするサービスで、裏側の設定をゼロから用意しなくて済む。データベースを本当にゼロから用意しようとすると、サーバーを作り、さまざまな設定をするといった専門知識が求められる。すぐに気軽にデータベースを使いたいなら、データベースまわりの機能をまとめて提供するサービスを使うと手軽だという。
こうしたサービスは「Backend as a Service(BaaS)」と呼ばれる。Supabaseを導入すると、データベースが使えるようになるだけでなく、ログインしている人が本当にその本人かを確かめる認証の仕組みや、APIでつなぐ仕組みなども一緒に使える。安野氏は、面倒な準備を肩代わりしてくれるものと捉えればよいと説明する。
PostgreSQLがベースで、バイブコーディングとの相性がよい
Supabaseのベースになっているのは PostgreSQL だ。データベースにはMySQLなどさまざまな種類があるが、PostgreSQLは世界中で使われている標準的なものの一つだと安野氏は紹介する。PostgreSQLを自分でゼロから用意することもできるが、Supabase経由で使えば、バイブコーディングを始めたばかりの人でも、多少のハードルはあるもののそれなりに使える。
安野氏がSupabaseを選んだ理由の一つは、バイブコーディングとの相性だ。AIに「Supabaseでよしなにやっておいて」と頼むと、それなりにやってくれるという。ただしSupabaseはあくまで初心者向けの入門として使いやすいものとして選んだのであり、他にもさまざまな製品があるので、興味のある人は調べてみてほしいとも付け加えている。
いちばん大事なのは「データベースを壊さない意識」
3つ目の論点は注意点である。ここでの話は、Supabaseに限らず、PostgreSQLやMySQLを自分で立てた場合にも当てはまるという前提で語られた。なお、セキュリティ面の話は別の回で扱う予定だという。
安野氏が最も大事だとするのは、データベースを壊さないように気をつけることだ。データベースを使っていていちばん怖いのは、データが意図せず消えてしまうことや、入っていたデータの整合性が取れなくなることである。AIは最近かなり賢くなっているが、それでも「AIが勝手に操作してデータベースの中身を全部消した」「壊した」「書き換えた」という話をたびたび耳にするという。だからこそ、本番のデータを守りながらAIを使うことは「絶対にやる必要がある」と安野氏は強調し、この「壊さない意識」を繰り返し口にした。
DELETE、UPDATE、WHERE句が出てきたら注意度を上げる
壊さない意識を持つうえで、安野氏は「危険な言葉」として DELETE、UPDATE、WHERE句 の3つを挙げた。これらが出てきたら注意度を上げよう、というのが趣旨である。
前提として、データベースを操作するときは、データベースに対して命令を送る。「このデータを追加して」「このデータを削除して」「3行目のデータをこう変えて」「山田さんを山田花子さんに変えて」といった命令だ。安野氏は、これはAIにプロンプトを送るようなものだと例える。その命令にあたるのがSQL文で、SQLは Structured Query Language(構造化問い合わせ言語)の略だ。SQL文を送ると、それに沿ってデータベース側が処理を行う。
入門講座の受講者はまだSQL文の詳細を知らないだろうと安野氏は認めたうえで、慣れていくにつれて興味があれば調べてほしい、細かいものを作ろうとすると知識が必要になる、と述べる。そのうえで、まずはこの3つが出てきたら気をつけることを勧めた。
DELETEは名前の通りデータを削除する命令で、本番のデータベースに飛べば実際に消えてしまう。UPDATEはデータを書き換える命令で、たとえば「山田太郎」を「山田花子」に変えると、もとの「山田太郎」という情報は失われる。そのためUPDATEにも細心の注意が必要だ。WHERE句は、どのデータを対象にするかを指定する部分である。
安野氏は、スライドの例を「呪文のようなものだと思って見てほしい」と前置きして解説した。安全な例として示されたのは DELETE FROM users WHERE id = 5 だ。DELETEなので削除、FROM usersは複数あるテーブルのうちユーザーのテーブルを対象にする、WHEREでIDが5という条件を指定している。つまり「IDが5番のユーザーの情報を消して」という意味になる。
ところがWHERE句を付け忘れて DELETE FROM users とすると、ユーザーの表が一撃で全部消える。さらに、WHERE句があっても条件が「id = 5」なのか「id != 5(5ではない)」なのかで結果はまったく変わる。後者なら、ID5番以外の全員の情報が消えてしまう。SQL文は少し間違えるだけで本番データが危険にさらされる、と安野氏は指摘する。
バイブコーディングをする人がこれを直接書くことはまだあまりないだろう。しかし、AIが「このSQL文を実行してよいですか」と尋ねてくることがある。DELETEやUPDATEが含まれている場合はデータが消えるかもしれないので、いったん立ち止まって確認しよう、というのが安野氏の助言だ。
事故を防ぐコツ1:件数とサンプルを先に確認する
では具体的にどう気をつければよいのか。安野氏は、データベースを触る人なら基本としてやっていることだと断ったうえで、3つのコツを挙げた。
1つ目は、データを操作する前に件数やサンプルを見て確認することだ。先ほどの DELETE を SELECT に置き換えて SELECT ... FROM users WHERE id = 5 とすると、削除の対象になるはずのデータがまず返ってくる。その中身や件数を見れば、自分が変なことをしていないかが分かる。
たとえば、条件を誤って「id != 5」と書いていた場合、1人分のデータだけを消すつもりだったのに、ユーザーが1万人いれば1万件が対象として表示される。それを見れば「これは完全に違う」と気づける。本番のデータを触るときは、必ずSELECT文などで対象となるデータの中身を確認してから実行しよう、と安野氏は述べる。
事故を防ぐコツ2:本番と開発を分ける
2つ目は、本番と開発を分けることで、安野氏は「非常に大事」だと強調した。実際に開発していると、データはつい壊してしまいがちだ。すでにユーザーがいて触っているアプリで、開発しながらデータを壊すと大変なことになる。だから開発用と本番用を切り分ける。
AIと会話しやすくなるキーワードとして、安野氏は環境の呼び名を紹介した。本番環境は「プロダクション環境」、本番に出る直前の検証環境は「ステージング環境」、もっと初期の段階で試行錯誤している環境は「デベロップメント環境」(開発環境)と呼ぶ。開発環境で試していたものがステージングに昇格し、さらにプロダクション環境になるという流れで、データベースもその環境の数だけ用意しておくとよい、という説明だ。ただし、この辺りにはいろいろな流派があるとも付け加えている。
事故を防ぐコツ3:バックアップを取る
3つ目はバックアップだ。現在のデータベース製品では、毎日決まった時刻にバックアップを取るといった設定ができる。取ったデータは「ダンプデータ」と呼ばれることがあり、この言葉も覚えておくとAIと話しやすいかもしれない、と安野氏は言う。
バックアップがあれば、仮に本番データを壊しても、ある時点までは復旧できる。安野氏の例では、毎朝7時にバックアップを取っていて、誤って12時にデータを消した場合、その間の5時間分の情報は失われるかもしれないが、それ以前の情報は守られる。製品によっては、もっと直前の状態まで復旧できるものもあるという。
Supabaseについては、毎日バックアップを取ってくれる仕組みがあり、フリープランでも手動でバックアップを取れると安野氏は説明する。難しい作業をする直前にバックアップを取っておく、あるいはClaude Codeに「今バックアップを取っておいて」と頼めば取ってくれる、という使い方も紹介された。
AIをどこまで信頼するか
これらを踏まえ、安野氏はAIへの信頼の置き方にも触れた。基本的には、最終的な確認は人間がきちんと行ってほしいという。何を消すのか、何を書き換えるのか、どこで実行しているのか(開発環境なのか、ステージング環境なのか)、バックアップはあるのか。これらを人間が確認しながら、作業を一歩ずつ進めていくことが大切だとする。
今回の3つのポイントの振り返り
安野氏は、データベースは本来ものすごく時間がかかる分野で深い知識があるが、今回は表層的なところだけを解説したと述べる。そのうえで、やりたいことがあればAIに「これはできるか」と聞き、分からない概念が出てきたらそれもAIに聞いて理解を深めていってほしいと勧めた。
振り返りとして挙げられたのは次の3点だ。データベースは、ざっくり言えば「すごいExcel」「すごいスプレッドシート」であり、普通の表計算と違って列ごとにデータ型があり、かっちりした構造を持つこと。生のデータベースソフトをそのまま使うのではなく、SupabaseのようなBaaSを使うと、AIエージェントからも非常に扱いやすいこと。そして、バックアップを取る、削除や更新の前に範囲を確認する、環境を複数用意して本番環境は絶対に死守する、という注意点である。
次のステップに進むためのキーワード
最後に安野氏は、今回入れようか迷って入れなかった概念を、次のステップに進むためのキーワードとして紹介した。
データベースの基本としては、テーブル同士をどう紐付けるかに関わる「主キー(プライマリーキー)」と「外部キー」。SQLの基本操作としては、SELECT、INSERT、JOIN、インデックス、UNIQUE、NOT NULL、トランザクション、ロールバック、そして制約(コンストレイント)。安野氏は、このあたりが分かってくると中級者だと言う。インデックスについては、データが大きくなると読み取りに時間がかかるところを、事前に目次をつけておくことで大幅に速くする機能だと補足した。
セキュリティ面では、SQLインジェクションが挙げられた。不正なSQL文を打ち込まれることで、データを意図しない形で壊されたり書き換えられたりする攻撃があり、これも大事な知識だという。
テーブル設計は最初にAIと壁打ちして詰める
もう一つ重要なキーワードとして挙げられたのが「正規化」だ。正規化やテーブル設計の巧拙によって、アプリケーションの作り方やメンテナンスの効率が大きく変わると安野氏は言う。
かつてはデータベースをどう設計すべきかについて膨大な知見が積み重ねられてきたが、安野氏は、最近ならAIと壁打ちすればAIがかなり良いテーブル設計を考えてくれるだろう、と見ている。そのため基本的には、自分がやりたいことをよく考え、AIと対話しながらテーブルを設計していくことが大事だという。
特に、データベースの最初の設計は、アプリケーションが動き始めた後から直すのがかなり大変になる。だから最初の段階でClaudeやGPTとしっかり壁打ちして、テーブルの正規化や仕様を詰めておくことを安野氏は勧める。本来は時間のかかる概念を高速に話したので、分かりにくかった点や分かりやすかった点があればコメントしてほしいと述べ、講座はあと1〜2回で終わりに向かう見込みだとして回を締めくくった。
画面作りだけじゃなくてデータの保存までできると、アプリを作れる幅がグググっと広がっていくので。ただアプリの画面ができたとしても、それを保存しておく場所、箱みたいなものがないと、毎回毎回同じようなデータを入れなくちゃいけなくなっちゃうわけですね。データベースの中でもいろんなデータベースあるんですけれども、Supabaseというものを今回ご紹介いたします。
どうもこんにちは。安野貴博です。本日はバイブコーディング超入門の第7回ということで、データベースについてお話ししたいと思います。データベースの中でもいろんなデータベースあるんですけれども、特にSupabaseというものを今回ご紹介いたします。これが色々ある中でも、初心者向け入門に割と使いやすいかなということで選んでいます。
まず全体像というところなんですけど、データベースって何ぞやという話なんですが、皆さんここまでの超入門の講座を聞いてきて、アプリをなんとなく作れるようになって、それを徐々に改善していくことはできるようになったと思います。ただアプリの画面ができたとしても、それを保存しておく場所、箱みたいなものがないと、毎回毎回同じようなデータを入れなくちゃいけなくなっちゃうわけですね。例えば何を言ってるかと言うと、第4回でシューティングゲームみたいなのを作ったと思いますが、あのシューティングゲームもデータを保存しておく箱がないと、自分がどれくらいのハイスコアを取れたのかとか、ステージいくつまで行けたのかとか、そういったことが毎回毎回忘れられちゃうわけですよね。なので、データベースというデータを保存するような仕組みが必要です。
その中でもSupabaseというものが、難しい準備の部分とかをお任せできるので、今日はこれを紹介したいと思います。画面作りだけじゃなくてデータの保存までできると、アプリを作れる幅がグググっと広がっていくので、是非見ていただければと思います。
本日のポイントは3つです。1つ目は、まずデータベースって何なのという話です。2つ目が、Supabaseって何なの?データベース色々ある中でもSupabaseって何なのという話で、3つ目は使う時の注意点ということで、データを取り扱ってくると、こういう風にすると落とし穴があるよっていうところが色々あったりするので、ここもちょっと触れたいと思います。
ではまず1つ目に、データベースってそもそも何なのという話をします。データベース、先ほどもちょっとだけ言いましたけれども、見た目を作る機能、フロントエンド機能と、データを保存する機能のデータベース、その2つを連携しながら動かしていくようなもので、アプリ側を閉じると消えてしまうようなデータはデータベースに保存して、それでまた起動した時に読み込んでいくということができる、そういった箱になってます。
こういう風に説明すると、なんか難しそうだなと思うと思うんですけど、実はそんなに難しくなくて、ざっくり言うと、Excelとかスプレッドシートみたいなものです。Excelとかスプレッドシートを触ったことない方だとちょっとイメージつきにくいかもしれませんが、どういうものかというと、表のデータをデータベースの中に保存できるようになってるんですよね。Excelとかスプレッドシートって、縦の列と横の行というのがあって、そこにデータを書いていくことができます。データベースの場合は、この縦の列、カラムと言いますけれども、Excelよりもちょっとかっちりしていて、このカラムには数値しか入れちゃダメですよとか、この列には名前の文字しか入れちゃダメですよとか、この列には日付しか入れちゃダメですよっていう、縦の列の項目っていうところを、結構このルールに従えっていうことを言えるようになっています。ここに出してるものだと、名前とメールアドレスと登録日っていうことが縦の列としてあって、田中太郎さんと佐藤花子さんが横の行として追加されてて、こういう感じでどんどんどんどんデータが入っていくようなものになってます。なので構造自体は結構シンプルに、スプレッドシート、Excelと同じ感じです。
じゃあ、この縦のデータの持ち方っていうのをデータ型って言ったりするんですけど、どういうものがあるのって言うと、そのうちの1つの例としてこんな感じのものがあります。文字列型、数値型、日付型、真偽値。これはTrueかFalseか、0か1かしか取れない、そういう型があります。ざっくりこの下に、VARCHARとかINTEGERとかDATEとか書いてありますけれども、こういう風に型があるんだな、タイプがあるんだなと思っていただければと思います。
よく使うキーワードを4つだけあげます。これね、結構いっぱいあるんだけど、まず初心者向けに4つだけあげます。まず1つがテーブルっていうものです。テーブルっていうのは1枚の表のことです。実はデータベースの中って、何個も何個もテーブルを作るんですよね。例えば今言ったように、ユーザーの登録として名前とメールアドレスといつ登録されたのっていう表もあれば、例えばそれがゲームだったとした時に、この人が何月何日にプレイして何点取りましたよっていう、例えばスコアのテーブルがあったりとか、あとはその人がどういう設定をしているのか、例えばなんだろうな、この人はハードモードがいいとか、この人はイージーモードでやってるとか、画面は軽めにしてる、暗めにしてるみたいな個人の設定のテーブル、セッティングのテーブルみたいな感じで、いくつものテーブルを用意することができます。それをつなぎながら使うことができるよと。
2つ目のキーワードとしてレコードというものがあります。これは行ですね。横の行です。3つ目が縦の列というもので、カラムです。最後がデータ型と言って、さっき言っていた、この列はこういうデータ型だよっていう、そういう感じですね。この4つを組み合わせながらデータを保存していくのがデータベースです。
続きまして2個目に、Supabaseとは何ぞという話をしたいと思います。まず、Supabaseっていうのは、データベースを簡単に使えるように、いろんな裏側の設定を0から用意しなくても済むようなサービスです。有償のサービスで、データベースっていうものをゼロから本当に用意しようとすると、例えばサーバーを作る、そして色々設定するみたいな、結構専門知識が要求されるんですけど、もう本当にデータベースをすぐさらっと使いたいとなったら、こういうSupabaseのような、データベースの機能をまとめて使えるようなサービスを使うとお手軽に使えます。これをBackend as a Service、BaaS、バースと呼んだりしますけれども、そういうものがあります。これを入れると、データベースをただ使えるようになるだけじゃなくて、認証の仕組み、この人は本当に大丈夫かなっていうログインの仕組みであるとか、APIで繋ぐ仕組みであるとか、そういうものもまとめてできるということです。なので、面倒な準備ができるんだなと思っていただくといいと思います。
実は、そのSupabaseというサービスの中でベースとなっているのは、ポスグレというものになってまして、これね、MySQLとか色々なタイプのデータベースがあるんですけれども、1つ標準的な、世界中で使われてるポスグレというものを使えるようになっていまして、これを0からポスグレを用意することもできますが、Supabaseを使うと、まずはお手軽に、バイブコーディングをやり始めたばかりの人も、ちょっとハードルはあるけど、それなりに使えるよというものです。結構バイブコーディングとの相性はいいなと思っていて、色々AIに言って「Supabaseでよしなにやっといて」と言うと、それなりにやってくれるので、なので今回はSupabaseを紹介してます。でも他にもいろんな製品があるので、是非興味を持った方がいたら色々調べてみていただくといいと思います。
はい、次に、バイブコーディングで実際にこのデータベース、Supabaseでもいいですし、ポスグレとかMySQLとかを自分で立てたものでもいいんですけど、それを使う時の注意点についてお話しします。この単語を覚えておくといいよっていう単語がいくつかあるので、それもご紹介いたします。
まず1番大事なのは、データベースを壊さないように気をつけるということですね。セキュリティ面の話はまた別の回でやろうと思うんですけれども、1番データベースを使ってる時に怖いのは、データが意図せずに消えてしまったり、入ってたデータが整合しなくなったりすることで、これをなるべく防ぎながらAIで作業をする必要があります。壊さない意識です。壊さない意識。AIはかなり最近賢くなってきてますけど、度々聞くのは、AIが勝手に操作してデータベースの中身を全部消しちゃったとか、壊しちゃったとか、書き換えちゃったとか、そういうことが起きるので、AIがそういう変に壊したりすることを防ぎながら使う必要があります。本番のデータを守りながらAIを使う、これをもう絶対やる必要があります。この意識が大事、壊さない意識が。
えっとですね、危険な言葉があります。この壊さない意識をする時に注意するべきことがあって、この危険な言葉が出てきた時に気をつけるっていうことで、ここに書いてあるのがDELETE、UPDATE、WHERE句っていう、この3つが出てきたらちょっと注意度を上げようということなんですけど、
まず前提として何を言ってるかと言うと、データベースをいじるという時に、データベースに対して命令を送ります。こういうデータを追加してくださいね、こういうデータを削除してくださいね、この3行目のデータをこうこうこういう風に変えてくださいね、山田さんを山田花子さんに変えてくださいね、とか、そういう命令をします。AIで言うところのプロンプトを送るみたいなもんなんですけど、このプロンプトがいわゆるSQL構文というものになっておりまして、SQLっていうのがStructured Query Languageと呼ばれるものなんですけれど、こういうタイプの機械言語、プログラミングの言語があって、このSQL、構造化されたクエリの言語を送ると、それに沿ってデータベース側がいろんな処理をしてくれるものになってます。これもですね、バイブコーディングの超入門講座を見てる皆さんは、SQL構文の詳細はまだ何も知らないと思うんですけれども、これはおいおい、慣れていくごとにどんどん、こういうことがSQLでやられているんだなっていうのを、興味ある方はどんどん調べていただいて。一定、細かいものを作ろうとした時にはこういういろんな知識が必要になってくるわけですけれども、一旦この3つ、DELETE、UPDATE、WHERE句が出てきた時に気をつけてみようということです。
このSQL文の中にDELETEっていうものとUPDATEっていうものとWHERE句ってものがあるわけですけれども、DELETEはもうそのまま名の通り、このデータを削除してっていう命令ですね。これが本番のデータベースに飛ぶと削除、消えちゃってやばい。UPDATEも、例えば山田太郎を山田花子にしてっていうのが送られるわけですけど、そうすると山田太郎だったという情報が消えちゃうんで、UPDATEする時も非常に気をつけないといけない。WHERE句っていうのは、どのデータを対象にするのかっていうのを指定するものです。
例えばこれ、呪文みたいなもんだと思って見ていただきたいんですけど、安全な例と書いてあるのが「DELETE FROM users WHERE id = 5」って書いてあります。これは何を言ってるかというと、DELETEなので消すと。「FROM users」って書いてあるのが、さっき言ってたテーブルっていうのが何枚もあるよね、表が何枚もあるよねってことなんですけど、ユーザーのテーブル、ユーザーの表から消すということになっていて、WHEREという文字が入っているので、IDが5番だったらっていう条件が指定されてるわけですね。IDが5番の人のユーザーの情報を消してねっていうのが、このSQL文の言ってることになります。ところが、これもしWHERE句を付け忘れていると大変なことになって、「DELETE FROM users」なんで、ユーザーの表の一覧が一撃で全部消えちゃうわけですよね。なので、このWHEREが入ってるか入ってないか、そしてそのIDの条件がID=5なのか、IDが5じゃないことなのかで、もう全然変わっちゃうわけですよ。IDが5ではない、って書いてたら、これはもうID5番以外の人の情報が全部消えちゃうわけですね。ということで、SQL文っていうのはちょっと間違えるだけで、もう本番のデータが危機にさらされてしまうようなものです。
バイブコーダーの皆さんは、これをそのまんま書くことはまだあんまりないと思いますが、こういったDELETEとかが出てきた時には、おやっていうことをちゃんと考える必要があるということです。どう考えれば良いかと言うと、例えば時々AIが、こういうSQL文を打っていいですかみたいな話をしてくるんですけど、DELETEやUPDATEが入ってるようなものの場合は、もしかするとデータが消えちゃうかもしれないものなので、ちょっと待って、ちゃんと確認しようねということです。
じゃあ、どうやって気をつければいいのかというところなんですが、この事故を防ぐコツをちょっとお話しします。データベースを触る人なら基礎的にやっていることではあるんですけど、まず何かデータを操作しようと思った時には、件数とかサンプルを見て確認しましょうということですね。例えばさっきの「DELETE FROM users」のDELETEっていうのを、SELECTっていうのに変えることができるんですね。SELECTっていうのは選択するってことなんですけど、「SELECT FROM users」みたいな形にして、「WHERE id = 5」って言うと、その対象となるデータがまず引かれてきます。データベースが、これが対象となるデータだよっていうのを返してくれて、その中身とかその件数とかを見ると、自分が変なことしてるかしてないかってのが分かるので、それをまず見てください。例えばさっきのケースで言うと、「DELETE FROM users WHERE」でIDが5ではない、と、=5じゃなくて「not =5」にしちゃってた場合は、なぜか1人のデータだけ消そうとしたのに、例えばユーザーが1万人いたら、1万件のデータが対象になってるよっていうのが出てくるんで、おやおや、これはちょっとなんかもう完全に違うなみたいなことが分かるわけですね。っていうのが1つ。必ず本番のデータを触る時には、SELECT文、あるいはその対象となるデータの中身を確認してからやりましょうという。
そして2つ目が、本番と開発を分けることです。これが非常に大事で、実際に開発してたらデータを壊しちゃいがちなんですよね。なんですけど、例えばもう本番でユーザーがついていて、ユーザーが触っているようなものの場合は、それを開発しながら壊しちゃうと大変なことになるので、開発用と本番用を切り分けるということです。この開発と本番を分けるっていうのも、もうちょっとだけ言うと、このキーワードだけ覚えておくとAIと会話しやすいかなと思うのが、本番環境のことをプロダクション環境と呼びます。本番のこと、プロダクション環境ということ。そのちょっと直前の検証環境のことをステージング環境と呼びます。もう本番に出る直前のものですね。ステージング環境。もっと初期的な開発用にわちゃわちゃやってるものを、デベロップメント環境とか開発環境って呼んだりするんで、このいろんなわちゃわちゃした開発環境でやってたものがステージングに昇格して、さらにそれがプロダクション環境になるということで、データベースもその数だけ置いておくといいよということです。ここら辺も色々流派があったりしますけれども。
そしてあともう1つ大事なのが、バックアップを取ることですね。毎日バックアップをこの時間に取るとか、そういうことが今のデータベースの製品だとできるようになっているので、毎日バックアップを取りましょう。この取ったデータのことをダンプデータと呼んだりします。このダンプデータっていう単語も覚えておくと、AIとお話ししやすいかもしれないです。このダンプデータ、あるいはバックアップデータを持っておくと、仮に本番データを壊しても、後からこの日のこの時間までは直してあげるよ、と。例えば毎日朝7時にバックアップを取ってて、間違えて12時に消しちゃったら、5時間分の情報は失われるかもしれないんですけど、そこまでの情報は担保できるよとか、あとは製品によっては、直前まで復旧できるようなものとかもあったりするので、バックアップをしっかり取っておくと、仮にデータを壊しちゃってもなんとかなるっていう、ここを覚えておいていただきたいと思います。
Supabaseだと、バックアップを毎日やってくれるというものがありますし、フリープランでも手動でバックアップすることができるので、難しい作業をする直前にバックアップを取っておくと。あるいはClaude Codeに「今バックアップ取っといて」って言うと、バックアップを取ってくれるので、そういう機能もSupabaseはついてるよということです。
AIをどこまで信頼するのかという話なんですけれども、基本的に最終的な確認をちゃんとやっていただきたいということですね。なので、何を消すか、そして何を書き換えるか、どこで実行してるのか、開発環境なのか、ステージング環境なのか、あるいはバックアップがあるかっていうことは、ちゃんと人間が確認しながら仕事を一歩一歩進めていきましょうということです。
ということで、ここまでお話ししてきました。普通にやるとデータベースってもうめちゃくちゃ時間がかかるというか、これはもういろんな深い知識があるんですけれども、本当に表層的なところだけまず解説させていただきましたが、自分がやりたいことがあったら、どんどんAIに「これできる?」っていうのを聞いてみて、分からない概念が出てきたら、それもまたAIに聞いて、どんどん理解していっていただければと思います。ざっくり今日お話ししたのは、まずデータベースの基本ということで、これはざっくり言うと、すげえExcel、すげえスプレッドシートだということです。普通のExcelとかスプレッドシートと違って、列ごとにデータ型というのがあって、それごとにかっちりした構造があるよということです。2つ目が、生のデータベースのソフトウェアをそのまま使うんじゃなくて、Backend as a Serviceの、例えばSupabaseであるとか、そういったものを使うと、AIエージェントでも非常に使いやすいよということです。3つ目が注意点ということで、ちゃんとバックアップを取ろうねとか、何か消したりアップデートしたりする時には範囲を確認しようねとか、あとは環境もちゃんといくつか用意しておいて、本番環境っていうのは絶対に死守しようねとか、そういう話をさせていただきました。ちょっと難しいかもしれないですが、今日聞いた話、キーワードをもとに色々深掘って、色々試行錯誤をしてみて、AIと対話してみてください。
今日入れようかと思ったけど入れなかった、コンセプトというかキーワードとかが色々あるので、ここら辺のキーワードを知っておくと、より次のステップに行けるよっていう、それだけ紹介したいと思います。まずデータベースの基本っていうところで、プライマリーキーとか外部キーとか、テーブルとテーブルをどうやって紐付けるかっていう概念があるんですけれども、覚えておくといいと思います。あとSQLの基本操作というところで、SELECT、INSERT、JOIN、INDEX、UNIQUE、NOT NULL、トランザクション、ロールバック、あとは制約ですね、コンストレイント。はい、ここら辺が分かってくると中級者って感じですね。インデックスっていうのは、データベースを読み取る速度とかが、やっぱりどうしてもデータが大きくなってくると時間がかかっちゃうわけですけど、それを事前に目次をつけておくことによって爆速にするみたいな機能です。
セキュリティの話も大事で、SQLインジェクションと呼ばれるような、変なSQL文を打つことによってデータを意図しない形で壊したり書き換えたりできちゃうようなものがあったりするので、それも大事ですね。あと正規化ですね。正規化も大事です。この正規化とか、テーブルの設計がうまいか下手かみたいなのによって、大きくアプリケーションの作り方とかメンテナンスの効率とか、そこら辺も全然変わってくるんですけれども、昔はこのデータベースをどう設計するのがいいのかっていうことで、ものすごい知見が色々あったんですけど、最近だと多分AIと壁打ちしていくと、AIがめちゃめちゃいいテーブル設計を考えてくれると思うので、基本的には自分がやりたいことをすごいよく考えて、AIとちゃんと壁打ちしながらテーブル設計をしていくのが大事です。このデータベースの1番最初の設計の部分って、実際にアプリケーションが始まった後から直すのが結構大変だったりするので、最初の段階でClaudeであるとかGPTとちゃんと壁打ちをして、テーブルの正規化っていうところを詰めておく、仕様を詰めておくのがおすすめです。
多分、今回も結構飛ばして喋ってる。本当はめちゃめちゃ時間がかかる概念を高速に喋っていってるので、なんか分かんないこととかあったら、ここが分かりにくかったよとか、ここは分かりやすかったよみたいなのもコメントいただければと思います。ということで、バイブコーディング超入門、あともう1回か2回で終わりに行けるかなと思いますが、次の動画もよろしくお願いします。少しでも参考になったら、チャンネル登録、高評価もよろしくお願いします。では、では。
記事公開
