面接での技術質問
面接で聞かれた技術質問に対し、しっかりと答えられなかったので戒めとして記事にします。
本当に基本的なことなので、これを機にもっとRuby on Railsの中身をもっと詳しく学習しようと思います。
※注意※
記事の一部に誤りがあり、コメントにて詳しくご指導して頂きました。
記事はその時点での自分の実力を残したくもあった為、誤字等を除いて修正はしない予定です。
この記事を読んで下さった方は、ぜひコメント欄まで目を通して頂ければと思います。
また間違い等ありましたらコメントなどでご指導いただけると大変助かります。。。
MVCモデル
ActiveRecord
・ActiveRecordとはMVCのM、つまりModelに関する部分
・RubyのオブジェクトをSQLに翻訳してRDBMSの操作できるツール
・Railsとデータベースを接続する役割を担います
M=Model
・データベースとの接続とデータに関する操作を行う
V=View
・Modelの内容を参照し、webアプリケーションの見た目の部分を表現する
C=Controller
・リクエストに対応する処理をまとめ、リクエストを受け取って処理を行った後、クライアントにレスポンスを返す。
オブジェクト指向
オブジェクト指向プログラミングとは、「もの」を組み立てる様に表現してコンピュータに指示することです。
機能・役割ごとに分けて、実装を進めていく方針のことを言います。
主なメリットとしては2点。
- 役割ごとにオブジェクトを分けることで、実装がしやすくなる
- 役割ごとに分けるため、後からコード変更がしやすい、また他のコードに影響が出にくい
そして「もの」を組み立てる際の設計図を「クラス」と呼び、その「設計図から作成された実物体」のことを「インスタンス」と呼びます。
HTTPリクエストについて
何らかのwebサービスにアクセスする時を例にとって説明します。
1.まずクライアント側のPCでブラウザにURLを入力します。
2.クライアント側のPCからWebサーバーに「HTTPリクエスト」を送信します。
3.Webサーバーが、「HTTPリクエスト」に対応する「HTTPレスポンス」をクライアント側のPCに送信します。
4.クライアント側のPCでWebページを表示します。
少し細かく説明すると、
リクエストを送る際、DNSサーバーにアクセスし、webサイトのIPアドレスを特定、そのIPアドレスを持つサーバーに対してHTTPリクエストを送信します。
サーバーがそのHTTPリクエストを元にクライアントの要求を承認すると、サーバーはクライアントにHTTPステータスコード200を返します。
承認が行われると、サーバーからwebサイトの情報がデータパケットという形で転送され、クライアント側にwebサイトが表示されます。
クッキーとセッション
Cookieとは、Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させる仕組み。
sessionとは、クライアントとサーバーの通信状態のことで、sessionにはIDを割り振られて管理される。
ログイン状態を保持したページ遷移などは、クッキー、セッションが使われています。
クライアント側にあるクッキーの情報とサーバー側に保存されているセッションIDが一致していれば、ログイン状態を保持したまま画面遷移が可能になります。
ロードバランサー(負荷分散装置)とは
ロードバランサーとは、名前の通り、サーバーにかかる負担を分散させる仕組みです。
Webサイトへのアクセス集中やサーバーが故障してしまったても、アクセス中の利用者に安定したサービス提供を継続可能になります。
クライアントとサーバーの間に取り入れられる仕組みで、クライアントからのHTTPリクエストがあると、ロードバランサーを経由し、その後負荷が集中しないように各サーバーへ振り分けられます。
ロードバランサーの役割は主な役割は、
- アクセス集中による速度低下を防ぐ
- 不具合が起きているサーバーへはリクエストを送らない
- サービスを停止することなくサーバーのメンテナンスが可能
- 特定のユーザーのアクセスを同じサーバーへ送る
find、find_by、where句
findメソッドは、各モデルのidを検索キーとしてデータを取得するメソッド
find_byメソッドは、各モデルのid以外の条件で検索するメソッド
whereメソッドは、各モデルをid以外の条件で検索する場合該当するデータ全てが返ってくるメソッド
renderとredirect_to
renderメソッドは、viewファイルを指定
redirect_toは、URL(HTTPリクエストメソッド)を指定
よく似た挙動をしますが、処理の中身が大きく異なります。
renderメソッドではcontrollerからviewファイルを指定して表示されます。
一方でredirect_toは、MVCを経由した処理が行われます。
controller → URL → routes → controller → view の流れです。
そのため以下のような使い分けが可能です。
render:エラー発生時などに、単にエラーページなどを表示させる場合
redirect_to:データ更新、削除などcontrollerの処理が必要な場合