ついにここからRuby onRails(以下Rails)である。
Railsを使うと短期間でウェブアプリを作成できることから、スタートアップ企業を中心に広く使われるようになっているようだ。
なお、筆者が経営に携わっていたスタートアップもシステム刷新のタイミングでRailsに変更した。
なお、今回pictweetというtwtter風のアプリを作成するという前提で情報をまとめる。
Ruby on Railsとは
RailsはRubyでウェブアプリを作成するためのGem(ライブラリ)。
Gemとはコードを書く際の便利ツールで、書かなくてはいけないコードの量を大幅に削減することができる。
Railsの全体像
Railsの全体像を押さえるために、まず理解しておきたいのがMVCという考え方である。
Railsの全体的な設計にMVCが採用されているため、Railsの理解には欠かせない。
例によって大まかな理解が重要である。
MVCとは
MVCはアーキテクチャといわれるものの一つである。
アーキテクチャとは設計のことで、プログラムを見やすく、機能の追加や変更がしやすい構成にするためのものである。
高機能なアプリケーションを作るためには膨大なファイルを扱う必要がある。
そのため設計のルールを決めておかないと、すぐに管理しきれなくなってしまう。
MVCは、アプリ全体をM(モデル)、V(ビュー)、C(コントローラー)の3つの機能に分類する考え方である。
ここでは、MVCがそれぞれどういった役割を持つのか簡単に確認しておく。
- ビューとは
MVCの中で、ビューが一番イメージしやすい機能。
文字通り、アプリの見た目部分を担当する。
ブラウザに表示させるHTMLの組み立てを行う。
- モデルとは
モデルは、主にデータベースとの連携を担当する。
本来、データベースとのやりとりにはSQL文という独自の言語を使用する必要がある。
モデルは、開発者がSQL文を使わず容易に読み書きができる機能を提供してくれる。
- コントローラーとは
コントローラーは、ビューとモデルを仲介する役割がある。
ユーザーからの入力に従って、モデルに対してデータの取得を依頼したり、ビューに対してHTMLの作成を依頼するなど司令塔のような役割を果たす。
Railsの流れ
最初の画面に、今まで投稿された内容の一覧が表示される。
これは、ユーザーからの「ツイートの一覧が見たい」という要求に対して、Railsアプリが応えているということになる。
そのときアプリの内部で何がおきているのかというと、
- コントローラーが要求を受ける
「ツイートの一覧が見たい」というユーザーの操作を、司令塔であるコントローラーが受け取る。
なお、コントローラーは通常複数あるため、どのコントローラーを動かすべきか選択する必要がある。その役割を「ルーティング」が担っている。 - コントローラーがモデルにデータの取得を依頼する
ブラウザに結果を表示させるためには、データベースの情報が必要である。
そのため、モデルに対して必要なデータを取得するよう依頼する。 - モデルがデータベースからデータを取得する
モデルは、必要な情報をデータベースから取ってくる。
データベースには、情報ごとに分類した複数のテーブルがある。
今回はツイート情報が蓄積されたテーブルから全件のデータを取得する。
取得した情報はコントローラーに渡される。 - コントローラーがビューに見た目の作成を依頼する
コントローラーは、モデルから受け取ったデータをビューに渡して画面の作成を依頼する。 - ビューがHTMLを組み立てる
ビューは、固定で表示させる部分のデータをテンプレートとして持っている。
例えば、ヘッダーに表示させる内容や、どのようなレイアウトで表示させるかといった情報である。
そのテンプレートに、コントローラーから受け取ったデータを埋め込んでHTMLを組み立てる。
そのHTMLをブラウザで表示されると、ユーザーがツイートの一覧を見ることができる。
Railsでのデータの扱い方
Railsで作成するウェブアプリでは、データベースにデータを保存したり、必要なデータを読み出すことが機能の中心となる。
そのため、データをどう扱うかということが重要となる。
Railsではどのようなアプローチが取られているのか。
リソースとは
Railsではリソースという考え方が大事なため、最初にしっかり押さえておく必要がある。
リソースとは、簡単にいうとデータの塊のことである。
Railsを使って新規のアプリケーションを設計するときは、どのようなリソースを扱えるようにするべきかを真っ先に考える。
データありきでプログラムを作成していくのがRailsの特徴なのである。
例えばPicTweetの場合はどんなリソースがあるでしょうか。
PicTweetは、「ツイート」「コメント」「ユーザー情報」を扱えるアプリになっている。この3つがリソースというわけである。
Railsのファイル構成
先に見たMVCのファイル構成も、データ中心のものとなっている。
先ほどの図ではコントローラーやモデルが一つのものとして描かれていますが、実際は複数のファイルから構成される。
PicTweetではこの図のように構成されている。
これはRailsアプリの設計として一般的な考え方である。
- Railsでは1つのリソースに対してそれぞれモデルとコントローラーを作成する。
- 同じリソースに対応するモデル、コントローラーには同じ名前をつける。
ルーティングについて
この図の一番左にルーティングと書いてあるが、これは何か。
コントローラは、モデルやビューに依頼をする司令塔である。
しかし、今見たようにコントローラーは複数用意されている。
そのため、ユーザーの操作に対してどのコントローラーが動くべきか決める必要がある。
この割り振りを行うのがルーティングの役割である。