駆け出しエンジニアの気ままブログ

気になったことについて、調べながら投稿するブログです。

Migrationファイル追加するときにつけたほうが良いコマンド

概要

Migrationファイルを追加するときに、必ずつけてほしいコマンドを紹介します。

after

こちらのコマンドは、どのカラムの後に追記するかを指定することができます。

初期生成時は、気にする必要はありません。

 create_table :posts do |t|
   t.string :title, null: false
   t.string :content, null: false

   t.timestamps
   t.datetime :discarded_at

この時に作成されるカラムは下記になります。

title
content
created_at
updated_at

この状態で、新しくカラムを追加したいとき

add_colum: :posts, :status, :text

だけを追加すると、

title
content
created_at
updated_at
status

のようなテーブルとなってしまいます。基本的にcreated_atupdated_atの後ろに追加することは好ましくありません。(良いですが、SQLが見にくくなります。。。)

そんなときは、

add_colum: :posts, :status, :text, after: title

とすることで、

title
status
content
created_at
updated_at

のように追加場所を指定できます。

もし、複数のカラムを場所を指定して追加したい場合は、

add_colum: :posts, :status, :text, after: title
add_colum: :posts, tag, :text, after: :status
add_colum: :posts, :summary, :text, after: :tag

のようにすることで

title
status
tag
summary
content
created_at
updated_at

のようにカラムを追加することができます。

comment

こちらは、このカラムはどんなことをしているのか示すコメント機能です。 SQLのコメントに追加することができます。 さらに、annotate(gem)を使っている場合には、モデルファイルの上部に追記されるカラムにもコメントが表示されるようになります。

先程のカラム追加を参考に

add_colum: :posts, :status, :text, after: title, comment: "ステータス"
add_colum: :posts, tag, :text, after: :status, comment: "タグ"
add_colum: :posts, :summary, :text, after: :tag, comment: "サマリー"

のように追加することで、カラムの説明をすることができます。 ドキュメントを残す手間が省けるので良いと思います。

さらに、enum型を使う時

add_colum: :posts, :status:, integer, comment: "ステータス 0: to_do, 10: done, 20: doing"

のような書き方もできます。 enumが変更される度に、変更コストがかかりますが、こちらを都度修正できれば、最小限の工数で維持できるかと思います。

以上、最後までお付き合いいただきありがとうございました。