コントローラとアクションの作成とルーティングの設定

Rails アプリケーションで、コントローラーの作成とルーティングを設定する簡単なサンプルを作成します。利用者からのリクエストに対して事前に作成しておいたコントローラーのアクションを実行し、結果を利用者へ返します。

※ コントローラに関する詳細は「コントローラとアクション」、ルーティングに関する詳細は「ルーティングの設定」をご参照下さい。

(Last modified: )

コントローラを作成する

Controller(コントローラー)は、ユーザーのリクエストを受け取り、そのリクエストに応じたアクションを実行します。またアプリケーションで処理した結果をユーザーに返すのもコントローラーです。

コントローラーを作成するアプリケーションとして事前に schedule という名前でアプリケーションを作成しました。

rails new schedule

コントローラを作成する(1)

作成したアプリケーションの中にコントローラーを作成するには次のように実行します。

rails generate controller コントローラ名

それではコントローラーを実際に作成してみます。コマンドプロンプトを起動し、アプリケーションディレクトリへ移動したあと、次のようにコマンドを実行して下さい。今回はコントローラー名を plans としました。

rails generate controller plans

コントローラを作成する(2)

※ コントローラー名は複数形で指定します。 plan ではなく plans のように単語の複数形で指定してください。

コントローラーが作成されました。このとき次のようにいくつかのファイルやディレクトリが自動的に作成されます。

create  app/controllers/plans_controller.rb
invoke  erb
create    app/views/plans
invoke  test_unit
create    test/controllers/plans_controller_test.rb
invoke  helper
create    app/helpers/plans_helper.rb
invoke    test_unit

コントローラを作成する(3)

この中の app/controllers/plans_controller.rb がコントローラ本体に関する記述がされたファイルです。

コントローラを作成する(4)

それでは作成された plans_controller.rb ファイルをテキストエディタで開いてみます。

class PlansController < ApplicationController
end

コントローラを作成する(5)

このようにコントローラを作成すると ApplicationController クラスを継承し、クラス名が「コントローラ名+Controller」のクラスが定義されます(クラス名の先頭は大文字となります)。

アクションを作成する

コントローラは作成されましたのでアクションを作成していきます。 Rails アプリケーションではコントローラはクラスとして定義されましたが、アクションはコントローラクラスの中のメソッドとして定義されます。例えば hello というアクションを作成するということは hello というメソッドを定義することです。

それでは hello アクションと bye アクションを作成してみます。

class PlansController < ApplicationController

  def hello
    render :plain => 'Hello!'
  end

  def bye
    render :plain => 'bye!'
  end

end

アクションを作成する(1)

アクションを表すメソッドは public のメソッドとして定義して下さい( Ruby の場合、特に指定していない場合は public となります)。今回作成したアクションはテスト用のため、アクションが呼び出されるとビューを使わずに直接利用者へテキストを返すように作成してあります。

※ メソッドの中に記述してある「render :plain => 'Hello!'」の部分が利用者へテキストを返す部分となります。今回はコントローラやアクションのテストがメインなので、この部分の説明は行ないません。

ルーティングを設定する

最後にルーティングの設定を行います。これは利用者側からどのように呼び出されたときにどのアクションを実行するのかを定義するものです。設定はアプリケーションディレクトリの中の config\routes.rb ファイルに対して行います。

ルーティングを設定する(1)

このファイルをテキストエディタで開いてみます。先頭に「#」が記載されている行はコメントです。

Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
  # Can be used by load balancers and uptime monitors to verify that the app is live.
  get "up" => "rails/health#show", as: :rails_health_check

  # Defines the root path route ("/")
  # root "posts#index"
end

ルーティングを設定する(2)

自動で config\routes.rb が作成されると「get "up" => "rails/health#show", as: :rails_health_check」というルーティングだけが設定されています。詳しくは解説しませんが、ブラウザから http://localhost/up にアクセスすると、コントローラー Rails::HealthController の show アクションが実行されます。

利用者がブラウザから http://localhost:3000/hello へアクセスすると、 plans コントローラーの hello アクションが実行されるようにするには、次のように記述します(ヘルパーは省略しています)。

get 'hello', to: 'plans#hello'

同じように http://localhost:3000/bye へアクセスすると、 plans コントローラーの bye アクションが実行されるようにするには、次のように記述します。

get 'bye', to: 'plans#bye'

この 2 行を config\routes.rb の中に記述します。

Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
  # Can be used by load balancers and uptime monitors to verify that the app is live.
  get "up" => "rails/health#show", as: :rails_health_check

  # Defines the root path route ("/")
  # root "posts#index"

  get 'hello', to: 'plans#hello'
  get 'bye', to: 'plans#bye'
end

ルーティングを設定する(2)

これでルーティングの設定も完了です。

動作確認

それでは Rails アプリケーションを起動してここまでの動作を確認してみます。コマンドプロンプトを起動し、アプリケーションディレクトリへ移動し rails server と実行して下さい。

rails server

動作確認(1)

ブラウザから次の URL へアクセスして下さい。

http://localhost:3000/hello

設定されたルーティングに従い plans コントローラの hello アクションが呼び出され、画面に次のように表示されます。

動作確認(2)

今度は次の URL へアクセスして下さい。

http://localhost:3000/bye

plans コントローラの bye アクションが呼び出され、画面に次のように表示されます。

動作確認(3)

このように Rails アプリケーションを起動した後で、利用者からのリクエストに対して対応するコントローラーの中のアクションを実行し、結果を利用者へ返すことが出来ました。

-- --

Rails アプリケーションで、コントローラーの作成とルーティングを設定する簡単なサンプルを作成しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。