Blank?=False

「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々

基礎RubyOnRails Chapter1 Railsの基礎

今回から基礎RubyOnRailsをやっていきます。 実践とか散々やった上での改めて基礎学び直し、どうなることか。

Ruby On Railsとは?

Ruby言語のWebアプリケーションフレームワークの1つ。
MVCアーキテクチャを採用している世界でも有名なフレームワークの1つであり、
CakePHPASP.net MVC等様々なフレームワークに影響を与えた。


Ruby On Railsアーキテクチャ

上記の通り、MVCを基礎としている。

MVCとは、プログラムの機能をモデル(Model), ビュー(View), コントローラ(Controller)の3種類に分割し、 ソースコードの構成の適正化、メンテナンス性の向上を目的とした概念。
それぞれの概要は以下のようなかんじ。

名称 機能
Model データベースに収めたデータ、及びデータの書式などのルール
View ユーザーに見せるインターフェースのデザイン
Controller データを取り出し、デザインに渡すプログラム。
また、データをデータベースに格納する。

モデル、ビュー、コントローラの関係は様々な考え方があるが、本書では以下のように紹介されている。
f:id:stonebeach-dakar:20160607062358p:plain

Controllerがユーザーからの操作を受け付け、Modelにデータの変更を通知して結果を受け取り、Viewに反映させる。
というイメージ。

Ruby On Railsの実体

RubyOnRailsの実体は上の通りMVCフレームワークを厳格に適用していきためのコンポーネント群となっている。
代表的なのは以下の3つと本書では紹介されている。

これから以外にも、ActiveModel, ActionMailer, ActionDispatchなどのコンポーネントがあり、
そのすべてがRailsGemパッケージに入っている。

Railsの設計哲学

Railsには2つの重要な設計哲学があり、1つはDRY, もう1つは設定より規約
DRYとは、DRY原則とも言い、リーダブルコード等の読みやすいソースコード指南本では必ずと言ってもいいほど書かれているもので、 コードの重複が起きないようにせよ、という考え方。
コードの重複を防ぐことで設計変更やバグフィックスの時に変更する点が最小限で済み、効率よく品質良いアプリケーションが開発できるようになる。

もう1つの設定より規約というのは、Railsの名前の通りレールにそって作ることで設定などを書く必要がなくなり、開発の生産性が向上する、というもの。 たとえば、モデルには命名規約があり、Membersというテーブルがあると、クラス名は単数形のMemberになり、ファイル名はmember.rbにしなければいけない、というルールになっている。
こういった制約について、Railsの開発者は「制約が自由をもたらす」と述べている。
実際に開発現場だと、コーディング規約などである程度ルールを設けている事が多く、そうすることで各プログラマでやり方を統一させ、
アプリケーション内のソースコードで一貫性を維持し、メンテナンス性・品質を一定に保つようにしている。
こういったことを、フレームワークとしてルール付けることで強制的に守らせるようなものかな。

Ruby On Railsのファイル構成

Rails Newで新しいRailsプロジェクトを始めたら、最初はだいたいこんな感じでフォルダができていると思う。
f:id:stonebeach-dakar:20160607195418p:plain
この各フォルダの内容について解説する。
(自分もはっきり把握していないところがありました・・・)

フォルダ名 機能
App erbテンプレート、モデルクラス、コントローラ,
CoffeScript,SCSS等コードを置くフォルダ
bin rake,rails等コマンドスクリプトファイル。
config ルーティング、アプリケーション全般設定等。
db データベースのマイグレーションファイル、Seedファイル等
lib 自作ライブラリ、rakeファイル
log アプリケーションのログ
public アプリケーションを介さずに送信する静的なファイル
test Minitest等で使うテストコード・ヘルパーを配置する
tmp テンポラリフォルダ
vendor 外部プラグインなど。

public,tmp, vendorあたりは余り使ったことがないのでピンときません。
testフォルダはRSpecを使うときは必要なくなりますね。(specというフォルダにテストコードを置く)

とりあえず今回はこんなところで。