こんにちは.今回,初めて記事を書かせていただくことになりましたmarimoと申します.私は,現在,Ruby on Railsを使ったWebアプリの開発に携わっているのですが,そこで登場する重要だけど初学者がつまづきやすいRailsの概念について,カレーづくりを例にご紹介させていただきます.
MVCモデル
Railsでは,プログラムを役割ごとに Model(モデル:データを管理する),View(ビュー:HTMLなどの見た目をつくる),Controller(コントローラ:全体を制御する)の3つに分けて管理します.
カレーづくりでは..
カレーつぐりのゴールは「お皿にカレーが盛り付けられている」ことです.コントローラ(調理場)にはカレーづくりに必要な包丁や鍋などの道具が一通りそろっています.これは,RailsがWeb開発に必要なツールを集めたフレームワークであるからです.そして,カレーづくりに必要なじゃがいもやにんじんなどの材料はすべてモデル(冷蔵庫)にしまってあるので,そこから必要な材料を取り出して使います.調理場でカレーができあがったら,それをビュー(お皿)に盛り付けます.お皿だけ調理場から分かれている理由は,カレーを食べる人に調理場の様子は見せる必要が無いからです.きちんとお皿に盛り付けたら完成です!
ここで重要なのは,MVCは完全に独立していて,役割がはっきりと分かれているということです.調理場に材料を出しっぱなしにしておいてはいけません.Railsではこのように役割を独立させることで,保守性や可読性を向上させています.
CoC - 設定より既約
Railsでは,あらかじめ定められたルールに則って開発を進める必要があります.例えば,コントローラ名は複数形でモデル名は単数形にし,URLが /users/1 の時は,IDが1のユーザーの詳細情報へルーティングするといった感じです.
カレーづくりでは..
Railsがカレーのレシピを用意してくれるので,それに従ってカレーをつくります.例えば,じゃがいもの皮むきに包丁を使いたいと思ったり,鍋を使わずにフライパン1つで完成させたいと思ったりするかもしれませんが,Railsが皮むきにはピーラーを使い,煮込むときは鍋を使うことをあらかじめ定めている場合,私たちはそれに従うことを強く求められます.こう聞くと,なんだかRailsって融通の利かないフレームワークだなと考えてしまうかもしれませんが,RailsがCoCを求めるのにはきちんとした理由があります.
一般的に,Web開発は複数人で行うことが多いです.カレーづくりで言えば,林間学校の飯ごう炊さんのように米を炊く人,野菜を切る人,材料を煮込む人といった感じで役割を分担して作業を進めます.その際,各々が独自のレシピで調理を進めてしまうと,全体でうまく調整ができずに美味しくカレーをつくることができなくなってしまうかもしれません.
また,新たに調理する人が追加された場合,その人がどう調理を進めていいのかわからなくなってしまう可能性があります.そのため,RailsではCoCを求めることで,開発チームでの作業を円滑に進めることができます.(フレームワークによっては,自由なレシピを認めているものもあります.)
DRYの原則
Railsでは,同じ情報を繰り返し定義することはなるべく避けるよう求められます.具体的には,複数のビューファイルで共通に扱う情報は1つのパーシャルにまとめたり,ヘルパーメソッドを定義して同じ処理を繰り返し定義しないといった感じです.
カレーづくりでは..
材料を切る係の人が,じゃがいもを取り出す→じゃがいもの皮をむく→じゃがいもを切る→にんじんを取り出す→にんじんの皮をむく→にんじんを切る→たまねぎを…と調理していたらどう思いますか.きっと,「材料が違うだけでやっていることは同じなのだから,1回でやっちゃえ!」と思うことでしょう.この「1回でやっちゃえ」という感覚こそまさにDRYの考え方です.
また,DRYの原則に従うことで,複数の箇所にある同じ修正を何度もファイルを行き来することなく1回で直せるのでとても便利です.
最後に
Railsには今回紹介した概念以外にも重要かつ開発をしやすくしてくれることがいっぱいあります.もし機会があれば,また何かに例えてご紹介できたらと思います.(厳密さが欠けてしまうことはご了承ください.)
最後までお読みいただきましてありがとうございました.