Ruby on RailsのControllerの使い方【初心者向け】
Railsでアプリケーションを作る上で大事なController。初心者向けのControllerの使い方を解説しています。どんなコマンドを使うのか、どのような表示になるのか実際に使いながら理解していきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
mentor-hakamata
C#, Ruby, Python, JavaScriptなど経験。
RailsのControllerの使い方について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
目次
Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。
今回はRailsのコントローラーについて解説しよう。
田島メンター!!コントローラーは何をするんですか〜?
そうだね、まずはRailsにおいてユーザーから送られてきたリクエストに対してどのようにデータが返されるかという手順から見てみよう。
お願いします!
Controllerとは
Controllerの役割を説明するために、ユーザーがrailsアプリケーションで作られたサービスにアクセスしてきたときのリクエストの流れを説明します。
ユーザーがブラウザ経由でrailsアプリケーションにリクエストを送ると、そのリクエストがControllerに渡されます。
すると、Controllerはリクエストの内容に応じてモデルにデータを取ってくるように命令したり、データを作成・更新するように命令します。
その後、Modelが実行したデータに関する処理結果を受け取ってViewに渡して画面が表示されるのです。
このようにControllerとはModelとViewの仲介をする役割を担っており、railsアプリケーションの中核をなすともいえます。
もう少し具体的な例で説明します。
例えば、ユーザーがあるSNSで「Ruby on Rails」についての投稿を検索するとします。
そうすると次のような流れで処理が実行されていきます。
- Controllerに「Ruby on Rails」についての投稿を検索したいというリクエストが来る
- ControllerはModelに対して「Ruby on Rails」についての投稿のデータを取るように命令する
- Modelが取ってきたデータをControllerが受け取り、Viewに渡す
- Viewは受け取ったデータをもとに表示する内容を作成し、ユーザーに返します
コントローラーに関する一連の流れはこんな感じかな。
モデルがデータベースと情報をやり取りするためのもので、ビューがユーザーに見える部分でしたね。
そしてモデルから受け取ったデータをビューに渡すのがコントローラーなんだ。次は実際にコントローラーを作成してみよう。
実際にControllerを作ってみよう
これから実際にControllerを作成していきます。
サンプルとして「Hello, World!!」と表示するControllerを作ってみます。
まずは、サンプルアプリケーションを作成していくので、次のコマンドを実行してください。
rails new sample_app cd sample_app
これでサンプルアプリケーションの準備が整いました。
Controllerファイルを作ろう
Controllerの作成をするコマンドの書式は次の通りです。
rails generate controller コントローラー名
今回はhello_controllerを作成したいと思います。コマンドは次のようになります。
rails generate controller hello
実行結果をみると「app/controllers/hello_controller.rb」が作成されています。
これでControllerを作成することができたので、次にHelloControllerに「Hello, World!!」と表示する処理を書いていきます。
テキストエディタで「app/controllers/hello_controller.rb」を開いて以下のコードを記述しましょう。
class HelloController < ApplicationController def index render plain: 'Hello, World!!' end end
「index」アクションを追加して、plainメソッドで「Hello, World!!」を出力するようにしています。
これでHelloControllerのindexアクションにリクエストが来たら、「Hello, World!!」がブラウザ上に表示されるようになります。
ルーティングの設定をしよう
次にどのようなURLでアクセスが来たらHelloControllerのどのアクションを使うのかを設定する必要があります。
これをルーティングの設定といいます。
「config/routes.rb」ファイルに次のコードを追加してください。
Rails.application.routes.draw do get 'hello' => 'hello#index' end
これで「http://ドメイン/hello」というURLでリクエストが来たときは「HelloControllerのindexアクションを使う」という設定をしています。
つまり、ユーザーからのリクエストに対し、Controllerのどのアクションを使用するのか定義しているということになります。
実際にブラウザで表示してみよう
作ってみたサンプルアプリケーションを起動してブラウザで開いたときに「Hello, World!!」と表示されるのか確認してみましょう。
次のコマンドでサンプルアプリケーションを起動させます。
rails server
起動したら「http://localhost:3000/hello」にアクセスしてみてください。
ちゃんと「Hello, World!!」と表示されているのがわかると思います。
今回はControllerの説明だったのでModelを作成しないサンプルでしたが、このようにControllerとは、アプリケーションの処理の中核をなす役割を担っていることがわかったと思います。
Controllerで利用される機能
Controllerで利用される機能として、4つの機能をご紹介します。
- params
- redirect_to
- flash
- render
それぞれの機能について以下で解説します。
params
paramsはユーザーから送信されたパラメータが格納されている特殊な変数です。
パラメータが格納されているか実際に確認してみましょう。
「config/routes.rb」ファイルを以下のように修正します。
Rails.application.routes.draw do get 'hello' => 'hello#index' get 'hello/:id' => 'hello#show' end
HelloControllerのindexアクションを以下のように修正します。
class HelloController < ApplicationController def index render plain: 'Hello, World!!' end def show render plain: params[:id] + 'を受信しました' end end
アプリケーションを起動して「http://localhost:3000/hello/test」にアクセスしてみてください。
このように表示されていればパラメータの受信ができています。
「config/routes.rb」ファイルを’hello/:id’と修正すると、helloのあとに任意のパラメータを受信できるルーティングとなります。
params[:id]の:idは「config/routes.rb」ファイルで’hello/:id’と記載したため、params[:id]とするとtestを参照できます。
その結果、params[:id]に格納されているtestと’を受信しました’を結合して「testを受信しました」が表示されています。
redirect_to
redirect_toを使うと、別のアクションを実行するような動作にすることができます。
「config/routes.rb」ファイルを以下のように修正します。
Rails.application.routes.draw do get 'hello' => 'hello#index' get 'hello/:id' => 'hello#show' end
HelloControllerを以下のように修正します。
class HelloController < ApplicationController def index render plain: 'Hello, World!!' end def show redirect_to action: :index end end
アプリケーションを起動して「http://localhost:3000/hello/test」にアクセスしてみてください。
このように表示されていればリダイレクトは成功しています。
最初のURLではshowアクションを実行していますが、showアクションでindexアクションを実行するようにしているので、「Hello, World!!」と表示されるようになっています。
それに伴いURLも/hello/testから/helloに変わっています。
render
renderを使うと、任意のViewを表示することができます。
HelloControllerを以下のように修正します。
class HelloController < ApplicationController def index render plain: 'Hello, World!!' end def show render :show end end
「app/views/hello」フォルダにshow.html.erbを作成し、以下の内容にします。
<p>showアクションのビューです</p>
アプリケーションを起動して「http://localhost:3000/hello/test」にアクセスしてみてください。
このように表示されていれば成功です。
renderではshowを指定していますが、これは「app/views/hello」フォルダのshow.html.erbを表示するという設定になります。
flash
flashは一時的なメッセージを表示したいときに使用します。
HelloControllerを以下のように修正します。
class HelloController < ApplicationController def index render plain: 'Hello, World!!' end def show flash[:success] = 'これはflashのメッセージです' render :show end end
「app/views/hello/show.html.erb」を以下のように修正します。
<p>showアクションのビューです</p> <% flash.each do |msg_type, msg| %> <%= msg %> <% end %>
アプリケーションを起動して「http://localhost:3000/hello/test」にアクセスしてみてください。
このように表示されていれば成功です。
showアクションで任意のメッセージを設定し、Viewでは設定したメッセージを表示させるようにしています。
まとめ
本記事では、Ruby on RailsにおけるControllerについて解説しました。
- Controllerとは
- Controllerの作成方法
- Controllerで利用される機能
Controllerを理解することで、アプリケーション機能を実現します。
ぜひ使いこなせるように覚えておきましょう。
以上、Railsで使うControllerの説明でした。
コントローラーがビューに値を渡す仕組みは分かったかな?
rails generateでコントローラーを作成、それによって作られたrbファイルに処理を記述してから最後にルーティングの設定ですね。
これはコントローラー以外にも当てはまることだけれど、コマンドで作成を行ったときにはどこに何のファイルが生成されたかをコンソールでよく見ておこう。
今回のように、編集するファイルの場所を確認するためにも必要ですね。心がけます!
Ruby on Railsを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのWebアプリケーションコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、Ruby on Railsを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!