テクノロジー

2017年8月28日

rails g コマンドが行なっていること

rails g コマンドが行なっていることとは?

rails newコマンドでアプリケーションの土台を作成した後行うrails gコマンド。
この記事では、このコマンドが実際に何を作っているのかを解説してみたいと思います。

rails g (generate)

rails gコマンドとは、rails newコマンド で作ったRailsアプリケーションの土台に中身を盛り込んでいくためのコマンドです。
中身とは言っても、具体的に何を作れるのかイメージするのは難しいと思うので以下に示します。

コマンド コントローラ ビュー モデル マイグレーションファイル ルーティング
controller × ×
model × × ×
migration × × × ×
scaffold

例えば、controllerであればコントローラとビューとルーティングを、modelであればモデルとマイグレーションのみをそれぞれ作成します。
テーブルが要らない場合はrails g controllerを使うなど、これらのコマンドは状況によって使い分けをします。

今回は処理の流れの理解を重視しているので、最後の Scaffold というコマンドを実行して一気に作ってしまいます。

~/workspace/achieve $ rails g scaffold blog title:string content:text

以下のような表示が出力されれば大丈夫です。

Running via Spring preloader in process 97389
      invoke  active_record
      create    app/models/blog.rb
      invoke    test_unit
      create      test/models/blog_test.rb
      invoke      factory_girl
      create        test/factories/blogs.rb
      invoke  resource_route
       route    resources :blogs
      invoke  scaffold_controller
      create    app/controllers/blogs_controller.rb
      invoke    erb
      create      app/views/blogs
      create      app/views/blogs/index.html.erb
      create      app/views/blogs/edit.html.erb
      create      app/views/blogs/show.html.erb
      create      app/views/blogs/new.html.erb
      create      app/views/blogs/_form.html.erb
      invoke    test_unit
      create      test/controllers/blogs_controller_test.rb
      invoke    helper
      create      app/helpers/blogs_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/blogs/index.json.jbuilder
      create      app/views/blogs/show.json.jbuilder
      create      app/views/blogs/_blog.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/blogs.coffee
      invoke    scss
      create      app/assets/stylesheets/blogs.scss
      invoke  scss
   identical    app/assets/stylesheets/scaffolds.scss

ここで注意していただきたいのが、先ほどの図で書いたモデルやコントローラの他にも生成されるファイルやディレクトリが存在しているということです。
具体的には以下を指します。

  • app/assets/stylesheets/blogs.scss(CSSファイル)
  • test/models/blog_test.rb(テストファイル)
  • app/helpers/blogs_helper.rb(ヘルパー)
  • app/assets/javascripts/blogs.coffee(JSファイル)
  • app/views/blogs/index.json.jbuilder(API関連のファイル)

これらの内容については今回の記事では省略させていただきます。

rails d (destroy)

rails dコマンドはrails gコマンドで作成したファイルやディレクトリを一気に削除するためのコマンドです。
つまりgenerateの 対義語 です。
例えば先ほどのコマンドを取り消したい場合は、以下のコマンドを実行します。

~/workspace/achieve $ rails d scaffold blog title:string content:text

もちろん手動で削除することもできますが、コマンドで削除した方がミスが減る上に、圧倒的にラクです。

gem install railsとrails newとrails gの違い

最後に大まかなイメージを掴んでいただくために、これらの違いを ショートケーキ に例えてみます。

gem install railsは材料を調達する(アプリケーションを作成するための機能をインストールする)

https://diveintocode.gyazo.com/593e7cd018df6267a1455c8638cc3bbc

rails newはスポンジケーキを作成する(実際のrailsアプリケーションの雛形を作成する)

https://diveintocode.gyazo.com/117c335d7e7517ed0b919fb22e685b75

rails gは生クリームを塗り、デコレーションをする(アプリケーションの具体的な設定、機能を追加していく)

https://diveintocode.gyazo.com/e6b13a06fdb1c2be47ba6d1851eb237d

以上で、rails gコマンドについての説明を終わらせていただきます。

DIVE INTO CODEのことをもっと知ってみませんか?