平々凡々エンジニア

平凡で難しい悩みを解決

DBを消せば新しいマイグレーションを使ったDBの編集はしなくてもいいことを知った

railsチュートリアルでは本番データを取り扱っていない場合でもDBの属性を編集するときは新しくマイグレーションファイルを生成してadd_columやインデックスを追加していたので毎回ファイル生成しなくてはならない理由がよくわからなかったので調べました。

まず仕様としてマイグレーションファイルを元にDBは作成されます。マイグレーションファイルはYYYYMMDDHHMMSS_create_products.rbのような名前で生成されます。さらに最後のファイル名は、 クラスの名前と一致させる必要があります。上記の例の場合CreateProductsクラスがYYYYMMDDHHMMSS_create_products.rbの中に必要になります。 railsではマイグレーションファイル名に作成日を入れることでタイムスタンプとして役割をさせます。 このタイムスタンプを利用することでマイグレーション実行順番を決定します。また マイグレーションを一回実行すると実行されたマイグレーションファイルは実行済みとなります。 なので一度実行されたマイグレーションファイルを編集してもDBには反映されることはありません。 しかし、DBを一度消してマイグレーションを行うことで編集を反映させることができるので 本番環境でDBを使用指定なのであればわざわざ新しいマイグレーションファイルを生成する必要は内容です。

というかマイグレーションファイルを読み込んでrailsがそれをsqlに変換してDBを生成するはずなので 一度行われたsqlをもう一度実行できるわけはないですよね(例えばDB作成されているのにDB作成sqlを流す等)