annotateとは
アプリケーションの各モデルのスキーマ情報やルーティング情報を、ファイルの先頭にコメントで出力してくれるgemです。
これがあるとモデルにどんなカラムがあったかいちいちスキーマを確認したり、rake routes
でルーティングを確認したりと言った手間が省けます。
バージョン
導入手順
gemインストール
Gemfileに下記を追加してbundle install
group :development do gem 'annotate' end
このgemは開発環境でしか使用しないのでgroup :development
の中で指定すること。
annotateの設定
マイグレーション時に自動的にスキーマ情報をファイルに書き出したい場合は、下記のコマンドを実行してrakeファイルを作成しておきます。
$ rails g annotate:install create lib/tasks/auto_annotate_models.rake
手動でスキーマ情報を書き出したい場合は、bundle exec annotate --models
で逐次実行することも出来ます。
annotateの実行
スキーマ情報
それでは、実際にannotateを実行してみるとどうなるでしょうか。
下記のようなスキーマ情報を持つPostモデルがあったとします。
create_table "posts", force: :cascade do |t| t.string "title", default: "", null: false t.text "content", default: "" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end
ターミナルでbundle exec annotate --models
を実行します。
$ bundle exec annotate --models Annotated (3): app/models/post.rb, spec/factories/posts.rb, spec/models/post_spec.rb
これで3ファイルに対してannotateが実行されました。実際にファイルの中身を見てみます。
# app/models/post.rb # == Schema Information # # Table name: posts # # id :bigint not null, primary key # content :text default("") # title :string default(""), not null # created_at :datetime not null # updated_at :datetime not null # class Post < ApplicationRecord end
# spec/factories/posts.rb # == Schema Information # # Table name: posts # # id :bigint not null, primary key # content :text default("") # title :string default(""), not null # created_at :datetime not null # updated_at :datetime not null # FactoryBot.define do factory :post do end end
# spec/models/post_spec.rb # == Schema Information # # Table name: posts # # id :bigint not null, primary key # content :text default("") # title :string default(""), not null # created_at :datetime not null # updated_at :datetime not null # require 'rails_helper' RSpec.describe Post, type: :model do end
ルーティング情報
bundle exec annotate --routes
でconfig/routes.rb
に自動で出力してくれます。
これでルーティング確認のためにいつもやっていたrake routes
も必要無くなりますね。
まとめ
いかがでしたでしょうか?今回はRailsでの開発のお助けgem、annotateをご紹介しました。
このgemを使うことで、特に複数人での開発の際に、カラム情報などをまとめる必要が無くなります。
便利なので是非使ってみてください。