Interactive

データの事故

コードの失敗は履歴から戻せます。データの失敗も復元機能があれば戻せますが、戻せる期間と単位には条件があります。この違いを知っていると、慎重になるべき場面が「コードを変える時」ではなく「本番のデータに触れる時」だと分かります。

コードは履歴、データは復元条件を確認する

コードはバージョン管理によって履歴が残り、記録した時点まで戻せます。データベースは製品によって復元の仕組みが異なります。弊社の標準であるCloudflare D1にはTime Travelがあり、保持期間内なら任意の時点へ戻せます。ただし、期間を過ぎた状態には戻せず、復元はデータベース全体を上書きします。「戻せる」と「気軽に触ってよい」は同じではありません。

復旧するとデータ全体が過去へ戻る

だから、コードの変更はClaudeに大胆に任せられますが、本番のデータに触れる操作だけは別の扱いをします(Claudeへの権限)。

事故の型

  • 条件の抜けた削除・更新。「テストデータを消して」が、条件の書き間違いで全件に及ぶ
  • migration(データベース構造の変更手順。構造の観点)による項目の削除や型の変更。構造の変更は、中のデータごと消すことがある
  • 開発用の初期化スクリプトが本番へ向く。「データベースをリセットして」は、接続先が本番なら本番が消える
  • 自動テストが本番のデータベースへ接続したまま実行される

共通するのは、操作そのものは日常的で、接続先だけが想定と違うという形です。操作を怖がるより、接続先を確かめる方が的を射ています。

開発から本番のデータベースへ接続しない

弊社では、開発中の環境に本番データベースの接続情報を置きません。環境ごとに接続先を分け(環境の分離)、開発では開発用のデータベースだけに繋ぎます。接続情報がなければ、どんな操作の間違いも本番には届きません。「気をつける」より「届かなくする」を選んでいます。

プロンプトの例
この環境がどのデータベースに接続しているか確認して。本番に繋がるものがあれば教えて

バックアップは、戻せてはじめて成立する

バックアップは、取ることではなく戻せることに意味があります。復元の手順を一度も試していなければ、事故の当日に初めて試すことになります。何日前まで戻せるか、どの範囲が一緒に巻き戻るかを、利用中のサービスと契約で確認します。Cloudflare D1の場合はTime Travelの公式資料を参照し、事故後の別の変更まで失われないかも確認します。復旧条件と手順の確認先はCLAUDE.mdに残す前提に含めます。

プロンプトの例
このmigrationを本番に適用する前に、バックアップの状態と、失敗した時に戻す手順を確認して

参考資料