Rails Advent Calendar 9日目です。
どのくらい認知があるのか知りたい、という意味も込めての投稿です:-)
Railsに標準で備わっているApplication Template(アプリケーションテンプレート)の概要とサンプルの紹介です。
RailsはGemが増えると最初の設定だるい
よくRailsは「設定より規約」なんだよね、とか聞きますが、
たしかにRailsは仕組みさえ覚えてしまえば、
比較的簡単にデプロイまでできてしまいます。
難しい設定ファイルも書くことはとても少ないです。
特に最近はHerokuを中心とするPaaSの台頭でよりその恩恵を受けれている気がします。
また、Rubyのコミュニティがとても活発で、
優秀な方がたくさんいるので、めちゃんこ便利なGemがたくさん流通しています。
Githubをサーフィンしてたら、
「やっべー、このGemすげー、Gemfileに追加しよ!」
ってことは日常茶飯事です。
でも、そうやっているといつのまにかGemの設定ファイルがたくさん生まれます。
Capistranoならconfig/deploy.rb
ResqueをGodで監視するならconfig/god/resque.rb
他に毎回application.rbに追加している設定もあるかもしれません。
そうすると、
rails new hogehoge
してから、実際にアプリケーションコード書き始めるまでの準備がとても長い…
そしてコピペするとミスのなんのって。
やっぱこうなってきたら自動化したいですよね。
Application Templateを使おう
RailsにはApplication Templateという機能があります。
どういうのかっていうと、
いつも使う設定をひとつのファイルにまとめておくと、
毎回それを参照することで自動的にファイルの生成や設定の追加をやってくれる、というものです。
文章にするとちょっと抽象的すぎますね。
たとえば、
# Gemfileにrainbowを追加(bundle installの前に実行される)
gem 'rainbow'
# どうせいつもすぐ消すし消しとこ!
remove_file "public/index.html"
rails new new_project_name -m app_template.rb
とすると、自動的にrainbowが入った状態で、
public/index.htmlが存在しないプロジェクトが出来上がります。
もし、毎回は使わないけど、時々使いたいgemがあれば、
if yes?('Would you like to install nokogiri?')
gem 'nokogiri'
end
のように書くことも出来るし、gitのリモートリポジトリを指定したいときは、
@app_name = app_name
@remote_repo = ask("git remote repo?")
git :remote => "add origin #@remote_repo:#@app_name.git"
のようにインタラクティブなApplication Templateも書くことも出来ます。
詳しい書き方については、
英語ですがRails Guidesに書いてあるのでそちらをご参照ください。
Rails Guides
Creating and Customizing Rails Generators & Templates > 8 Application Templates
Rails Guidesにも書いてあるんですが、
このApplication TemplateではThorの以下のメソッドも使えるので便利です。
作るのもいいけど…出来上がってるの無いの?
あるある、あるよ。
Stackoverflow
What Rails application templates show best practices for setting up a new Rails 3 application?
でもすんげーたくさん詰まってて、
個々が使いやすいように、自分のために作るものだと思うので、
是非ちょっとずつ自分のAppcation Templateを作ってみては!とおもいます。
って言うだけじゃ説得力ないな、と思ったので自分もつくりました笑
tachiba's application template
スパゲッティになっちゃっているので、
設定の量が増えたらStackoverflowに紹介されているもののように、
ファイルを分割してapplyで参照するのが可読性も保ててよいのかと思います。
自動化して楽しよう!
やっぱRailsを使うなら実装を書くのに時間を割きたいな、と思います。
ほんで、これだけすらすら実装して、
デプロイできる環境が整っているので、
それこそゴミのようにたくさんサービスを作りたいわけです。
ちょっと最初は面倒なんですが、
自分のためのApplication Templateを作る、育てるのは楽しいと思うので、
是非作ってGithubで公開してみてください。
cf.)
ちなみに、Rails ComposerというRails Apps Composer(Gem)を使ったテンプレートもあります。
http://railsapps.github.com/rails-composer/
ちょっと複雑そうに見えたので自分は逃げてしまいました:-(