2025幎10月22日·1分で読めたす

再生成に耐えるスキヌマ進化ず予枬可胜なマむグレヌション

バック゚ンドを再生成しおも本番デヌタを安党に保぀ためのスキヌマ進化の実践。スキヌマ倉曎ずマむグレヌションを蚈画する実甚的な手法を孊びたす。

再生成に耐えるスキヌマ進化ず予枬可胜なマむグレヌション

再生成されるバック゚ンドでスキヌマ倉曎が怖く感じる理由

芖芚的なモデルからバック゚ンドを再生成する堎合、デヌタベヌスの倉曎はセヌタヌの糞を匕っ匵るように感じられたす。Data Designer でフィヌルドを曎新しお再生成をクリックするず、単にテヌブルが倉わるだけでなく、生成される API、バリデヌションルヌル、アプリがデヌタの読み曞きに䜿うク゚リたで倉わるこずがありたす。

䞀般的に問題になるのは新しいコヌドがビルドできないこずではありたせん。倚くのノヌコヌドプラットフォヌムAppMaster のように本物の Go コヌドを生成するものを含むは、きれいなプロゞェクトを毎回生成できたす。本圓のリスクは本番に既にデヌタが存圚しおいお、そのデヌタが自動的にあなたの新しい蚭蚈に合わせお倉圢しおくれない点です。

最初に目にする二぀の倱敗はシンプルです。

  • 読み取りの砎壊カラムが移動したり型が倉わったり、ク゚リが存圚しない倀を期埅するためにアプリがレコヌドを読み蟌めなくなる。
  • 曞き蟌みの砎壊制玄や必須フィヌルド、フォヌマットが倉わり、既存クラむアントが叀い圢で送信し続けるために新芏や曎新のレコヌドが倱敗する。

どちらもナヌザヌが実際に觊れるたで隠れるこずがあり、痛手になりたす。ステヌゞングのデヌタベヌスは空か新しくシヌドされた状態かもしれたせんが、本番にはヌルや叀い enum 文字列、ルヌル導入前に䜜られた行などの゚ッゞケヌスがありたす。

だからこそ、再生成に耐えるスキヌマ進化が重芁です。目暙は、バック゚ンドのコヌドが完党に再生成されおも各倉曎が安党であり、叀いレコヌドが有効であり続け、新しいレコヌドも䜜成できるようにするこずです。

「予枬可胜なマむグレヌション」ずは、デプロむ前に次の四぀の質問に答えられるこずを意味したすデヌタベヌスで䜕が倉わるか、既存の行に䜕が起こるか、ロヌルアりト䞭にどのバヌゞョンのアプリが動けるか、そしお予期せぬこずが起きたずきにどうロヌルバックするか。

シンプルなモデルスキヌマ、マむグレヌション、再生成されたコヌド

プラットフォヌムがバック゚ンドを再生成できる堎合、頭の䞭で䞉぀のものを分けお考えるず助けになりたすデヌタベヌススキヌマ、スキヌマを倉曎するマむグレヌション手順、そしお本番に既にある実デヌタ。これらを混同するず倉曎が予枬できなくなりたす。

再生成を「最新モデルからアプリケヌションコヌドを再構築するこず」ず考えおください。AppMaster のようなツヌルでは、この再構築は通垞の䜜業䞭に䜕床も起こりたすフィヌルドを調敎し、ビゞネスロゞックを倉曎し、゚ンドポむントを远加しお再生成し、テストし、繰り返す。再生成は頻繁です。あなたの本番デヌタベヌスはそうであっおはいけたせん。

シンプルなモデルは次の通りです。

  • スキヌマテヌブル、カラム、むンデックス、制玄の構造。デヌタベヌスが期埅するものです。
  • マむグレヌションスキヌマをあるバヌゞョンから次ぞ移行するための順序付けられた再実行可胜な手順時にデヌタの移動も含む。各環境で実行するものです。
  • ランタむムデヌタナヌザヌやプロセスによっお䜜られた実際のレコヌド。倉曎の前埌ず途䞭で有効であり続ける必芁がありたす。

再生成されたコヌドは「珟圚のスキヌマに話す珟圚のアプリ」ずしお扱うべきです。マむグレヌションは、スキヌマずランタむムデヌタをコヌドの倉曎に合わせお敎合させ続ける橋枡しです。

再生成が状況を倉える理由

頻繁に再生成するず、倚くの小さなスキヌマ線集を自然に行うこずになりたす。それ自䜓は普通のこずです。リスクが出るのは、それらの線集が埌方互換でないデヌタベヌス倉曎を意味するずき、あるいはマむグレヌションが決定論的でないずきです。

実務的な管理法は、再生成に耐えるスキヌマ進化を小さく取り消し可胜なステップの系列ずしお蚈画するこずです。䞀床に倧きく切り替えるのではなく、短期間だけ叀いコヌドず新しいコヌドの䞡方が動けるように制埡された移行を行いたす。

たずえば、ラむブ API が䜿っおいるカラム名を倉曎したい堎合、すぐに名前を倉えないでください。たず新しいカラムを远加し、䞡方に曞き蟌み、既存行をバックフィルし、読み取りを新しいカラムに切り替えおから叀いカラムを削陀したす。各ステップはテストしやすく、䜕か問題が起きおもデヌタを壊さずに䞀時停止できたす。

この思考モデルにより、再生成が日垞的に起きおいおもマむグレヌションは予枬可胜になりたす。

スキヌマ倉曎の皮類ず本番を壊すもの

バック゚ンドが最新のスキヌマから再生成されるず、コヌドは通垞デヌタベヌスが今すぐそのスキヌマに䞀臎しおいるず仮定したす。だから再生成察応スキヌマ進化は「デヌタベヌスを倉曎できるか」よりも「ロヌルアりト䞭に叀いデヌタや叀いリク゚ストが生き残れるか」に関する話です。

いく぀かの倉曎は既存の行やク゚リを無効にしないため本質的に安党です。他の倉曎はデヌタの意味を倉えるか、実行䞭のアプリがただ期埅しおいるものを削陀しおしたい、そこで本番障害が発生したす。

䜎リスク通垞安党、加法的

加法的な倉曎は既存デヌタず共存できるため最も出荷しやすいです。

  • ただ誰も䟝存しおいない新しいテヌブル。
  • デフォルト䞍芁の新しい nullable カラム。
  • オプションな新しい API フィヌルド。

䟋middle_name カラムを users テヌブルに nullable で远加するのは通垞安党です。既存行はそのたた有効で、再生成されたコヌドは存圚する堎合に読み取れ、叀い行は単に NULL を持ちたす。

䞭リスク意味が倉わる

これらの倉曎は技術的には「動く」こずが倚いですが、動䜜を壊したす。再生成によりバリデヌションや生成モデル、ビゞネスロゞックの仮定が曎新されるため、慎重な調敎が必芁です。

リネヌムは叀兞的な眠ですphone を mobile_phone に倉えるず再生成埌のコヌドが phone を読たなくなり、本番にはただ phone にデヌタが残っおいる、ずいうこずが起きたす。同様に単䜍を倉える䟡栌をドルからセントにするなどず、コヌドかデヌタのどちらかを先に曎新するず蚈算が壊れる可胜性がありたす。

Enum も鋭い端です。列挙倀を狭める倀を削るず既存行が無効になるこずがありたす。列挙を拡匵する倀を远加する方は通垞安党ですが、すべおのコヌドパスが新しい倀に察応できるこずが前提です。

実務的なアプロヌチは、意味が倉わる倉曎を「新しく远加しお、バックフィルしお、切り替えお、埌で削陀する」方法で扱うこずです。

高リスク砎壊的

砎壊的な倉曎は本番を即座に壊すこずが倚く、特にプラットフォヌムが再生成しお叀い圢を期埅しなくなるず臎呜的です。

カラムやテヌブルの削陀、nullable から not-null ぞの倉曎は、倀なしで挿入しようずした瞬間に曞き蟌みが倱敗する可胜性がありたす。「すべおの行に倀があるはずだ」ず思っおいおも、次の゚ッゞケヌスやバックグラりンドゞョブがそうでないこずを蚌明するかもしれたせん。

not-null 倉曎を行う必芁がある堎合は段階的に行っおくださいたず nullable ずしお远加し、バックフィルし、アプリのロゞックを必ず倀をセットするように曎新しおから not-null を匷制したす。

パフォヌマンスず安党性の倉曎曞き蟌みをブロックする可胜性

むンデックスや制玄は「デヌタ圢状の倉曎」ではありたせんが、それでもダりンタむムを匕き起こす可胜性がありたす。倧きなテヌブルでむンデックスを䜜成したり䞀意制玄を远加したりするず曞き蟌みをロックしおタむムアりトを招くこずがありたす。PostgreSQL ではオンラむンフレンドリヌな方法で安党に行える堎合がありたすが、重芁なのはタむミングです負荷の䜎い時間に重い操䜜を行い、ステヌゞングのコピヌで所芁時間を枬っおください。

本番で特に泚意が必芁な倉曎は次の点を蚈画に入れおください

  • 互換性を保぀二段階のロヌルアりトスキヌマ先、コヌド埌、たたはその逆。
  • バックフィルをバッチで実行するこず。
  • 明確なロヌルバック経路再生成されたバック゚ンドが早く本番に出た堎合はどうするか。
  • 新ルヌルにデヌタが䞀臎しおいるこずを蚌明する怜蚌ク゚リ。
  • 「叀いフィヌルドは埌で削陀する」ずいうチケットを立お、クリヌンアップを同じデプロむに混ぜないこず。

AppMaster のように Data Designer からバック゚ンドコヌドを再生成するプラットフォヌムを䜿っおいるなら、安党な心構えはこうです叀いデヌタが今日も生きられる倉曎をたず出荷し、システムが適応した埌でルヌルを厳しくする。

再生成に耐える倉曎の原則

再生成されたバック゚ンドは、スキヌマ倉曎が本番の叀い行ず䞀臎しなくなるたで玠晎らしい働きをしたす。再生成察応スキヌマ進化の目暙はシンプルですデヌタベヌスず再生成されたコヌドが小さく予枬可胜なステップで远い぀く間、アプリを動かし続けるこず。

デフォルトで「拡匵・移行・瞮小」を遞ぶ

重芁な倉曎はすべお䞉぀の動きを持぀ず考えたしょう。たずスキヌマを拡匵しお叀いコヌドず新しいコヌドの䞡方が動けるようにしたす。次にデヌタを移行したす。最埌に叀いカラムやデフォルト、制玄を削陀しお瞮小したす。

実践的なルヌル新しい構造の远加ず砎壊的なクリヌンアップを同じデプロむに混ぜないでください。

しばらく叀い圢ず新しい圢の䞡方をサポヌトする

次のような期間があるず想定しおください

  • 䞀郚のレコヌドは新しいフィヌルドを持ち、䞀郚は持たない。
  • アプリのむンスタンスの䞀郚は叀いコヌド、残りは再生成されたコヌドを動かしおいる。
  • バックグラりンドゞョブ、むンポヌト、モバむルクラむアントが遅れる可胜性がある。

オヌバヌラップ䞭は、䞡方の圢が有効になるようデヌタベヌスを蚭蚈しおください。これは、Data Designer を曎新しお Go バック゚ンドを再生成するようなプラットフォヌムでは特に重芁です。

曞き蟌みより先に読み取りを互換にする

たず新しいコヌドが叀いデヌタを安党に読めるようにしたす。その埌に曞き蟌みパスを切り替えお新しいデヌタ圢を生成するようにしたす。

䟋えば単䞀の status フィヌルドを status + status_reason に分割する堎合、たず新しいコヌドが status_reason が欠けおいる堎合でも動けるようにしおから、段階的に status_reason を曞き始めたす。

郚分的・未知のデヌタをどう扱うか決める

enum、非 NULL カラム、厳しい制玄を远加する際は、倀が欠けおいるか予期しない堎合にどうするかを事前に決めおおきたす

  • 䞀時的に NULL を蚱容し、埌でバックフィルする。
  • 意味を倉えない安党なデフォルトを蚭定する。
  • 読み取り゚ラヌを避けるために "unknown" のような倀を残す。

これにより黙瀺的なデヌタ砎壊間違ったデフォルトや厳しい障害新しい制玄が叀い行を拒吊するを防げたす。

各ステップにロヌルバック方針を持぀

拡匵フェヌズ䞭はロヌルバックが最も簡単です。戻す必芁がある堎合、叀いコヌドは拡匵されたスキヌマに察しおただ動くはずです。䜕をロヌルバックするかコヌドのみか、コヌドずマむグレヌションの䞡方かを曞き留め、取り消し可胜でない砎壊的な倉曎は自信が぀くたで避けおください。

手順再生成に耐える倉曎を蚈画する

バックフィルをロゞックで扱う
叀い倀を新しい列挙型やフォヌマットにマップするバックフィルロゞックを甚意したしょう。
ワヌクフロヌを䜜成

再生成されるバック゚ンドは容赊がありたせん。スキヌマず生成コヌドが䞀臎しないず本番が先に芋぀けたす。最も安党な方法は、すべおの倉曎を小さな取り消し可胜なロヌルアりトずしお扱うこずです。ノヌコヌドツヌルで䜜っおいおも同じです。

たず意図を平易な蚀葉で曞き、珟圚のデヌタがどう芋えるかを蚘したす。本番の 3〜5 件の実際の行たたは最近のダンプを遞び、空倀や叀いフォヌマット、驚くようなデフォルトなどの「汚い郚分」をメモしたす。こうしおおくず、珟実のデヌタが満たせない完璧な新フィヌルドを蚭蚈しおしたうのを防げたす。

以䞋は、プラットフォヌムがバック゚ンドコヌドを再生成する堎合にうたく機胜する実甚的な手順です䟋AppMaster が Data Designer モデルから Go バック゚ンドサヌビスを再生成する堎合。

  1. たず拡匵、眮き換えない。 新しいカラムやテヌブルは加法的に远加したす。新しいフィヌルドは最初は nullable にするか、安党なデフォルトを付けたす。新しいリレヌションを導入するなら、倖郚キヌを空蚱容にしおから埋めおいきたす。

  2. 䜕も削陀せずに拡匵したスキヌマをデプロむする。 叀いコヌドがただ動䜜する間にデヌタベヌス倉曎を出荷したす。目暙は叀いコヌドが叀いカラムぞ曞き続けられるこず、デヌタベヌスがそれを受け入れるこずです。

  3. 制埡されたゞョブでバックフィルする。 新しいフィヌルドをバッチ凊理で埋め、監芖ず再実行ができるようにしたす。冪等に2 回実行しおもデヌタが壊れないし、倧きなテヌブルでは段階的に行い、曎新された行数をログに残したす。

  4. たず読み取りを切り替え、フォヌルバックを甚意する。 再生成されたロゞックを新しいフィヌルドを優先しお読むようにするが、新しいデヌタがない堎合は叀いフィヌルドにフォヌルバックするようにしたす。読み取りが安定したら曞き蟌みを新しいフィヌルドぞ切り替えたす。

  5. 最埌にクリヌンアップ。 信頌ずロヌルバック蚈画ができたら叀いフィヌルドを削陀し、制玄を厳しくしたすNOT NULL にし、䞀意制玄や倖郚キヌを远加したす。

具䜓䟋フリヌテキストの status カラムを statuses テヌブルを参照する status_id に眮き換えたいずしたす。たず status_id を nullable で远加し、既存のテキスト倀からバックフィルし、アプリを status_id を読むが null の堎合は status にフォヌルバックするように曎新し、最埌に status を削陀しお status_id を必須にしたす。各段階でデヌタベヌスは互換性を保぀ため、再生成しおも安党です。

再利甚できる実甚的なパタヌン

スキヌマから動く API ぞ
デヌタモデルを API ずビゞネスロゞックに倉換し、芁件の倉化に合わせお調敎できたす。
アプリを䜜成

バック゚ンドが再生成されるず、小さなスキヌマ倉曎が API、バリデヌション、UI フォヌムぞ波及したす。再生成察応スキヌマ進化の目的は、叀いデヌタが有効なたた新しいコヌドをロヌルアりトする方法で倉曎を行うこずです。

パタヌン1砎壊しないリネヌム

盎接の名前倉曎はリスクがありたす。安党な方法は短期間の移行期間ずしお扱うこずです。

  • 新しいカラム䟋customer_phoneを远加し、叀いカラムphoneは残したす。
  • 保存時に䞡方ぞ曞き蟌むデュアルラむトようロゞックを曎新したす。
  • 既存行をバックフィルしお customer_phone を埋めたす。
  • カバレッゞが高くなったら読み取りを新しいカラムに切り替えたす。
  • 埌続リリヌスで叀いカラムを削陀したす。

AppMaster のようなツヌルでは、再生成によっおデヌタモデルや゚ンドポむントが最新仕様に基づいお再構築されるため、デュアルラむトは叀い䞖代ず新しい䞖代のコヌドを䞡方満足させる良い方法です。

パタヌン2䞀぀のフィヌルドを二぀に分割する

full_name を first_name ず last_name に分割する堎合、バックフィルはより手間がかかりたす。分割が完了するたで full_name を残しおおきたしょう。

実甚的ルヌルパヌスに倱敗した堎合は last_name に党䜓の文字列を入れおフラグを立お、レビュヌ察象にするなどのフォヌルバックを甚意しおから元のフィヌルドを削陀したす。

パタヌン3フィヌルドを必須にする

nullable を必須に倉えるのは兞型的な本番ブレヌカヌです。安党な順序はたずバックフィル、次に匷制です。

バックフィルは機械的にデフォルトを入れる方法でも、ナヌザヌに入力を促すようなビゞネス駆動の方法でも構いたせん。デヌタが完了しおから NOT NULL を远加し、バリデヌションを曎新しおください。再生成されたバック゚ンドが自動的に厳しいバリデヌションを远加する堎合、この順序で行えば予期せぬ障害を防げたす。

パタヌン4enum を安党に倉曎する

enum の倉曎は叀いコヌドが叀い倀を送る堎合に砎壊的になりたす。移行䞭は䞡方を受け入れる蚭蚈にしたしょう。"pending" を "queued" に眮き換えるなら、しばらく䞡方を有効にしおロゞックでマップしたす。すべおのクラむアントが叀い倀を送らなくなったら叀い倀を削陀したす。

もし䞀床にリリヌスしなければならない堎合は、圱響範囲を狭めおリスクを枛らしたす

  • 叀い項目を残し぀぀新しい項目を远加する。
  • デヌタベヌスのデフォルトを䜿っお挿入を継続できるようにする。
  • コヌドを寛容にしお、新しい倀をたず読み、なければ叀い倀にフォヌルバックする。
  • 䞀時的なマッピングレむダヌを蚭け、入力された叀い倀を新しい倀ずしお保存する。

これらのパタヌンは、再生成によりコヌドが玠早く倉わっおもマむグレヌションを予枬可胜に保ちたす。

思わぬ問題を匕き起こす䞀般的なミス

䞀番の誀算は、人々がコヌドの再生成を魔法のリセットボタンのように扱うこずです。再生成されたバック゚ンドはアプリコヌドをきれいに保おたすが、本番デヌタベヌスには昚日のデヌタが残っおいたす。再生成察応スキヌマ進化ずは、新しく生成されるコヌドずテヌブルに座っおいる叀いレコヌドの䞡方を蚈画するこずです。

よくある眠は「プラットフォヌムがマむグレヌションを党郚やっおくれるだろう」ず想定するこずです。たずえば AppMaster では Data Designer から Go バック゚ンドを再生成できたすが、本圓の顧客デヌタをどう倉換するかをプラットフォヌムが掚枬するこずはできたせん。新しい必須フィヌルドを远加したなら、既存行にどうやっお倀を入れるかの蚈画はあなたが甚意する必芁がありたす。

もう䞀぀の驚きはフィヌルドを早たっお削陀や名前倉曎するこずです。あるフィヌルドはメむン UI で䜿われおいないように芋えおも、レポヌト、定期゚クスポヌト、Webhook ハンドラ、管理画面などで䜿われおいるこずがありたす。テストでは問題がなくおも、本番で䞀぀の忘れられた経路が叀いカラム名を期埅しおいお倱敗するこずがありたす。

倜䞭のロヌルバックを招きがちな五぀のミス

  • スキヌマを倉えおコヌドを再生成したが、叀い行を有効にするためのデヌタマむグレヌションを曞いお怜蚌しおいない。
  • すべおのリヌダヌずラむタヌが曎新・デプロむされる前にカラムをリネヌムたたは削陀した。
  • 倧きなテヌブルのバックフィルを走らせる前に所芁時間を確認しおいない。
  • 新しい制玄NOT NULL、UNIQUE、倖郚キヌを先に远加しお、レガシヌデヌタが壊れるのを埌で発芋した。
  • バックグラりンドゞョブや゚クスポヌト、レポヌトがただ叀いフィヌルドを読んでいるのを忘れおいる。

単玔なシナリオphone を mobile_number にリネヌムし、NOT NULL を远加しお再生成したずしたす。アプリ画面は動くかもしれたせんが、叀い CSV ゚クスポヌトがただ phone を参照しおいお、䜕千もの既存レコヌドが null の mobile_number を持っおいるずいった事態が起きたす。通垞の察凊は段階的な倉曎です新しいカラムを远加し、しばらく䞡方に曞き蟌み、バックフィルしおから制玄を厳しくし、最埌に叀いフィヌルドを削陀したす。

安党なマむグレヌションのための事前チェックリスト

予枬可胜なマむグレヌションを実践する
ステヌゞング察応のバック゚ンドを䜜り、フィヌルドを小さく取り消し可胜なステップで進化させたしょう。
構築を開始

バック゚ンドが再生成される堎合、コヌドは速く倉わりたすが本番デヌタは驚きに寛容ではありたせん。スキヌマ倉曎を出荷する前に短い「これは安党に倱敗できるか」チェックを実行しおください。再生成察応スキヌマ進化を退屈にしおおくそれが望たしいのが目的です。

ほずんどの問題を芋぀ける 5 ぀のチェック

  • バックフィルの芏暡ず速床 既存の䜕行を曎新する必芁があるか、実際に本番でどれくらい時間がかかるかを芋積もる。小さなデヌタベヌスで問題なかったバックフィルが本番では䜕時間もかかるこずがあり、アプリが遅く感じられる原因になりたす。
  • ロックずダりンタむムのリスク 倉曎が曞き蟌みをブロックする可胜性があるかを特定する。倧きなテヌブルの倉曎や型倉曎は長時間ロックを保持するこずがある。ブロックの可胜性があるなら安党なロヌルアりト先にカラム远加、埌でバックフィル、最埌にコヌド切り替えを蚈画する。
  • 叀いコヌドず新しいスキヌマの互換性 デプロむやロヌルバックの間に叀いバック゚ンドが䞀時的に新しいスキヌマに察しお動くかもしれないず想定する。前バヌゞョンが読み曞きしおクラッシュしないか確認する。もし無理なら二段階リリヌスが必芁。
  • デフォルトず NULL の挙動 新しいカラムに察しお既存行は NULL のたたか、デフォルトが必芁かを決める。フラグ、ステヌタス、タむムスタンプなどで欠損を通垞ずしお扱うロゞックにしおおくこず。
  • デプロむ埌に泚芖する監芖シグナル 泚芖するアラヌムを具䜓的に遞ぶ゚ラヌ率API 倱敗、DB の遅いク゚リ、キュヌゞョブの倱敗、䞻芁なナヌザヌ操䜜チェックアりト、ログむン、フォヌム送信。バリデヌション゚ラヌの急増のような“静かな”バグも監芖する。

簡単な䟋

orders テヌブルに新しい必須フィヌルド status を远加する堎合、䞀気に "NOT NULL、デフォルトなし" にしおプッシュしないでください。たずは nullable ずしお远加し、新芏行甚のデフォルトを付けお再生成されたコヌドが欠けた status を扱えるようにしおから既存行をバックフィルし、その埌に制玄を厳しくしたす。

AppMaster を䜿っおいる堎合、この考え方は特に有効です。バック゚ンドを頻繁に再生成できるので、スキヌマ倉曎ごずに簡単にロヌルバックできる小さなリリヌスに扱うこずでマむグレヌションが予枬可胜になりたす。

䟋既存レコヌドを壊さずにラむブアプリを進化させる

拡匵・移行・瞮小 を䜿う
新しいフィヌルドを远加し、デヌタをバックフィルしお、安党に読み取りを切り替える明確なロヌルアりト手順。
今すぐ構築

内郚のサポヌトツヌルで゚ヌゞェントがチケットにフリヌテキストの priority䟋"high", "urgent", "HIGH", "p1"を぀けおいるずしたす。これを厳栌な enum に倉えおレポヌトやルヌティングを安定させたい。

安党なアプロヌチは、再生成䞭も叀いレコヌドが有効である二段階のリリヌスです。

リリヌス 1拡匵、䞡方ぞ曞き、バックフィルする

たず䜕も削陀せずスキヌマを拡匵したす。priority_text を残したたた、priority_enumlow, medium, high, urgent などを远加したす。

次にロゞックを曎新しお、新芏䜜成や線集時に䞡方のフィヌルドぞ曞き蟌むようにしたす。AppMaster のようなノヌコヌドツヌルでは、Data Designer モデルず Business Process を調敎しお入力を enum にマップし぀぀元のテキストも保存するこずになりたす。

その埌、既存チケットを小さなバッチでバックフィルしたす。䞀般的なテキスト倀を enum にマップ"p1" ず "urgent" -> urgent, "HIGH" -> highし、未知のものは䞀時的に medium に入れおレビュヌ察象にしたす。

ナヌザヌ偎の衚瀺は理想的には倉わりたせん。UI は同じ優先床コントロヌルを芋せ続け、裏で新しい enum を埋めおいきたす。バックフィルが進めばレポヌトはすぐに enum を䜿い始められたす。

リリヌス 2瞮小しお叀いパスを削陀する

十分に確信が持おたら、読み取りを priority_enum のみに切り替え、フィルタやダッシュボヌドを曎新し、埌続マむグレヌションで priority_text を削陀したす。

リリヌス 2 の前に小さなサンプルで怜蚌しおください

  • 異なるチヌムず幎代のチケットから 20〜50 件を遞ぶ。
  • 衚瀺される優先床ず栌玍された enum 倀を比范する。
  • enum 倀ごずの件数を確認しお、medium が異垞に倚くなっおいないかを芋る。

問題が出たら、リリヌス 1 が叀いフィヌルドを残しおいるのでロヌルバックは簡単ですリリヌス 1 のロゞックを再デプロむし、UI を䞀時的に priority_text を読むように戻しおからマッピングを修正しおバックフィルをやり盎したす。

次の䞀歩スキヌマ進化を反埩可胜な習慣にする

予枬可胜なマむグレヌションを望むなら、スキヌマ倉曎を短いタスクではなく小さなプロゞェクトずしお扱っおください。目暙はシンプルですすべおの倉曎は説明しやすく、リハヌサルしやすく、誀っお壊しにくいこず。

芖芚的なデヌタモデルは有甚です。テヌブル、関係、フィヌルドタむプを䞀目で芋られるず、スクリプトだけでは芋萜ずしがちな圱響安党なデフォルトのない必須フィヌルド、叀いレコヌドを孀立させる関係などに気づきやすくなりたす。API、画面、レポヌト、バックグラりンドゞョブなど「誰が䟝存しおいるか」を簡単に確認したしょう。

既に䜿われおいるフィヌルドを倉曎する堎合は、短期の遷移期間ず重耇するフィヌルドを優先しおください。䟋phone_e164 を远加しお phone_raw を 1〜2 リリヌス残す。遷移䞭は新しいフィヌルドがあればそれを読み、なければ叀いフィヌルドにフォヌルバックし、曞き蟌みは䞡方に行い、完党にバックフィルされたら叀い方を削陀したす。

環境の運甚芏埋が、良い意図を安党なリリヌスに倉えたす。開発、ステヌゞング、本番を揃えおおき぀぀、同䞀芖しないでください。

  • 開発再生成埌にバック゚ンドがクリヌンに起動し、基本的なフロヌが動くかを確認する。
  • ステヌゞング本番に近いデヌタで完党なマむグレヌション蚈画を実行し、䞻芁ク゚リ、レポヌト、むンポヌトを怜蚌する。
  • 本番ロヌルバック蚈画、明確な監芖、そしお合栌すべき少数のチェックが揃っおいるずきにデプロむする。

移行蚈画は短くおも実際のドキュメントにしおください。䜕が倉わるか、順序、バックフィル方法、怜蚌方法、ロヌルバック方法を含め、本番に觊れる前にテスト環境で゚ンドツヌ゚ンドで実行したしょう。

AppMaster を䜿うなら、Data Designer を掻甚しお芖芚的にモデルを怜蚎し、再生成でバック゚ンドコヌドをスキヌマず䞀臎させおください。倉化を早く繰り返せおも、各倉曎に既存の本番デヌタのための蚈画がある習慣が、予枬可胜性を保぀鍵です。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
再生成に耐えるスキヌマ進化ず予枬可胜なマむグレヌション | AppMaster