Rails

Rails アプリケーションテンプレート超意訳

More than 5 years have passed since last update.

Rails アプリケーションの雛形を簡単に作成するための Rails アプリケーションテンプレートのざっくりとした利用方法を掴むために超意訳してみました。参考までに、関連する記事も貼っておきます。


原文


参考



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 テンプレートはこのようになります。


template.rb

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 を追加します。

例えば、bjnokogiri の 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.rbApplication クラスにコードを追加します。

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'"