rhanda | 元銀行員Web系エンジニアの日記

実務未経験からWeb系受託開発企業に転職したひよっこエンジニアが覚えたことや日々の感情を残すブログ

【Rails】MVCとは

先日、セレクトボックスで扱いたいデータの配列をモデルに定義する際に「選択肢を日本語表示したい」と思ったことから、キーを日本語名にしたハッシュを作成しました。

しかしながらモデルは「データを扱う役割」です。

「ビューでこう表示したい」や「日本語にしたい」など、モデルの仕事には関係のない、モデルが関知すべきでない都合を持ち込んでしまうのはNGであると学んだ出来事がありました。

Railsの各機能についての知識が不足しすぎていると感じ、その後調べたことのアウトプットの一環として記録するものです。



1. MVC(Model-View-Controller)とは

MVCは、アプリケーションの役割を分割して理解しやすくするためのデザインパターンの一つ。Railsはこのデザインパターンに従うルールになっているようです。

2. Modelとは

モデルとは、ActiveRecordと呼ばれるRailsの機能を介して、アプリケーションのデータベースと情報のやりとりを行うRubyのクラスのことを言う。 モデルは主にデータをどう扱うかを記述する役割であると言えそうです。

ActiveRecordとは

3. Controllerとは

コントローラはリクエストの意味を理解し、適切な出力を行なうための責任を持ちます。

入力されたURLからルーティングに従ってアクションを呼び出す役割。

4. Viewとは

実際のWebページにまとめる役割を担います。

コントローラによって実行されたアクションを受け、最終的にHTMLの形式で返す役割。

Railsの大前提

Railsでは「この機能はこう扱われるだろう」という想定がなされている

Railsは、最善の開発方法というものを1つに定めるという、ある意味大胆な判断に基いて設計されています。Railsは、何かをなすうえで最善の方法というものが1つだけあると仮定し、それに沿った開発を全面的に支援します。言い換えれば、ここで仮定されている理想の開発手法に沿わない別の開発手法は行いにくくなるようにしています。この「The Rails Way」、「Rails流」とでもいうべき手法を学んだ人は、開発の生産性が著しく向上することに気付くでしょう。


設定より規約が優先される(Convention Over Configuration):

Railsでは、Webアプリケーションで行われるさまざまなことを実現するための最善の方法を明確に思い描いており、Webアプリケーションの各種設定についても従来の経験や慣習を元に、それらのデフォルト値を定めています。このようにある種独断でデフォルト値が決まっているおかげで、開発者の意見をすべて取り入れようとした自由過ぎるWebアプリケーションのように、開発者が延々と設定ファイルを設定して回らずに済みます。

私は他のプログラミング言語を扱ったことがないので比較はできませんが、Railsはそれぞれの機能がどのような役割を担うのか意図を持った作成がなされており、リリース後の保守面を考えても、その意図に則った開発を心がけると非常に可読性も高いコードが目指せるのではないかと感じました。



まとめ

「ルーティング」「アクション」「ビュー」といった言葉自体は、Progateの学習などで知っていました。しかしながらRailsは非常によしなに多くのことを処理してくれるため、仕組みがそもそもあまりわかっておりませんでした。

エンジニアになってコードレビューを頂くようになってから、それがわかっていないと自分で意図を持ったコーディングができないと感じました。 (「なぜこのように書いたのですか〜?」と聞かれても曖昧な返答しかできない)

簡素ではありますが、今回記載したことでも知っていれば「〇〇だから〜〜いうふうに思ったんです」という考えぐらいはできたのではないかと感じました。 特にRailsは開発方法が定められているフレームワークだと知ったので、今後は各機能の役割や、用意された経緯を踏まえたコーディングを心がけたい所存です。

(冒頭のセレクトボックスについては、モデルには扱いたいデータの配列のみを定義し、helpers/application_helpr.rbにハッシュを定義して解決しました)

参考

https://railsguides.jp/

https://ja.wikipedia.org/wiki/Model_View_Controller