Ruby on Railsの処理の流れ-ルーティング、コントローラ、ビュー

Rubyを使ったWebアプリを効率よく作れるフレームワークのRuby on Rails。もともと備わってる機能を使うので、その処理の流れを理解しないと、自分が何をやってるのかわかんなくなってしまいます。

Progateなどでは何となくの理解でも学習は進みますが、先のことを考えればしっかりと理解した方がいいと思います。

ということで、Ruby on Rails学習中という立場から、Ruby on Railsの処理の流れ(ルーティング、コントローラ、ビュー)について解説します。間違ってたらすみません。。。

Ruby on Railsの処理の流れの全体像

Ruby on Railsの処理の流れの全体像

Ruby on Railsの学習を始めてる人ならわかると思いますが、Webアプリ(Webサービス)はパソコンなどのクライアントとサーバーに分けて考える必要がありますよね。

パソコン側はブラウザですね。Google ChromeやSafari、FireFoxなどです。Web系プログラミングの学習をしてるなら、Google Chromeを使ってることが多いかなと思います。

ブラウザで何かをすると、ブラウザにページが表示されます。それはブラウザからサーバーにデータを要求して、サーバーがそれを返すことで実現されてます。Webアプリを使う側ならブラウザの操作さえわかればいいんですが、Webアプリを作る側になるとサーバー側の処理も作ってくことになります。

ということで、上にある図がRuby on Railsの処理の流れを簡単に表した全体像になります(現段階での理解)。本当は「モデル」や「データベース」もありますが、今回は省略します。

Ruby on Railsの処理の流れを箇条書きにするとこんな感じです。

Ruby on Railsの処理の流れ
  1. ブラウザが表示したいページを要求する
  2. ルーティングが受け取り、指定されたコントローラのアクションを呼び出す
  3. アクションが実行され、ビューに送られる
  4. ビューがHTMLファイルにしてブラウザに返す

Ruby on Railsの処理の流れは、ブラウザ → ルーティング → コントローラ(アクション) → ビュー → ブラウザとなっています。

この流れを見れば、HTML部分を担ってるビューだけ作ってもページは表示できないのがわかるかなと思います。ルーティングとコントローラ(アクション)がないと、ビューまでたどり着けませんからね。

この処理の流れを理解しないでProgateをやってたら、エラーを出しまくりました。でも、自分で図にして理解してからは、新しいビューを作るときに「ルーティング、コントローラ(アクション)、ビュー」の順番で書いてくようにして、エラーが激減しました。

では、Ruby on Railsの処理の流れをもっと具体的に見ていきましょう。

Ruby on Railsの処理の流れの例

Ruby on Railsの処理の流れの例

さっきの図にコードを少し入れてみました。Ruby on Railsを学習中なら見覚えのあるコードがあるんじゃないかなと思います。ビューのところをどう書くか迷いましたが、divタグにしておきました。

ブラウザが表示したいページを要求する(Ruby on Railsの場合)

まず、ブラウザから特定のページを表示するように要求が出ます。ここでは「/aaa/ccc.html表示して!」としてあります。

これはリンクをクリックしたりすることで発生します。ここが処理のスタート地点です。ブラウザ的には(ユーザー的には)、サーバーでどんな処理が行われてるかわからなくても、求めてるページが表示されればいいわけです。

Ruby on Railsではブラウザから要求が届いたら、それをルーティングが受け取ります。

ルーティングが受け取り、指定されたコントローラのアクションを呼び出す(Ruby on Railsの場合)

ブラウザからの要求を受け取ったルーティングは、そのURLに合うコントローラ(アクション)を呼び出します。

「=>」の左側にあるのがURLで(正確にはURIなのかもしれませんがよくわかりません)、右側にあるのがコントローラとアクションです。「コントローラ#アクション」と書きます。

この例の場合は、aaaコントローラのdddアクションということですね。Progateの最初の方では「aaa/bbb」が「aaa#bbb」と対応してることが多いので勘違いしてましたが、名前を揃える必要はありません。

なので、「aaa/ccc」に対して「aaa#ddd」を呼び出せるわけです。

アクションはコントローラの中に書かれてるので、どのコントローラのどこアクションかを指定する必要があります。その指定に従って、ルーティングはコントローラ(アクション)を呼び出します。

アクションが実行され、ビューに送られる(Ruby on Railsの場合)

次に、指定されたコントローラのアクションが実行されます。

サーバー側の処理が必要なくてもアクションの記述は必要です。その場合はアクションの中身は空欄になります。

何かしらの処理をしたい場合は、その処理を記述します。多くの場合はデータベースからデータを取り出して表示するような処理になるのかもしれませんね。

ここではデータベースに関しては説明しませんが、データベースを扱うにはモデルが必要になることを覚えておくと良さそうです。Ruby on Railsでデータベースを作ると自動的にモデルも作られますけどね。

「rails g model モデル名 カラム名:データ型」みたいなのを黒い画面(コマンドライン)で打ちましたよね。

そんなこんなでアクションが実行されて、次はビューに移ります。

ビューがHTMLファイルにしてブラウザに返す(Ruby on Railsの場合)

ビューではアクションから送られてきたデータをHTMLファイルに変換します。

ビューにあるファイルは「ddd.html.erb」となってますよね。単なるHTMLファイルじゃなくて、Rubyを実行できるファイルということのようです。

このようにして出来上がったHTMLファイルをブラウザに送り、ページが表示されます。

まとめ

Ruby on Railsの学習で重要だと思ったのが処理の流れです。これをある程度理解できたら、自分が何をやってるのかがわかりやすくなりました。Progateの道場コースで苦戦してる人の中にRuby on Railsの処理の流れが曖昧な人もいるんじゃないかなと思います。

問題はこの理解が正しいのかがわからないところですが、間違ってることがわかったら直します。

最後に簡易的な方の図をもう一度出しておきますね。

Ruby on Railsの処理の流れの全体像

Ruby on Railsの処理の流れは、ブラウザ → ルーティング → コントローラ(アクション) → ビュー → ブラウザです。

まだまだ学習中だからこそ書けることもあるだろうなと思って、この記事を書きました。正確性には欠けるかもしれませんが、役に立ったら嬉しいです。

ちなみに、ProgateのWeb開発パス(Ruby on Rails)は「HTML/CSS」から始まります。そもそもWebページを表示するための「HTML/CSS」を知らないとビューが作れないので、必須の知識ということですね。

本格的なところはフロントエンドエンジニアさんなどが対応することになるんだと思いますが、全く知らないとRuby on Railsを扱えないので最低限は身につけとく必要があります。

HTML/CSSの学習に関しては、「Web系プログラミングの学習ロードマップ」に書いてあります。