シンプルな自動化処理を作ろう
前回の内容で、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メソッド
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 :add => '.'
gitメソッドは、引数にgitのコマンド名と引数のハッシュを受け取る。
は
となる。
gitコマンドを知っていれば、悩まずに使えるはずだ。
pluginメソッド
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メソッド
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 :i18n, "ja"
generateはscript/generateメソッドを実行するためのメソッド。 1番目の引数にジェネレーター名、2番目は引数だ。
もう一回gitメソッド
git :add => "."
git :commit => "-a -m 'First commit.'"
完成したテンプレート
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プロジェクトを作る場合
とすれば、すべてよしなにしてくれます。
テンプレートの置き場所は個人的にはGithubが良いと思っている。
railsコマンドを叩く時に、テンプレートファイルをローカルのどこに置くか悩ましい問題だと思うからだ。
Githubに置いておけばバージョン管理もできるし、直接URLを叩く事もできるし、何より他の人とテンプレートファイルを共有できる。
というわけで今回作ったファイルはここに置いておきます。
TemplateRunner
Application Templateはrailtiesのrails_generatorの配下にソースがある。
短いソースで読みやすいので、是非どうぞ。 capify!やfreeze!といった、見ただけで何をするものか分かるメソッドも用意されてます。
関連記事