💨

マイグレーションファイルの命名を考えてみる。- Rust × SQLx CLI -

2024/03/30に公開

はじめに

マイグレーションファイルの命名、皆さんはどうしていますか?
言語や、ライブラリごとに命名ルールが敷かれていることもあると思うので、
特に気にしたことがない人もいらっしゃるかもしれません。

私が Rust を使い、さらに SQLx というライブラリを使っている中で命名をいくつか考えてみました。
参考になれば幸いです。

SQLx CLI を使ってマイグレーションファイルを作成する

事前に SQLx のクレートを追加しておく必要があります。

▼SQLx
https://crates.io/crates/sqlx
▼SQLx CLI
https://crates.io/crates/sqlx-cli

$ cargo add sqlx
$ cargo add sqlx-cli

マイグレーションファイルの作成には以下のコマンドを実行します。

$ sqlx migrate add <名前>

こうすることで、<timestamp>_<名前>.up.sql<timestamp>_<名前>.down.sqlの2つのファイルが作成されます。
<timestamp>部分が自動的に生成され、マイグレーションファイルに命名することができます。

ちなみに、CLIを使わずに、<hogehoge>.sql のようなマイグレーションファイルを独自で生成した場合、マイグレーション実行時に読み取られませんでした、、
どうやら、SQLx にて命名の取り決めがあるようです。

命名を考えてみる

さて、本題である命名どうしようなんですが、パターンを2つ考えました。

何をするかを明示する

例えば、<timestamp>_create_table_todos.sql といった具合です。
todosというテーブルを作成すると明示されたファイルで、実際に中身を見なくてもよいという点は良いですね。
ただし、単一のファイルで複数のテーブルを作成し、更新するといった処理が多くなる場合は、命名を再考する必要があるかと思います。

以下のように明確に決まっているパターンであれば申し分なさそうですね。

create table if not exists "todos" (
    "id" varchar(26) primary key,
    "title" text not null,
    "description" text,
);

チケット番号等で明示する

例えば、<timestamp>_<HOGE-1234>.sql のようにチケット、課題番号等で命名することも選択肢かなと考えました。

単一のファイルで複数のテーブルを作成し、更新するといった処理も実現できますし、
どのチケットによって作成されたマイグレーションファイルか、が目に見えてわかるので、これもわかりやすいなと思いました。

おわりに

いかがでしたでしょうか。
組織的な文化が根付いていれば命名ルールはすでに決まっているところもあるかもしれません。

もっと良い命名などがあれば、ぜひ教えてください!!

コラボスタイル Developers

Discussion