Railsのtemplateを使用して重複労働を避ける


そもそもこのtemplate機能はRails 2時代にすでに存在していた.だからこれは新鮮なものではありません.残念ながら私はその時関心を持っていなかったが、後で忘れてしまった.今日、他の人のブログを見て、これが私がずっと探していたものだと気づきました.
 
Railsプロジェクトを初期化するたびに重複した作業をしなければならないと思いますか?例えばGemfileによく使われるgemを入れたり、PrototypeをjQueryに置き換えたり、generatorを走ったり…など.Rails templateは、これらの重複作業をコードで完了させることができます.
 
説明:本人開発環境はRails 3.0.4なので、以下のコマンドはRails 3のものです.
 
例えば、自分がしなければならないことをDSLでファイルに書きます(内容は勝手に書きます):
 
# File path
# ~/rails_template.rb

gem 'jquery-rails'
gem 'rspec', :group => :test

run "bundle install"

generate :scaffold, "User name:string"
rake "db:migrate"

 
コードの意図がはっきりしていて、Railsをやっている人が分からないことはないでしょう......
次に、新しいプロジェクト(your_appと呼びます)を作成するときに、-mパラメータでこのファイルパスを参照します.
 
rails new your_app -JT -m ~/rails_template.rb

 
Railsは初期化プロジェクトが完了すると、スクリプトの内容を実行します.かっこいいのではないでしょうか.
 
実はRails templateは、日常の仕事を説明するために、親しみやすいAPIを提供しているだけです.また、プロジェクトの初期化時だけでなく、既存のRailsプロジェクトにも使用できます.rails:templateタスクを実行し、ファイルパスをLOCATIONパラメータに渡すだけです.
 
rake rails:template LOCATION=~/rails_template.rb

 
これにより、日常的なタスクをさまざまなRails templateに配置し、状況に応じて使用することができます.または、Railsプロジェクトに複数の異なるtemplateを適用します.Don't Repeat Yourself !
 
私の習慣によると、本文は同じように使ったことのないdevelopersにこのようなものを紹介しただけです.結局私も勉強しているし、他人のことを繰り返す必要はないのではないでしょうか.(特に他の人が上手に書いたとき).もっと詳しいものを見たいなら、次の2つの文章で答えを見つけることができます(最初の記事を読むことをお勧めします):
 
私のRails 3 App Template(+jQuery+RSpec+Watchr)
この文章はRails templateの「ベストプラクティス」と言えるようになり、ディレクトリ構造の設計は学ぶ価値がある.さらにtemplateファイルからconfig/アプリケーションの置き換えなど、あなたが望むAPIの大部分を見つけることができます.rbコンフィギュレーションファイルのある行は、新しいコンフィギュレーション増分をファイルに書き込む......そしてこれらのAPIはRails APIではまだ調べられない......誰かが見つけたら教えてください.
 
Rails templates
Rails templateが提供するいくつかのAPIの紹介は、Rails APIよりも少し詳細です.
 
最後に自分のRails templateを貼って、最初の文章を真似て書いた.いくつかのテスト項目を初期化します.
 
これはRails templateです
 
# File path:
# ~/shared_scripts/rails_template/rails3.rb
# 
# How to use:
#   rails new your_app -TJ -m ~/shared_scripts/rails_template/rails3.rb

# Use customized Gemfile instead of the auto-generated Gemfile
# Customized Gemfile is in ~/shared_scripts/rails_template/
run "mv Gemfile Gemfile.old"
file 'Gemfile', File.read("#{File.dirname(rails_template)}/Gemfile")

run "bundle install"

generate 'rspec:install'
generate 'jquery:install'
# For coffee script
generate 'barista:install'

# Create dir for coffee script and sass
run "mkdir app/coffeescripts"
run "mkdir public/stylesheets/sass"

# Setting jquery
gsub_file 'config/application.rb', /(config.action_view.javascript_expansions.*)/,
                                   "config.action_view.javascript_expansions[:defaults] = %w(jquery rails)"

# Keep tmp and log directory
run "touch tmp/.gitkeep"
run "touch log/.gitkeep"

# Create scaffold if needed
if yes?("Do you want to generate a scaffold ?")
  params = ask("Enter scaffold: ")
  generate :scaffold, params
  rake "db:migrate"
end

 
これはGemfileです
 
# File path:
# ~/shared_scripts/rails_template/Gemfile

source 'http://rubygems.org'

gem 'rails', '3.0.4'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'
# PostgreSQL adapter
# gem 'pg'

gem 'jquery-rails'
gem 'haml'
gem 'haml-rails'
gem 'json'
gem 'barista'

# Must apply rspec in development env, or the generators will generate test_unit files instead of rspec ones
group :development, :test do
  gem 'rspec'
  gem 'rspec-rails'
end

# AR finder
# gem 'meta_where'

# Paginator
# gem 'kaminari'

# HTML5 offline app
# gem 'rack-offline'