Rails のコマンドラインツール

このガイドの内容:

このチュートリアルは、Railsをはじめようを読んで、基本的なRailsの知識があることを前提としています。

1 コマンドラインの基礎

Railsを使用する際に、きわめて重要なコマンドがいくつかあります。それらを使用頻度順に並べると以下のとおりです。

  • rails console
  • rails server
  • rake
  • rails generate
  • rails dbconsole
  • rails new app_name

どのコマンドも-h もしくは --helpオプションを使用することで、詳細な情報をみることができます。

簡単なRailsアプリケーションをつくりながら、一つずつコマンドを実行していきましょう。

1.1 rails new

Railsをインストールしたあと、最初にやりたいことはrails newコマンドを実行して、新しいRailsアプリケーションを作成することです。

まだRailsをインストールしていない場合、gem install railsを実行してRailsをインストールできます。

$ rails new commandsapp
    create
    create README.rdoc
    create Rakefile
    create config.ru
    create .gitignore
    create Gemfile
    create app
    ...
    create  tmp/cache
    ...
        run bundle install

このような短いコマンドをうつだけで、Railsは非常に多くのものを用意してくれます。たったこれだけで、完璧なRailsのディレクトリ構成と、アプリケーションに必要なコードがすべて手に入りました。

1.2 rails server

rails serverコマンドを実行すると、WEBrickという小規模のwebサーバーが起動します(WEBrickはRubyに標準添付されています)。Webブラウザからアプリケーションにアクセスしたいときは、このコマンドを使用します。

rails serverを実行することで、新しいRailsアプリケーションを作成後すぐにRailsアプリケーションを起動することができます。

$ cd commandsapp
$ bin/rails server
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2013-08-07 02:00:01] INFO  WEBrick 1.3.1
[2013-08-07 02:00:01] INFO  ruby 2.0.0 (2013-06-27) [x86_64-darwin11.2.0]
[2013-08-07 02:00:01] INFO  WEBrick::HTTPServer#start: pid=69680 port=3000

ちょうど3つのコマンドで、Railsサーバーを3000番ポートで起動しました。ブラウザを立ち上げて、http://localhost:3000を開いてみてください。Railsアプリケーションが動作していることが分かります。

サーバーを起動する際にはrails sのように"s"というエイリアスが使用できます。

-p オプションを使用することで、待ち受けるポートを指定できます。サーバーの環境は -e オプションで変更することができ、デフォルトではdevelopment (開発) 環境で実行されます。

$ bin/rails server -e production -p 4000

-bオプションを使用するとRailsを特定のIPにバインドできます。デフォルトでは0.0.0.0です。-dオプションを使用することで、デーモンとしてサーバーを起動することができます。

1.3 rails generate

rails generateコマンドでは、テンプレートを使用して様々なものを作成します。rails generateを実行すると、利用可能なジェネレータの一覧が表示されます。

ジェネレータコマンドを実行する際にはrails gのように"g"というエイリアスが使用できます。

$ bin/rails generate
Usage: rails generate GENERATOR [args] [options]

...
...

Please choose a generator below.

Rails:
  assets
  controller
  generator
  ...
  ...

ジェネレータgemをインストールしたり、プラグインに付属しているジェネレータをインストールすることで、ジェネレータを増やせます。また、自分でジェネレータを開発することもできます。

ジェネレータを使用すると、アプリケーションを動かすのに必要な Boilerplate Code (訳注: 多くの箇所で使われている、ほとんどor全く変更がないコード) を書かなくて済むため、時間を節約できます。

それではコントローラジェネレータを使って、コントローラを作ってみましょう。どのようなコマンドを使用すればよいのでしょうか?ジェネレータに聞いてみましょう。

Railsのすべてのコマンドにはヘルプがついています。多くの *nix (訳注: LinuxやUnix、UnixライクなOSなど) のユーティリティと同じようにコマンドの最後に--helpもしくは-hオプションを与えてください (例: rails server --help)。

$ bin/rails generate controller
Usage: rails generate controller NAME [action action] [options]

    ...
    ...

    Description:
    ...

    To create a controller within a module, specify the controller name as a path like 'parent_module/controller_name'.

    ...

Example:
    `rails generate controller CreditCards open debit credit close`

    Credit card controller with URLs like /credit_cards/debit.
        Controller: app/controllers/credit_cards_controller.rb
        Test:       test/controllers/credit_cards_controller_test.rb
        Views:      app/views/credit_cards/debit.html.erb [...]
        Helper:     app/helpers/credit_cards_helper.rb

コントローラジェネレータにはgenerate controller ControllerName action1 action2という形式でパラメータを渡します。helloアクションを実行すると、すてきなメッセージを返してくれるGreetingsコントローラを作ってみましょう。

$ bin/rails generate controller Greetings hello
     create  app/controllers/greetings_controller.rb
      route  get "greetings/hello"
     invoke    erb 
     create    app/views/greetings
     create    app/views/greetings/hello.html.erb
     invoke  test_unit
     create    test/controllers/greetings_controller_test.rb
     invoke  helper
     create    app/helpers/greetings_helper.rb
     invoke  assets
     invoke    coffee
     create      app/assets/javascripts/greetings.js.coffee
     invoke    scss
     create      app/assets/stylesheets/greetings.css.scss

どのようなものが作成されたのでしょう?いくつかのディレクトリがアプリケーションに存在することを確認し、コントローラファイル、ビューファイル、機能テストのファイル、ビューのヘルパー、JavaScriptファイルそしてスタイルシートファイルを作成しました。

コントローラ(app/controllers/greetings_controller.rb)を確認し、少し編集してみましょう。

class GreetingsController < ApplicationController
  def hello
    @message = "Hello, how are you today?"
  end 
end 

メッセージを表示するためにビュー(app/views/greetings/hello.html.erb)を編集します。

<h1>A Greeting for You!</h1>
<p><%= @message %></p>

rails serverでサーバーを起動します。

$ bin/rails server
=> Booting WEBrick...

URLはhttp://localhost:3000/greetings/helloです。

通常のRailsアプリケーションでは、URLはhttp://(host)/(controller)/(action)というパターンになります。またhttp://(host)/(controller)というパターンのURLはコントローラのindexアクションへのURLとなります。

Railsにはデータモデルのためのジェネレータもついています。

$ bin/rails generate model
Usage:
  rails generate model NAME [field[:type][:index] field[:type][:index]] [options]

...

Active Record options:
      [--migration]            # Indicates when to generate migration
                               # Default: true

...

Description:
    Create rails files for model generator.

利用可能なフィールドタイプ(field types)についてはAPI documentationに記載されている、TableDefinitionのcolumnメソッドの説明を参照してください。

ここでは直接モデルを作成する代わりに(モデルの作成は後ほど行います)、scaffoldを生成しましょう。Railsにおいてscaffoldとは、モデル、モデルのためのマイグレーション、モデルを操作するためのコントローラ、モデルを操作・表示するためのビュー、それらのためのテスト一式のことをさします。

"HighScore"という名のリソースを準備してみましょう。このリソースの役割はビデオゲームでの最高得点を記録することです。

$ bin/rails generate scaffold HighScore game:string score:integer
    invoke  active_record
    create    db/migrate/20130717151933_create_high_scores.rb
    create    app/models/high_score.rb
    invoke  test_unit
    create      test/models/high_score_test.rb
    create      test/fixtures/high_scores.yml
    invoke  resource_route
     route    resources :high_scores
    invoke  scaffold_controller
    create    app/controllers/high_scores_controller.rb
    invoke    erb 
    create      app/views/high_scores
    create      app/views/high_scores/index.html.erb
    create      app/views/high_scores/edit.html.erb
    create      app/views/high_scores/show.html.erb
    create      app/views/high_scores/new.html.erb
    create      app/views/high_scores/_form.html.erb
    invoke  test_unit
    create      test/controllers/high_scores_controller_test.rb
    invoke  helper
    create      app/helpers/high_scores_helper.rb
    invoke    jbuilder
    create      app/views/high_scores/index.json.jbuilder
    create      app/views/high_scores/show.json.jbuilder
    invoke  assets
    invoke    coffee
    create      app/assets/javascripts/high_scores.js.coffee
    invoke    scss
    create      app/assets/stylesheets/high_scores.css.scss
    invoke    scss
   identical    app/assets/stylesheets/scaffolds.css.scss

ジェネレータはモデル、コントローラ、ヘルパー、レイアウト、機能テスト、ユニットテスト、スタイルシート用のディレクトリが存在することをチェックし、ビュー、コントローラ、モデル、マイグレーション(high_scoresテーブルとフィールドを作成する)を生成し、このresourceのためのルーティングを用意します。またこれらのためのテストも作成します。

migrateを実行してマイグレーションを走らせる必要があります。つまりデータベースのスキーマを変更するためにRubyのコード(コードとは20130717151933_create_high_scores.rbに書かれたコードのことです)を実行する必要があります。データベースとはどのデータベースでしょうか?rake db:migrateコマンドを実行すると、RailsはSQLite3に新しいデータベースを作ります。Rakeについては後ほど詳しく説明します。

$ bin/rails db:migrate
==  CreateHighScores: migrating ===============================================
-- create_table(:high_scores)
   -> 0.0017s
==  CreateHighScores: migrated (0.0019s) ======================================

単体テストについて説明します。単体テストとは、コードをテストし、アサーションを行うコードです。ユニットテストでは、モデルのメソッドといったコードの一部分を取り出して、その引数と戻り値をテストします。単体テストはあなたの友人です。単体テストを書くことで幸せな人生が送れるということに、早く気がついたほうがいいでしょう。本当です。すぐにでも気がつけるはずです。

Railsが作ったインターフェースをみてみましょう。

$ bin/rails server

ブラウザでhttp://localhost:3000/high_scoresを開いてみましょう。新しいハイスコアを作ることができます(スペースインベーダーで55,160点とかね!) (訳注: 2003年にDonald Hayesがたたき出したスコアです)。

1.4 rails console

consoleコマンドを使うと、コマンドラインでRailsアプリケーションとやり取りすることができます。rails consoleは内部的にIRBを使用しているので、IRBを使ったことがあれば、扱うのは簡単です。ひらめいたアイデアを試してみたり、ウェブサイトにアクセスすることなくサーバのデータを変更するのに役立ちます。

コンソールコマンドを実行する際にはrails cのように"c"というエイリアスが使用できます。

consoleコマンドを実行する環境を指定することができます。

$ bin/rails console staging

データを変更することなくコードをテストしたいときは、rails console --sandboxを実行します。

$ bin/rails console --sandbox
Loading development environment in sandbox (Rails 4.2.0)
Any modifications you make will be rolled back on exit
irb(main):001:0>
1.4.1 appオブジェクトとhelperオブジェクト

rails consoleの実行中、appオブジェクトとhelperオブジェクトにアクセスできます。

appメソッドを使用すると、URLヘルパーとpathヘルパーにアクセスできます。またリクエストを投げることもできます。

>> app.root_path
=> "/"

>> app.get _
Started GET "/" for 127.0.0.1 at 2014-06-19 10:41:57 -0300
...

helperメソッドを使用すると、Railsのアプリケーションヘルパーと自分が実装したヘルパーにアクセスすることができます。

>> helper.time_ago_in_words 30.days.ago
=> "about 1 month"

>> helper.my_custom_helper
=> "my custom helper"

1.5 rails dbconsole

rails dbconsoleコマンドは使用しているデータベースを探し出し、適切なデータベースコマンドラインツールを起動します(また、コマンドラインツールに必要な引数を探し出します)。MySQL、PostgreSQL、SQLite、そしてSQLite3をサポートしています。

DBコンソールコマンドを実行する際にはrails dbのように"db"というエイリアスが使用できます。

1.6 rails runner

runnerコマンドを使うと、非対話的にRailsの文脈でRubyのコードを実行することができます。たとえば次のようになります。

$ bin/rails runner "Model.long_running_method"

ランナーコマンドを実行する際にはrails rのように"r"というエイリアスが使用できます。

-eを使用することでrunnerコマンドを実行する環境を指定することができます。

$ bin/rails runner -e staging "Model.long_running_method"

1.7 rails destroy

destroygenerateの反対と言えます。ジェネレータコマンドが何をしたか把握し、それを取り消します。

rails dのように、"d"というエイリアスを使ってdestroyコマンドを実行することもできます。

$ bin/rails generate model Oops
      invoke  active_record
      create    db/migrate/20120528062523_create_oops.rb
      create    app/models/oops.rb
      invoke  test_unit
      create      test/models/oops_test.rb
      create      test/fixtures/oops.yml

$ bin/rails destroy model Oops
      invoke  active_record
      remove    db/migrate/20120528062523_create_oops.rb
      remove    app/models/oops.rb
      invoke  test_unit
      remove      test/models/oops_test.rb
      remove      test/fixtures/oops.yml

2 Rake

RakeはRuby版のMakeです。Unixの 'make' に代わるような独立したRubyのユーティリティで、'Rakefile'と.rakeファイルでタスクを定義・管理します。 Railsでは、管理系のタスクはRakeタスクで書かれています。Railsのタスクは洗練されていて、タスク同士が協調して動くようになっています。

rake --tasksとタイプすると、実行可能なRakeタスクの一覧が表示されます。カレントディレクトリによって、表示される内容が変化します。各タスクには説明がついているので、必要なタスクを見つけるのに役立つはずです。

--traceを使うことで、タスクを実行する際のバックトレースをすべて表示することができます (訳注: バックトレースには、依存するタスクの呼び出しと実行順序が表示されます)。 例えば rake db:create --trace のようにしてタスクを実行します。

$ bin/rails --tasks
rake about              # List versions of all Rails frameworks and the environment
rake assets:clean       # Remove old compiled assets
rake assets:clobber     # Remove compiled assets
rake assets:precompile  # Compile all the assets named in config.assets.precompile
rake db:create          # Create the database from config/database.yml for the current Rails.env
...
rake log:clear          # Truncates all *.log files in log/ to zero bytes (specify which logs with LOGS=test,development)
rake middleware         # Prints out your Rack middleware stack
...
rake tmp:clear          # Clear session, cache, and socket files from tmp/ (narrow w/ tmp:sessions:clear, tmp:cache:clear, tmp:sockets:clear)
rake tmp:create         # Creates tmp directories for sessions, cache, sockets, and pids

rake -Tでもタスクの一覧を表示することができます。

2.1 about

rake aboutを実行すると、Ruby、RubyGems、Rails、Railsのサブコンポーネント (訳注: Active RecordやAction Packなど) のバージョン、Railsアプリケーションのフォルダー名、現在のRailsの環境名とデータベースアダプター、そして、スキーマのバージョンが表示されます。誰かに質問をしたいときや、セキュリティパッチが自分のアプリケーションに影響するか確認したいときなど、現在使用しているRailsに関する情報が必要なときに役立ちます。

$ bin/rails about
About your application's environment
Ruby version              1.9.3 (x86_64-linux)
RubyGems version          1.3.6
Rack version              1.3
Rails version             4.2.0
JavaScript Runtime        Node.js (V8)
Active Record version     4.2.0
Action Pack version       4.2.0
Action View version       4.2.0
Action Mailer version     4.2.0
Active Support version    4.2.0
Middleware                Rack::Sendfile, ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007ffd131a7c88>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, Rack::Head, Rack::ConditionalGet, Rack::ETag
Application root          /home/foobar/commandsapp
Environment               development
Database adapter          sqlite3
Database schema version   20110805173523

2.2 assets

rake assets:precompileを実行すると、app/assets配下のファイルをプレコンパイルすることができます。またrake assets:cleanを実行すると、古くなったコンパイル済みのファイルを削除できます。assets:cleanは、新しいassetsのビルドをしながらも古いassetsへのリンクを残す「ローリングデプロイ (rolling deploy)」というやり方を実現しています。

public/assets配下を完全に消去するにはrake assets:clobberを実行します。

2.3 db

Rakeのdb:という名前空間に属するタスクのうち、最もよく使われるのはmigratecreateです。マイグレーションに関するタスク(up, down, redo, reset)はいずれも一度試してみることをおすすめします。rake db:versionを使えばデータベースの状況が分かるので、トラブルシューティングの際に役立ちます。

マイグレーションについては、Active Recordマイグレーションでより詳しく扱っています。

2.4 doc

doc:という名前空間にはアプリケーションやAPI、Railsガイドのドキュメントをつくるためのタスクが入っています。ドキュメントを別で管理することができるので、コードベースの肥大化を防ぐことができます (まるで組込み系の開発をしているかのようです)。

  • rake doc:appで、doc/app配下に開発しているアプリケーションのドキュメントを作成します。
  • rake doc:guidesで、doc/guides配下にRailsガイドを作成します。
  • rake doc:railsで、doc/api配下にRailsのAPIドキュメントを作成します。

2.5 notes

rake notesは、コードのコメントからFIXME、OPTIMIZE、TODOで始まる行を探し出して表示します (訳注: [FIXME]のように[から始まるものはヒットしません)。検索対象となるファイルの拡張子は.builder.rb.rake.yml.yaml.ruby.css.js.erbで、デフォルトのアノテーション以外に独自のアノテーションも使用できます。

$ bin/rails notes
(in /home/foobar/commandsapp)
app/controllers/admin/users_controller.rb:
  * [ 20] [TODO] any other way to do this?
  * [132] [FIXME] high priority for next deploy

app/models/school.rb:
  * [ 13] [OPTIMIZE] refactor this code to make it faster
  * [ 17] [FIXME]

検索するファイルの拡張子を追加するには、config.annotations.register_extensionsオプションを使います。このオプションは拡張子の一覧と、マッチするべき行 を表す正規表現を引数にとります。

config.annotations.register_extensions("scss", "sass", "less") { |annotation| /\/\/\s*(#{annotation}):?\s*(.*)$/ }

特定のアノテーションのみを表示したいとき(例えばFIXMEのみを表示したいとき)はrake notes:fixmeのように実行します。このとき、アノテーションは小文字で書くことに注意してください。

$ bin/rails notes:fixme
(in /home/foobar/commandsapp)
app/controllers/admin/users_controller.rb:
  * [132] high priority for next deploy

app/models/school.rb:
  * [ 17]

独自のアノテーションを使う際には、rake notes:customと書いて、ANNOTATION環境変数を使ってアノテーション名を指定します。

$ bin/rails notes:custom ANNOTATION=BUG
(in /home/foobar/commandsapp)
app/models/article.rb:
  * [ 23] Have to fix this one before pushing!

特定のアノテーションのみを表示するときや、独自のアノテーションを表示する際には、FIXMEやBUGといったアノテーション名は表示されません。

rake notesタスクはデフォルトではappconfiglibbintestディレクトリを対象とします。他のディレクトリも対象にしたい場合は、SOURCE_ANNOTATION_DIRECTORIES環境変数にディレクトリ名をカンマ区切りで与えてください。

$ export SOURCE_ANNOTATION_DIRECTORIES='spec,vendor'
$ bin/rails notes
(in /home/foobar/commandsapp)
app/models/user.rb:
  * [ 35] [FIXME] User should have a subscription at this point
spec/models/user_spec.rb:
  * [122] [TODO] Verify the user that has a subscription works

2.6 routes

rake routesを使うと、定義されている全ルーティングをみることができます。これはルーティングの問題を解くときや、アプリケーションのルーティング全体を理解するのに役立ちます。

2.7 test

Railsでの単体テストについてはRailsアプリケーションをテストするを参照してください。

RailsにはMinitestと呼ばれるテストスイートが付属しています。Railsではテストを書くことで、安定したアプリケーションを開発します。test:という名前空間の中で定義されたタスクは、あなたがこれから(期待を持って)書く様々なテストを実行するときに役立ちます。

2.8 tmp

Rails.root/tmpディレクトリは、(*nix系でいう/tmpディレクトリのような) 一時ファイルを保存するためのディレクトリです。一時ファイルには、(ファイルを利用してセッションの管理を行っている場合) セッションのためのファイルやプロセスIDのファイル、アクションキャッシュのためのファイルなどがあります (訳注: 最近のRailsではセッションをファイルで管理することは稀です)。

tmp:という名前空間には、Rails.root/tmpディレクトリを作成、削除するためのタスクが入っています。

  • rake tmp:cache:clearで、tmp/cacheを空にします。
  • rake tmp:sessions:clearで、tmp/sessionsを空にします。
  • rake tmp:sockets:clearで、tmp/socketsを空にします。
  • rake tmp:clearで、cache、sessions、socketsディレクトリを空にします。
  • rake tmp:createで、sessions、cache、sockets、pidsのtmpディレクトリを作成します。

2.9 その他のタスク

  • rake statsで、コードに対するテストの比率やKLOCs(コードの行数)といった、コードに関する統計値を表示します。
  • rake secretで、セッションシークレット用に擬似乱数を生成します。
  • rake time:zones:allで、Railsが扱える全タイムゾーンを表示します。

2.10 カスタムRakeタスク

独自のRakeタスクの拡張子は.rakeRails.root/lib/tasks配下に保存します。また、独自のタスクを作成することができる bin/rails generate taskというコマンドもあります。

desc "I am short, but comprehensive description for my cool task"
task task_name: [:prerequisite_task, :another_task_we_depend_on] do
  # All your magic here
  # Any valid Ruby code is allowed
end 

タスクに引数を渡すには以下のようにします。

task :task_name, [:arg_1] => [:pre_1, :pre_2] do |t, args|
  # You can use args from here
end 

名前空間内でタスクを定義することで、タスクをグルーピングできます。

namespace :db do 
  desc "This task does nothing"
  task :nothing do
    # Seriously, nothing
  end 
end 

そして、以下のようにしてタスクを呼び出します。

$ bin/rails task_name
$ bin/rails "task_name[value 1]" # entire argument string should be quoted
$ bin/rails db:nothing

アプリケーション内のモデルを使用したり、データベースに対してクエリを投げたりしたいときは、タスクからenvironmentタスクへの依存関係を定義する必要があります。environmentタスクはアプリケーションのコードを読み込むタスクです。

3 Railsの高度なコマンドライン

コマンドラインのより高度な使い方として、便利な(時に驚くような)オプションを見つけて、オプションを使いこなすことがあります。ここでは、Railsのもつ妙技を少しだけ紹介します。

3.1 データベースとソースコード管理システムとRails

新しいRailsアプリケーションを作成するときに、データベースの種類とソースコード管理システムの種類を指定することができます。このオプションを使うことで、ちょっとした時間と多くのタイピングを節約できます。

それでは--database = postgresqlオプションと--gitオプションの動きを見てみましょう。

$ mkdir gitapp
$ cd gitapp
$ git init 
Initialized empty Git repository in .git/
$ rails new . --git --database=postgresql
      exists
      create  app/controllers
      create  app/helpers
      ...
      ...
      create  tmp/cache
      create  tmp/pids
      create Rakefile
      add 'Rakefile'
      create README.rdoc
      add 'README.rdoc'
      create app/controllers/application_controller.rb
      add 'app/controllers/application_controller.rb'
      create app/helpers/application_helper.rb
      ...
      create  log/test.log
      add 'log/test.log'

Railsがgitのリポジトリ内にファイルを作成する前に、gitappディレクトリを作成し、空のgitリポジトリを初期化する必要があります。Railsがどのようなデータベースの設定ファイルを作ったか見てみましょう。

$ cat config/database.yml
# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
  adapter: postgresql
  encoding: unicode
  database: gitapp_development
  pool: 5
  username: gitapp
  password:
...
...

選択したデータベース(PostgreSQL)に対応するように、Railsはdatabase.ymlを作成します。

ソースコード管理システムに関するオプションを使う際には、まずアプリケーション用のディレクトリを作り、ソースコード管理システムの初期化を行ってから、rails newコマンドを実行する点に注意してください。