くりにっき

フルスタックキュアエンジニアです

【今月のgem】activerecord-simple_index_name を作った

今月2つ目のgemです

activerecord-simple_index_name について

activerecordのデフォルトのindex名を短くするgemです

github.com

こんなmigrationがあった場合

create_table :user_stocks do |t|
  t.integer :user_id,    null: false
  t.integer :article_id, null: false
  t.timestamps null: false
end

add_index :user_stocks, [:user_id, :article_id]
  • activerecord-simple_index_name を使わない場合 : index_user_stocks_on_user_id_and_article_id
  • activerecord-simple_index_name を使った場合 : user_id_and_article_id

カラム名だけのシンプルなindex名になります。テーブル名が長いとよく「index名が長いぞ(゚Д゚)ゴルァ!」って言われてなくなくnameを指定すると思いますが、そういうのが少なくなります。

ちなみに add_index で生成されるindexにテーブル名が含まれているのはSQliteとの兼ね合いだった気がするのでMySQLとかで使う分にはindexにテーブル名が含まれなくても問題ないです

参考

qiita.com

使い方

Gemfileに書いてrequireすればmigrateした時に勝手にindex名が短くなります。RailsとPadrinoで確認済

作った経緯

  1. 社内勉強会でこれとは別のindex名を短くする社内gemが紹介される
  2. 丁度隣にその社内gemを作った人がいたので「前々からOSSにしたいって言ってたけどやんないんなら僕がやってもいいっすか?」*1と聞いて許可を貰う
  3. そしたら別の人から http://qiita.com/kamipo/items/6e5a1e238d7cc0611ade をオススメされる
    • f:id:sue445:20151129205444p:plain
  4. id:kamipo さんにgem化の許可貰ってgem作成

qiitaを見るとRails3系の実装ですが4系でも問題なく動いていました

index名が長くならないのは便利なので是非ご利用下さい

追記

Twitterで突っ込まれたので既存アプリへの投入はしばらくお待ち下さい(;´Д`)

追記2

v0.2.0で対応してます

詳しくはREADMEの「Configurations」「Opt-in/Opt-out」辺りを読んで下さい

Rails 5.0.0.beta1は若干挙動怪しい(´・ω・`)

*1:2~3年前くらいに社内gemとして公開されていた