LoginSignup
34
34

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-12-08

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
34