Railsのマイグレーション生成をもっともっとImprovementする! mi gem version 1.0.0 をリリースしました!
こんにちは! RuboCop大好きpockeです。 最近はRuboCopにPRを投げるのが趣味みたいになってきました。
Railsにおけるマイグレーションファイルの生成をもっともっと楽にするGem、mi
のバージョン1.0.0をリリースしたので、今回はその紹介をしようと思います!
はじめに
唐突ですが、rails g migration
ってめんどくさいですよね。私は死ぬほどめんどくさいと思っています。
今回紹介するmi
はこのコマンドをより楽にするGemです。
どれぐらい楽になるのか比較してみましょう。
# 従来のもの $ bin/rails g migration AddEmailToUsers email:string # mi を使用したもの $ bin/rails g mi users +email:string
上記の2つのコマンドは、どちらも同じマイグレーションファイルを生成します。
miの方がより簡潔な記述になっていますね。
思想
私はこのmi
で重要な点は、クラス名を直接記述しなくて済むことだと考えています。
従来のジェネレータでは、AddEmailToUsers
の様にユーザーが明示的にクラス名を指定する必要があります。
しかし先ほど見ていただいたとおり、mi
ではクラス名を指定していません。
mi
ではmi
がクラス名を生成します!
これによって、クラス名の命名規則を覚える必要がなくなり、無駄なタイプ数も削減されます。
使い方
mi
では、+
でadd_column
, -
でremove_column
, %
でchange_column
を表します。
実例を見るのがわかりやすいので実際に見てみましょう。
$ bin/rails g mi users +age:integer -name %email:string:{null:false} create db/migrate/20160709082050_add_age_and_remove_name_and_change_email_of_users.rb
上記のコマンドを実行すると、以下のようなマイグレーションファイルが生成されます。
class AddAgeAndRemoveNameAndChangeEmailOfUsers < ActiveRecord::Migration def change add_column :users, :age, :integer remove_column :users, :name change_column :users, :email, :string, null: false end end
簡潔で直感的な出力結果ですね!
もっともっと便利に!
ここまでの例は既存のテーブルに対しての操作でしたが、バージョン1.0.0からはcreate_table
もサポートしています。
$ bin/rails g mi:create users +email:string +name:string create db/migrate/20160709082602_create_users_table.rb
class CreateUsersTable < ActiveRecord::Migration def change create_table :users do |t| t.string :email t.string :name t.timestamps null: false end end end
より多くの場面でmi
をお使いいただけるようになりました。
そしてRails 5へ
先日Rails 5がリリースされましたね!
Riding Rails: Rails 5.0: Action Cable, API mode, and so much more
ActionCableが目玉機能として注目されていますが、マイグレーションファイルにも変更が入っています。
Version the API presented to migration classes, so we can change parameter defaults without breaking existing migrations, or forcing them to be rewritten through a deprecation cycle.
New migrations specify the Rails version they were written for:
class AddStatusToOrders < ActiveRecord::Migration[5.0]
def change
# ...
end
endMatthew Draper, Ravil Bayramgalin
上記の通り、既存のマイグレーションが壊れるのを防ぐためにマイグレーションのバージョニング機能が入っています。
mi
もバージョン1.0.0でこの機能に対応しました!
Rails 5を使用していれば、上記のフォーマットに沿ったマイグレーションファイルが生成されます。
また、もちろんRails 4でも今までどおりお使いいただくことが可能です。
まとめ
mi
の説明をさせていただきましたが、いかがでしたでしょうか?
mi
が提供するものは、簡潔なマイグレーションファイルジェネレータのみです。
そのため、既存のジェネレータ(rails g migration
)と併用することも可能であり、生成されたマイグレーションファイルは何ら特殊なものではないためmi
にロックインされることもありません。
ですので既存の環境を壊すことなく導入が可能です。
Gemfileにgem 'mi'
と書くだけで導入できるので、是非インストールして使ってみて下さい!
Link
- mi | RubyGems.org | your community gem host
- rubygems へのリンク
- もっと便利に rails g migration する - pockestrap
mi
の初回リリース時の記事です。
- Gem を複数バージョンの依存ライブラリでテストする - 暇人じゃない
mi
のテストを、Rails 4と5両方で走らせる参考にしました。