【Ruby on Rails】アプリを作ったらディレクトリやビューなど

2021年10月8日

Railsのアプリケーションにはいろいろと決まったルールがあります。ディレクトリの構造やコントローラとアクションの作り方。ビューを作ったりなどの基本操作をお覚えましょう。

Railsアプリケーションのディレクトリ構造

アプリケーションを作ると、ファイルやフォルダができます。各フォルダにはそれぞれ役割を持ったファイルが配置されています。基本なので覚えておきましょう。

ディレクトリ役割
appモデル、ビュー、コントローラのコード
bin各種スクリプトファイル。
configルーティングやデータベースなどの設定ファイル
dbマイグレーションスクリプトやシードデータ
doc開発者向けのドキュメントを置く
lib自作のライブラリやrakeファイル
logログが出力される
publicアプリケーションを介さずに送信する静的なファイル
storageActive Storageが利用する
testテストスクリプト
tmpキャッシュなどのテンポラリディレクトリ
vendorプラグインを配置

コントローラとアクションの作成

デフォルトのトップページが表示されましたが、できれば自作のページを表示したいですよね。そのためにはコントローラとビューを作成しましょう。

コントローラ作成の事前準備

コントローラを実際に作る前に、次の内容のファイルをconfig/initializersディレクトリの中に作成してください。ファイル名はgenerators.rbです。

Rails.application.config.generators do |g|
 g.helper false
 g.assets false
 g.skip_routes true
 g.test_framework false
end

ファイルを作るコマンドを実行する際、使わないものを抑制したりします。プロジェクトによっては必要な場合もありますが、今回は使いません。

  • helper : ヘルパーを作るかどうか
  • assets : CSS,JavaScriptファイルを作るかどうか
  • skip_routes : config/routes.rbを変更するかどうか(trueだとしない)
  • test_framework : テストスクリプトを生成するかどうか

コントローラの作成

コントローラは次のコマンドを利用して作成します

bin/rails g controller コントローラ名 アクション名

実際にTopControllerとindexアクションを作ってみましょう。作成するコマンドを打ち込むと、他のメッセージも表示されますが大事な部分は以下。

ユーザー名$ bin/rails g controller top index
      create  app/controllers/top_controller.rb
      invoke  erb
      create    app/views/top
      create    app/views/top/index.html.erb

コマンドが成功するとapp/controllers/top_controller.rbが出来ています。コントローラーの内容はこんな感じ。

class TopController < ApplicationController
  def index
  end
end

TopControllerクラスはApplicationControllerを継承しています。Railsのコントローラは1つのRubyクラスで表されます。

TopControllerクラスの中には、indexメソッドが出来ています。このindexメソッドがトップページを表示するときに使われる「アクション」になります。

コントローラやアクションについては後ほど解説します。そんなのがあるのかーと思って貰えれば現時点ではOK

ルーティングの設定

Railsのアプリケーションは、コントローラとアクションを作っただけでは不十分です。URLのパスとコントローラを結びつけるルーティングという作業が必要になります。configディレクトリにあるroutes.rbを開き、以下のように修正してください。

Rails.application.routes.draw do
	root "top#index"
end

この修正で、トップページにアクセスすると反応するコントローラとアクションを変更することが出来ます。TopControllerのindexアクションがこのアプリケーションのルートになります。

ビューの作成

indexアクションに対応するビュー(表示するもの)のテンプレートを編集してみましょう。

app/views/top/index.html.erbを開いて編集してください。もとから2行だと思うので、タグの中の文字列だけ変更されるのを確認してみましょう。

<h1>H1要素</h1>
<p>ここが変更した文章</p>

変更したファイルを保存後、ページを読み込み直すと以下のうようになっていれば成功!

変数を使ってみる

少し色気を出して、ただのHTMLとは違うってところを見せてやりましょう!編集するファイルは2つ。

  • app/controllers/top_controller.rb
  • app/views/top/index.html.erb
class TopController < ApplicationController
  def index
  	@message = "HTMLとは違うのだよ!"
  end
end
<h1>H1要素</h1>
<p>あなたはHTMLですか?</p>
<p><%= @message %></p>

うまく変更出来たらこんな表示になってくれるはず