Rails7ベーシック試験の実施に向けて、「試験に備えよう!」というこのコラム。
これまでに、Railsアプリケーション開発で特に抑えておきたい3つの要素のうち「ビュー」「モデル」の2つを取り上げました。
第5回目となる今回では、最後のひとつ「コントローラー」について試験内容の概要、抑えておきたいことを解説します。
コントローラー開発
出題範囲「コントローラー開発」では、リクエストおよびレスポンスの取扱い、状態管理の方法について全体の15%の割合で出題されます。
MVCアーキテクチャにおけるコントローラーは、リクエストに従って適切なモデルを呼び出し、その結果をビューに結びつけ、レスポンスを生成します。
その名前の通り、データの入力から出力までの一連の流れをコントロールし、Webアプリケーションを実現する重要な要素です。
Railsアプリケーションでは、規約に従うことで多くのソースコードを記述すること無く、この機能を実現することができます。
規約に沿った処理の流れ、データの扱い方について抑えておきましょう。
処理の流れ
まずは「Ruby on Railsの基本」を振り返り、処理の流れをおさらいしましょう。
アクションとフィルター
コントローラーに定義されるpublicメソッドは「アクション」として扱われ、原則として規約に応じた名前のアクションが呼び出されることを思い出してください。
このアクションの呼び出しの前後に処理を実行する仕組みが「フィルター」です。
それぞれのフィルターの実行タイミング、使い方を確認しておきましょう。
before
after
around
skip
クロスサイトリクエストフォージェリ対策
Railsのコントローラーには、クロスサイトリクエストフォージェリ(CSRF)を防ぐための仕組みが用意されています。
まず、CSRFについて抑えましょう。その上で、CSRF対策を制御するメソッドの使い方を確認しましょう。
protect_from_forgery
skip_forgery_protection
リクエスト
Webアプリケーションでは、データの入力としてリクエストを扱います。
コントローラーでは、いくつかのメソッド、アクセサを通してリクエストの情報を扱うことができるオブジェクトを操作することができます。
それぞれのオブジェクトによってどのような種類の情報を得られるのか、違いと使い方を把握しておきましょう。
request
headers
params
Strong Parameters
マスアサインメント脆弱性を防ぐために利用できる仕組みが、Strong Parametersです。
そもそもマスアサインメント脆弱性とは何なのかを理解した上で、Strong Parametersの使い方を抑えておきましょう。
レスポンス
リクエストのデータをモデルで処理した後は、レスポンスを生成することになります。
レスポンスの種類によって、いくつかのメソッドを使い分けます。
- ビューを利用する
render
メソッド - HTML以外の応答を返すための
respond_to
メソッド - コンテンツでは無く、ヘッダーで応答するための
head
メソッド - 別のアクションなどへ移動するための
redirect_to
メソッド - ファイルを送信する
send_file
メソッド - バイナリデータを送信する
send_data
メソッド
状態管理
Webアプリケーションにおいて、複数のページ間で情報を維持、管理するために用いられる仕組みが「セッション」です。
まずは、Railsから離れてこの「セッション」について学習しましょう。
コントローラーでは、セッションを扱うために以下のようなメソッドを利用できます。
session
メソッドcookies
メソッドflash
メソッド
まとめ
ベーシック試験の試験範囲「コントローラー開発」について解説しました。
規約に従うことが重要なRailsアプリケーション開発ですが、コントローラーは特にその性質が強く表れる要素です。
規約に従うことで、シンプルで見通しがよく、脆弱性を持たないコントローラーを実現することができます。
そのためには、Railsアプリケーション固有ではないWebアプリケーションの仕組み、処理の流れ、代表的な脆弱性についても把握しておく必要があります。
この試験の範囲外になる部分もありますが、是非体系立てて知識を身につけ、実践的なWebアプリケーションをRailsを使って開発できるようになりましょう。
具体的な学習については、Ruby on Rails チュートリアルをお薦めしています。
Ruby on Rails チュートリアル
https://railstutorial.jp/
また、今後公式問題集の発売も予定しておりますのでお待ちください。