Rails2.3のApplication Templateを使ってRspecやI18nの設定を自動化

シンプルな自動化処理を作ろう

前回の内容で、Application Templateがどういうものかわかったので実際に必要最低限のテンプレートを準備してみる。

前回:Rails 2.3のApplication Templateで煩わしい初期設定とはおさらばする!

今回はテストにRspecを利用し、国際化にI18nを、バージョン管理にGitを使う場合の一連の処理を自動化してみよう。

自動化する内容

実際に行う作業は

  • database.ymlをdatabase.sample.ymlにコピーする
  • READMEを削除
  • public/index.htmlを削除
  • rspecのインストール
  • rspec_railsのインストール
  • i18n_generatorsのインストール
  • gitのリポジトリとして初期化する
  • gitの無視ファイルを作成する
  • script/generate rspecを実行
  • script/generate i18n ja
  • リポジトリに変更を追加する
  • リポジトリにコミットする

となっている。

本当に必要最低限だけど、railsでプロジェクトを作り始める時必ずやる作業だ。
まずはここまでを作り、これを元にしてカスタムしていくつもりだ。

テンプレートファイル作る

それでは順番にテンプレートを作って行こう。 今回はsimple.rbというファイル名としてますよ。

runメソッド

# Copy database.yml
run "cp config/database.yml config/database.sample.yml"

# Delete unnecessary files
run "rm README"
run "rm public/index.html"

database.ymlをdatabase.sample.ymlにコピーしている。 SVNやGitなどバージョン管理を利用する場合の定番の管理方法だ。 database.ymlはバージョン管理から無視されるように設定しておくことで チェックアウトした各ユーザーの環境に合わせてDBを利用できる。

ここではrunメソッドを使っています。 runはプロジェクトのトップディレクトリでシステムコマンドを実行する。

同じ要領でREADMEやpublic/index.htmlも削除しておこう。

gitメソッド

git :init
git :add => '.'

gitメソッドは、引数にgitのコマンド名と引数のハッシュを受け取る。

git add .

git :add => '.'

となる。

gitコマンドを知っていれば、悩まずに使えるはずだ。

pluginメソッド

# Install plugins
plugin 'rspec', :git => 'git://github.com/dchelimsky/rspec.git', :submodule => true
plugin 'rspec-rails', :git => 'git://github.com/dchelimsky/rspec-rails.git', :submodule => true
plugin 'i18n_generators', :git => 'git://github.com/amatsuda/i18n_generators.git', :submodule => true

pluginメソッドはオプションに:gitか:svnを受け取り、プラグインをインストールする。
ここではプラグインをサブモジュール扱いにしある。

fileメソッド

run "touch tmp/.gitignore log/.gitignore vendor/.gitignore"
file '.gitignore', <<-END
.DS_Store
log/*.log
tmp/**/*
config/database.yml
db/*.sqlite3
db/schema.rb
END

tmp log vendorフォルダに.gitignoreを作成する。 gitは空のディレクトリをコミットできないので、こういった対処が必要となる。

fileメソッドは、最初の引数をファイル名として、2番目の引数の文字列の内容でファイルを作成する。

.gitignoreはgitの無視ファイルリストだ。database.ymlやログファイルなどコミット対象でないものを定義する。

generateメソッド

generate :rspec
generate :i18n, "ja"

generateはscript/generateメソッドを実行するためのメソッド。 1番目の引数にジェネレーター名、2番目は引数だ。

もう一回gitメソッド

git :submodule => "init"
git :add => "."
git :commit => "-a -m 'First commit.'"

完成したテンプレート

# Copy database.yml
run "cp config/database.yml config/database.sample.yml"

# Delete unnecessary files
run "rm README"
run "rm public/index.html"

# Set up git
git :init
git :add => '.'

# Install plugins
plugin 'rspec', :git => 'git://github.com/dchelimsky/rspec.git', :submodule => true
plugin 'rspec-rails', :git => 'git://github.com/dchelimsky/rspec-rails.git', :submodule => true
plugin 'i18n_generators', :git => 'git://github.com/amatsuda/i18n_generators.git', :submodule => true

# Add .gitignore
run "touch tmp/.gitignore log/.gitignore vendor/.gitignore"
file '.gitignore', <<-END
.DS_Store
log/*.log
tmp/**/*
config/database.yml
db/*.sqlite3
db/schema.rb
END

# Execute generator
generate :rspec
generate :i18n, "ja"

# Commit git
git :submodule => "init"
git :add => "."
git :commit => "-a -m 'First commit.'"

完成したファイルを使ってrailsプロジェクトを作る場合

rails myproject -m simple.rb

とすれば、すべてよしなにしてくれます。

テンプレートの置き場所は個人的にはGithubが良いと思っている。
railsコマンドを叩く時に、テンプレートファイルをローカルのどこに置くか悩ましい問題だと思うからだ。

Githubに置いておけばバージョン管理もできるし、直接URLを叩く事もできるし、何より他の人とテンプレートファイルを共有できる。

というわけで今回作ったファイルはここに置いておきます。

http://github.com/func09/templates-rails-project/blob/ae51c81afc9eaa819bf9e4f745a83540de2186c6/simple.rb

TemplateRunner

Application Templateはrailtiesのrails_generatorの配下にソースがある。

http://github.com/rails/rails/blob/e8cc4b116c460c524961a07da92da3f323854c15/railties/lib/rails_generator/generators/applications/app/template_runner.rb

短いソースで読みやすいので、是非どうぞ。 capify!やfreeze!といった、見ただけで何をするものか分かるメソッドも用意されてます。

関連記事

  1. Rails 2.3のApplication Templateで煩わしい初期設定とはおさらばする!
  2. [rails] restful-authenticationの使い方 基本編
  3. Rails2.2の新機能i18nを使ってみる
  4. Ruby on Rails2.3RC1のNested Object Forms を試してみた
  5. [rails] ユーザーのパスワード忘れ処理を簡単に生成してくれるプラグインforgot_password ( with Restful-authentication)
Posted in ruby, ruby on rails, 日記 at 3月 6th, 2009. Trackback URI: trackback
Tags:

No Responses to “Rails2.3のApplication Templateを使ってRspecやI18nの設定を自動化”

Leave a Reply