Rails アプリケーションの雛形を簡単に作成するための Rails アプリケーションテンプレートのざっくりとした利用方法を掴むために超意訳してみました。参考までに、関連する記事も貼っておきます。
原文
参考
- RailsのApplication templateを使って開発の初速をあげよう! - Qiita [キータ]
- Application Templatesを使ってRailsの初期構築を自動化 | kotamiyake.me (old)
- Rails templateで開発の初速を上げよう
- Rails プロジェクトでスタートダッシュを決める
- rails new した時の追加処理をかく - そんなこと覚えてない
- RailsWizard - Simple Rails Templates courtesy of Intridea
Rails アプリケーションテンプレート
アプリケーションテンプレートは、gems や initializers を追加するための DSL を含む簡単な Ruby ファイルです。
このガイドを読むと分かること:
- Rails アプリケーションを自動生成、又は、カスタマイズするためにテンプレートを利用する方法
- Rails テンプレート API を利用して、独自の再利用可能なアプリケーションテンプレートを書く方法
利用方法
テンプレートを適用するには、Rails ジェネレーターの -m
オプションを利用して、適用したいテンプレートの位置を指定する必要があります。いずれかのファイル、又は、URL へのパスを指定することが可能です。
$ rails new blog -m ~/template.rb
$ rails new blog -m http://example.com/template.rb
既存の Rails アプリケーションにテンプレートを適用するには、rails:template
という rake タスクを利用することが可能です。
$ rake rails:template LOCATION=~/template.rb
$ rake rails:template LOCATION=http://example.com/template.rb
テンプレート API
Rails テンプレート API は、簡単に理解することが可能です。
典型的な Rails テンプレートはこのようになります。
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rake("db:migrate")
git :init
git add: "."
git commit: %Q{ -m 'Initial commit' }
以下のセクションでは、API によって提供される主要な方法の概要を示します。
gem(*args)
自動生成されたアプリケーションの Gemfile
に gem を追加するには、gem
を追加します。
例えば、bj
と nokogiri
の gem を追加したい場合はこのようになります。
gem "bj"
gem "nokogiri"
gem のインストールを行うためには、bundle install
を実行する必要があります。
run_bundle
gem_group(*names, &block)
グループに gem を内包します。
例えば、rspec-rails
の gem を development
又は、test
グループで利用したい場合はこのようになります。
gem_group :development, :test do
gem "rspec-rails"
end
add_source(source, options = {})
自動生成されたアプリケーションの Gemfile
にソースを追加します。
例えば、"http://code.whytheluckystiff.net" から gem のソースを必要とする場合はこのようになります。
add_source "http://code.whytheluckystiff.net"
environment/application(data=nil, options={}, &block)
config/application.rb
の Application
クラスにコードを追加します。
options[:env]
を指定した場合、そのコードはconfig/environments
の対応するファイルに追加されます。
environment 'config.action_mailer.default_url_options = {host: "http://yourwebsite.example.com"}', env: 'production'
ブロックは data
引数の代わりに利用することが可能です。
vendor/lib/file/initializer(filename, data = nil, &block)
自動生成されたアプリケーションの config/initializers
ディレクトリにイニシャライザーを追加します。
例えば、このようになります。
initializer 'bloatlol.rb', <<-CODE
class Object
def not_nil?
!nil?
end
def not_blank?
!blank?
end
end
CODE
同じように、lib()
は lib/
ディレクトリにファイルを作成し、vendor()
は vendor/
ディレクトリにファイルを作成します。
file()
は Rails.root
からの相対パスを受け入れ、必要となる全てのディレクトリ、ファイルを作成します。
例えば、app/components
ディレクトリに foo.rb
を作成する場合はこのようになります。
file 'app/components/foo.rb', <<-CODE
class Foo
end
CODE
rakefile(filename, data = nil, &block)
指定されたタスクを lib/tasks
以下の新しい rake ファイルに作成します。
例えば、boot:strap
rake タスクを lib/tasks/bootstrap.rake
に作成する場合はこのようになります。
rakefile("bootstrap.rake") do
<<-TASK
namespace :boot do
task :strap do
puts "i like boots!"
end
end
TASK
end
generate(what, *args)
指定された引数にて、Rails ジェネレーターを実行します。
generate(:scaffold, "person", "name:string", "address:text", "age:number")
run(command)
任意のコマンドを実行します。
例えば、README.rdoc
ファイルを削除したい場合はこのようになります。
run "rm README.rdoc"
rake(command, options = {})
Rails アプリケーションにて、rake タスクを実行します。
例えば、データベースをマイグレーションしたい場合はこのようになります。
rake "db:migrate"
異なる Rails 環境の rake タスクを実行することも可能です。
rake "db:migrate", env: 'production'
route(routing_code)
config/routes.rb
ファイルにルーティングを追加します。
route "root to: 'person#index'"
inside(dir)
指定したディレクトリにてコマンドを実行することが可能です。
inside('vendor') do
run "ln -s ~/commit-rails/rails rails"
end
ask(question)
ask()
は、テンプレートとして利用するかどうか、ユーザーからフィードバックを得ることが可能です。
lib_name = ask("What do you want to call the shiny library ?")
lib_name << ".rb" unless lib_name.index(".rb")
lib lib_name, <<-CODE
class Shiny
end
CODE
yes?(question) or no?(question)
これらのメソッドを利用すると、質問をした結果、ユーザーの回答に基いてフローを決めることが可能です。
rake("rails:freeze:gems") if yes?("Freeze rails gems?")
# no?(question) acts just the opposite.
git(:command)
どのような git コマンドでも実行することが可能です。
git :init
git add: "."
git commit: "-a -m 'Initial commit'"