10日目ということで銃 1 をモチーフにしたgemです
index_shotgunとは?
重複インデックスを検知するためのgemです
名前の由来
SQLアンチパターン の1つ、「インデックスショットガン(闇雲インデックス)」が由来です。
使い方
アプリに組み込む時
Gemfile
group :development do
gem "index_shotgun"
end
Rails以外では下記も必要です。
Rakefile
require "index_shotgun/tasks"
下記コマンドで実行
$ bundle exec rake index_shotgun:fire
今まで作ったgemの中でこのtask名は個人的には一番気に入っています
データベースに接続するための設定は activerecord からよしなに読み込むため、特別な設定は不要です。
コマンドから実行する時
各プロバイダーごとにサブコマンドが用意されているのでそれらを実行してください。(細かいオプションは help
参照)
index_shotgun mysql --database=DATABASE
index_shotgun oracle --database=DATABASE
index_shotgun postgresql --database=DATABASE
index_shotgun sqlite3 --database=DATABASE
特徴
- pt-duplicate-key-checkerとだいたい一緒だけどactive_recordベースなのでMySQL以外でも使えるのが特徴
- MySQL, PostgreSQL, SQLite, Oracle対応
- 面白い試みとして、1つのリポジトリでTravis CIとWerckerを両方使ってる
- Travis CIだとOracleが使えないため
- Oracleのインストールが超絶面倒くさいので、Oracleインストール済のDockerfileをWerckerで使ってる。(Rubyがインストール済のイメージにOracleを入れるよりも、Oracleがインストール済のイメージにRubyをインストールする方が楽だった)
CIで重複インデックスを検出する
最近の自分の開発だとCIのビルドスクリプトで rake index_shotgun:fire
を実行し重複インデックスがあった場合にはPullRequestやMergeRequestのビルドが落ちるようになっています。(下記のスクショはGitLab CI)
本番リリースして大量のデータが入っている状態でインデックスを消すのは大変ですが、これなら開発時に重複インデックスが自動で検出できるようになります。
合わせて読みたい
-
十(銃)だけに ↩