さらなる高みへ -higher ground -

プログラミング学習の定着を狙いとしたアウトプット(独り言)をしてみるブログ

Ruby on Rails基礎【Ruby on Rails1】

ついにここからRuby onRails(以下Rails)である。

Railsを使うと短期間でウェブアプリを作成できることから、スタートアップ企業を中心に広く使われるようになっているようだ。

なお、筆者が経営に携わっていたスタートアップもシステム刷新のタイミングでRailsに変更した。

なお、今回pictweetというtwtter風のアプリを作成するという前提で情報をまとめる。

Ruby on Railsとは

RailsRubyでウェブアプリを作成するためのGem(ライブラリ)。
Gemとはコードを書く際の便利ツールで、書かなくてはいけないコードの量を大幅に削減することができる。

Railsの全体像

Railsの全体像を押さえるために、まず理解しておきたいのがMVCという考え方である。
Railsの全体的な設計にMVCが採用されているため、Railsの理解には欠かせない。
例によって大まかな理解が重要である。

MVCとは

MVCアーキテクチャといわれるものの一つである。
アーキテクチャとは設計のことで、プログラムを見やすく、機能の追加や変更がしやすい構成にするためのものである。

高機能なアプリケーションを作るためには膨大なファイルを扱う必要がある。
そのため設計のルールを決めておかないと、すぐに管理しきれなくなってしまう。

MVCは、アプリ全体をM(モデル)、V(ビュー)、C(コントローラー)の3つの機能に分類する考え方である。
ここでは、MVCがそれぞれどういった役割を持つのか簡単に確認しておく。

  • ビューとは

MVCの中で、ビューが一番イメージしやすい機能。
文字通り、アプリの見た目部分を担当する。
ブラウザに表示させるHTMLの組み立てを行う。

  • モデルとは

モデルは、主にデータベースとの連携を担当する。
本来、データベースとのやりとりにはSQL文という独自の言語を使用する必要がある。
モデルは、開発者がSQL文を使わず容易に読み書きができる機能を提供してくれる。

  • コントローラーとは

コントローラーは、ビューとモデルを仲介する役割がある。
ユーザーからの入力に従って、モデルに対してデータの取得を依頼したり、ビューに対してHTMLの作成を依頼するなど司令塔のような役割を果たす。

Railsの流れ

最初の画面に、今まで投稿された内容の一覧が表示される。
これは、ユーザーからの「ツイートの一覧が見たい」という要求に対して、Railsアプリが応えているということになる。

そのときアプリの内部で何がおきているのかというと、

https://tech-master.s3.amazonaws.com/uploads/curriculums//3d5a147d892dbcadc44b0bf8772812d9.png

  1. コントローラーが要求を受ける
    「ツイートの一覧が見たい」というユーザーの操作を、司令塔であるコントローラーが受け取る。
    なお、コントローラーは通常複数あるため、どのコントローラーを動かすべきか選択する必要がある。その役割を「ルーティング」が担っている。
  2. コントローラーがモデルにデータの取得を依頼する
    ブラウザに結果を表示させるためには、データベースの情報が必要である。
    そのため、モデルに対して必要なデータを取得するよう依頼する。
  3. モデルがデータベースからデータを取得する
    モデルは、必要な情報をデータベースから取ってくる。
    データベースには、情報ごとに分類した複数のテーブルがある。
    今回はツイート情報が蓄積されたテーブルから全件のデータを取得する。
    取得した情報はコントローラーに渡される。
  4. コントローラーがビューに見た目の作成を依頼する
    コントローラーは、モデルから受け取ったデータをビューに渡して画面の作成を依頼する。
  5. ビューがHTMLを組み立てる
    ビューは、固定で表示させる部分のデータをテンプレートとして持っている。
    例えば、ヘッダーに表示させる内容や、どのようなレイアウトで表示させるかといった情報である。
    そのテンプレートに、コントローラーから受け取ったデータを埋め込んでHTMLを組み立てる。
    そのHTMLをブラウザで表示されると、ユーザーがツイートの一覧を見ることができる。

Railsでのデータの扱い方

Railsで作成するウェブアプリでは、データベースにデータを保存したり、必要なデータを読み出すことが機能の中心となる。
そのため、データをどう扱うかということが重要となる。

Railsではどのようなアプローチが取られているのか。

リソースとは

Railsではリソースという考え方が大事なため、最初にしっかり押さえておく必要がある。

リソースとは、簡単にいうとデータの塊のことである。
Railsを使って新規のアプリケーションを設計するときは、どのようなリソースを扱えるようにするべきかを真っ先に考える。
データありきでプログラムを作成していくのがRailsの特徴なのである。

例えばPicTweetの場合はどんなリソースがあるでしょうか。
PicTweetは、「ツイート」「コメント」「ユーザー情報」を扱えるアプリになっている。この3つがリソースというわけである。

Railsのファイル構成

先に見たMVCのファイル構成も、データ中心のものとなっている。
先ほどの図ではコントローラーやモデルが一つのものとして描かれていますが、実際は複数のファイルから構成される。

https://tech-master.s3.amazonaws.com/uploads/curriculums//c6f9f7b81ed145cc86e2ef5727c45c1f.png

PicTweetではこの図のように構成されている。
これはRailsアプリの設計として一般的な考え方である。

  • Railsでは1つのリソースに対してそれぞれモデルとコントローラーを作成する。
  • 同じリソースに対応するモデル、コントローラーには同じ名前をつける。
ルーティングについて

この図の一番左にルーティングと書いてあるが、これは何か。

コントローラは、モデルやビューに依頼をする司令塔である。
しかし、今見たようにコントローラーは複数用意されている。

そのため、ユーザーの操作に対してどのコントローラーが動くべきか決める必要がある。
この割り振りを行うのがルーティングの役割である。