icon
icon

Ruby on RailsのControllerの使い方【初心者向け】

Railsでアプリケーションを作る上で大事なController。初心者向けのControllerの使い方を解説しています。どんなコマンドを使うのか、どのような表示になるのか実際に使いながら理解していきましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

監修してくれたメンター

mentor-hakamata

新卒入社した会社がブラックな環境で自己研鑽の時間も作れず、これではだめだと思い転職。2度の転職を経て現在3社目。まだまだ挑戦中。
C#, Ruby, Python, JavaScriptなど経験。

RailsのControllerの使い方について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

目次

1時間でできる無料体験!

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

 

田島悠介

今回はRailsのコントローラーについて解説しよう。

大石ゆかり

田島メンター!!コントローラーは何をするんですか〜?

田島悠介

そうだね、まずはRailsにおいてユーザーから送られてきたリクエストに対してどのようにデータが返されるかという手順から見てみよう。

大石ゆかり

お願いします!

 

Controllerとは

Controllerの役割を説明するために、ユーザーがrailsアプリケーションで作られたサービスにアクセスしてきたときのリクエストの流れを説明します。

ユーザーがブラウザ経由でrailsアプリケーションにリクエストを送ると、そのリクエストがControllerに渡されます。

すると、Controllerはリクエストの内容に応じてモデルにデータを取ってくるように命令したり、データを作成・更新するように命令します。

その後、Modelが実行したデータに関する処理結果を受け取ってViewに渡して画面が表示されるのです。

このようにControllerとはModelとViewの仲介をする役割を担っており、railsアプリケーションの中核をなすともいえます。

 

もう少し具体的な例で説明します。

例えば、ユーザーがあるSNSで「Ruby on Rails」についての投稿を検索するとします。
そうすると次のような流れで処理が実行されていきます。

  1. Controllerに「Ruby on Rails」についての投稿を検索したいというリクエストが来る
  2. ControllerはModelに対して「Ruby on Rails」についての投稿のデータを取るように命令する
  3. Modelが取ってきたデータをControllerが受け取り、Viewに渡す
  4. Viewは受け取ったデータをもとに表示する内容を作成し、ユーザーに返します

田島悠介

コントローラーに関する一連の流れはこんな感じかな。

大石ゆかり

モデルがデータベースと情報をやり取りするためのもので、ビューがユーザーに見える部分でしたね。

田島悠介

そしてモデルから受け取ったデータをビューに渡すのがコントローラーなんだ。次は実際にコントローラーを作成してみよう。

 

実際にControllerを作ってみよう

これから実際にControllerを作成していきます。

サンプルとして「Hello, World!!」と表示するControllerを作ってみます。

まずは、サンプルアプリケーションを作成していくので、次のコマンドを実行してください。

rails new sample_app
cd sample_app

これでサンプルアプリケーションの準備が整いました。

Controllerファイルを作ろう

Controllerの作成をするコマンドの書式は次の通りです。

rails generate controller コントローラー名

今回はhello_controllerを作成したいと思います。コマンドは次のようになります。

rails generate controller hello

generate_controller-620x300

実行結果をみると「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とは、アプリケーションの処理の中核をなす役割を担っていることがわかったと思います。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

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では設定したメッセージを表示させるようにしています。

 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

まとめ

本記事では、Ruby on RailsにおけるControllerについて解説しました。

  • Controllerとは
  • Controllerの作成方法
  • Controllerで利用される機能

Controllerを理解することで、アプリケーション機能を実現します。

ぜひ使いこなせるように覚えておきましょう。

以上、Railsで使うControllerの説明でした。

 

田島悠介

コントローラーがビューに値を渡す仕組みは分かったかな?

大石ゆかり

rails generateでコントローラーを作成、それによって作られたrbファイルに処理を記述してから最後にルーティングの設定ですね。

田島悠介

これはコントローラー以外にも当てはまることだけれど、コマンドで作成を行ったときにはどこに何のファイルが生成されたかをコンソールでよく見ておこう。

大石ゆかり

今回のように、編集するファイルの場所を確認するためにも必要ですね。心がけます!

 

Ruby on Railsを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのWebアプリケーションコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、Ruby on Railsを使ったWebアプリケーション開発を学べます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する