読者です 読者をやめる 読者になる 読者になる

Rails の Application Template を使ってアプリ新規作成時の刺身タンポポ作業を自動化

rails コマンドにこんな便利機能があったなんて…っ!

qiita.com

Rails アプリを新規作成するとき、決まって次の作業をやっている。

  1. rspec_rails インストール
  2. factory_girl_rails インストール
  3. Devise インストール
  4. ユーザー作成
  5. 管理ユーザー作成
  6. RailsAdmin インストール

さすがに上記の作業を毎回やるのは面倒なので、RailsAdmin のインストールまでが終わったモックアプリを用意して使い回しているけど、それでもアプリ名をリーネームするの大変。Application Template 機能を使えば完全に自動化できそうだ。

さっそくやってみた。

@after_bundler = []
def after_bundler(&block)
  @after_bundler << block
end

gem 'rails-i18n'
gem 'better_errors', group: :development
gem 'binding_of_caller', group: :development
gem 'annotate', group: :development

gem 'rspec-rails', group: [:development, :test]
after_bundler do
  generate "rspec:install"
end

gem 'capybara', group: [:development, :test]
after_bundler do
  inject_into_file "spec/spec_helper.rb", :before => "require 'rspec/autorun'" do
    "require 'capybara/rails'\n"
  end
end

gem 'factory_girl_rails', group: [:development, :test]
gem 'debugger', group: [:development, :test]
gem 'konacha', group: [:development, :test]
gem 'awesome_print', group: [:development, :test]
gem 'simplecov', require: false, group: :test
gem 'simplecov-rcov', require: false, group: :test

gem 'webmock', group: :test
after_bundler do
  inject_into_file "spec/spec_helper.rb", :before => "require 'rspec/autorun'" do
    "require 'webmock/rspec'\n"
  end
end

gem 'devise'
after_bundler do
  generate "devise:install"
  generate "devise User"
  generate "devise:views"
  rake "db:migrate"
end

gem 'rails_admin'
after_bundler do
  generate "devise Admin"
  rake "db:migrate"
  generate "rails_admin:install", "admin rails_admin"
  rake "db:migrate"
end

gem 'bootstrap-sass'
gem 'font-awesome-sass-rails'
after_bundler do
  inject_into_file "app/assets/stylesheets/application.css", :before => " *= require_self" do
    " *= require bootstrap\n"
  end
  inject_into_file "app/assets/stylesheets/application.css", :after => " *= require_self" do
    "\n *= require bootstrap-responsive\n *= require _font-awesome"
  end
  inject_into_file "app/assets/javascripts/application.js", :before => "//= require_tree ." do
    "//= require bootstrap\n"
  end
end

run "budle install"

@after_bundler.each do |h|
  h.call
end

# commit to git
git :init
git :add => "."
git :commit => '-m "create initial application"'

RailsAdmin が無事動くことを確認したら、ちょっと興奮してしまった。

Rails アプリ新規作成時の刺身タンポポ作業を自動化できて超便利なのに、家にある唯一の Rails 本『Rails3 レシピブック』には載ってなくて残念。半年は早く知りたかったよ、セニョール。