基礎RubyOnRails Chapter1 Railsの基礎
今回から基礎RubyOnRailsをやっていきます。 実践とか散々やった上での改めて基礎学び直し、どうなることか。
Ruby On Railsとは?
Ruby
言語のWebアプリケーションフレームワーク
の1つ。
MVC
アーキテクチャを採用している世界でも有名なフレームワークの1つであり、
CakePHP
、ASP.net MVC
等様々なフレームワークに影響を与えた。
Ruby On Railsのアーキテクチャ
上記の通り、MVC
を基礎としている。
MVCとは、プログラムの機能をモデル(Model)
, ビュー(View)
, コントローラ(Controller)
の3種類に分割し、
ソースコードの構成の適正化、メンテナンス性の向上を目的とした概念。
それぞれの概要は以下のようなかんじ。
名称 | 機能 |
---|---|
Model | データベースに収めたデータ、及びデータの書式などのルール |
View | ユーザーに見せるインターフェースのデザイン |
Controller | データを取り出し、デザインに渡すプログラム。 また、データをデータベースに格納する。 |
モデル、ビュー、コントローラの関係は様々な考え方があるが、本書では以下のように紹介されている。
Controller
がユーザーからの操作を受け付け、Model
にデータの変更を通知して結果を受け取り、View
に反映させる。
というイメージ。
Ruby On Railsの実体
RubyOnRailsの実体は上の通りMVCフレームワークを厳格に適用していきためのコンポーネント群となっている。
代表的なのは以下の3つと本書では紹介されている。
- ActiveRecord ・・・MVCのModel
- ActionController・・MVCのController
- ActionView・・・MVCのVIEW
これから以外にも、ActiveModel
, ActionMailer
, ActionDispatch
などのコンポーネントがあり、
そのすべてがRails
のGem
パッケージに入っている。
Railsの設計哲学
Railsには2つの重要な設計哲学があり、1つはDRY
, もう1つは設定より規約
。
DRY
とは、DRY原則
とも言い、リーダブルコード
等の読みやすいソースコード指南本では必ずと言ってもいいほど書かれているもので、
コードの重複
が起きないようにせよ、という考え方。
コードの重複を防ぐことで設計変更やバグフィックスの時に変更する点が最小限で済み、効率よく品質良いアプリケーションが開発できるようになる。
もう1つの設定より規約
というのは、Railsの名前の通りレールにそって作ることで設定などを書く必要がなくなり、開発の生産性が向上する、というもの。
たとえば、モデルには命名規約
があり、Membersというテーブルがあると、クラス名は単数形のMemberになり、ファイル名はmember.rbにしなければいけない、というルールになっている。
こういった制約について、Railsの開発者は「制約が自由をもたらす」と述べている。
実際に開発現場だと、コーディング規約
などである程度ルールを設けている事が多く、そうすることで各プログラマでやり方を統一させ、
アプリケーション内のソースコードで一貫性を維持し、メンテナンス性・品質を一定に保つようにしている。
こういったことを、フレームワークとしてルール付けることで強制的に守らせるようなものかな。
Ruby On Railsのファイル構成
Rails New
で新しいRailsプロジェクトを始めたら、最初はだいたいこんな感じでフォルダができていると思う。
この各フォルダの内容について解説する。
(自分もはっきり把握していないところがありました・・・)
フォルダ名 | 機能 |
---|---|
App | erbテンプレート、モデルクラス、コントローラ, CoffeScript,SCSS等コードを置くフォルダ |
bin | rake,rails等コマンドスクリプトファイル。 |
config | ルーティング、アプリケーション全般設定等。 |
db | データベースのマイグレーションファイル、Seedファイル等 |
lib | 自作ライブラリ、rakeファイル |
log | アプリケーションのログ |
public | アプリケーションを介さずに送信する静的なファイル |
test | Minitest等で使うテストコード・ヘルパーを配置する |
tmp | テンポラリフォルダ |
vendor | 外部プラグインなど。 |
public
,tmp
, vendor
あたりは余り使ったことがないのでピンときません。
test
フォルダはRSpec
を使うときは必要なくなりますね。(spec
というフォルダにテストコードを置く)
とりあえず今回はこんなところで。