備忘録

働きたくないでござる

Elixir, Phoenix でデフォルトで created_at を使う方法

Rails から Elixir に移行しようと思っているので、 inserted_atではなく created_at を使いたいと思っています。
ただ、 Ecto で created_at を使うにはマイグレーションとモデルに timestamps(inserted_at: :created_at) にわざわざ書かないといけないので事故りそうです。

めんどうなのでデフォルトで created_at を使うようにしたいのですが、結論から書くとは現行の安定バージョンではできないようです。 しかし、 elixir_ecto の v2.2.0-rc.1 では migration_timestamps というパラメーターが追加されています。
ecto/migration.ex at v2.2.0-rc.1 · elixir-ecto/ecto · GitHub

現状の Phoenix では

Failed to use "ecto" (version 2.2.0-rc.1) because
  phoenix_ecto (versions 3.2.0 to 3.2.3) requires ~> 2.1 *
  mix.exs specifies ~> 2.2.0-rc.1

と怒られるので使用できませんが、今後使えるようになるようですね。

ちなみに使用する時は config/config.exs に以下のように書けばいいような雰囲気を感じています。

config :sample, Sample.Repo,
  migration_timestamps: [inserted_at: :created_at]

migration_primary_key も追加されているのでプライマリーキーを変更することもできそうですし、タイムスタンプnaive_datetimeutc_datetime に変更することもできるようです。

所感

Elixir を初めてまだ2日目ですが、 Elixir や Phoenix などの進化速度の速さに驚いています。 前情報ではエコシステムの小ささがネックと聞いていましたが、今のところあまり不満は感じていないです。