シンプルな自動化処理を作ろう
前回の内容で、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を叩く事もできるし、何より他の人とテンプレートファイルを共有できる。
というわけで今回作ったファイルはここに置いておきます。
TemplateRunner
Application Templateはrailtiesのrails_generatorの配下にソースがある。
短いソースで読みやすいので、是非どうぞ。 capify!やfreeze!といった、見ただけで何をするものか分かるメソッドも用意されてます。