Love PG , Liquor & Music

プログラマー備忘録やお酒や音楽

Heroku+Ruby on Railsで開発する! その4(Railsの基本機能と開発手順について)

実際にRails使ってAP作成する前に、まず何が得意でどういったことができるのかとか、何を作ればいいのとか知るために今日は「Ruby On Rails4 アプリケーションプログラミング」という本を読んでみました。どうでもいいんですけど、この手の参考書高いしかさばるからあまり買いたくはなかったのですが必要経費ということで泣きながら買いました。

ネットだと情報が一貫してないからどうしても本に頼るしかないんですよね。 

 

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

 

 

一通り読んだ感想として

・本の内容は例と出力がそれぞれ記載されててとてもよかった

・発売したばかりなので、最新のバージョンに対応してた(珍しい!)

・ただ、4割くらいはリファレンス兼ねてたので、使うときに読もう!と思って読み飛ばした

MVCで組んでいくうえで機能が豊富

・豊富なのでビジネスロジックくらいしか頭使って書かなくていい

・豊富すぎて覚えきらない

・機能のほとんどが命名規則に依存したりするので何気ない一言で内部的に結構な処理してるので把握するのがつらい

Rubyも初心者なのでつらい、ただただ、つらい

 

なので、きちんと(RubyRailsも)覚えて使いこなせればすごい(いい意味で)手抜いて作れるなー、便利だなーと思いました。

で、何に特化しているかというと、MCVパターンに沿ったRESTfulなアプリケーション作成に特化しています。

また、アプリケーション開発に必要なテストも(JUnitみたいなの)サポートしており、Rails使えばオールインワンで開発が可能です。(フルスタックっていうそうです。)

 

じゃあ、実際に開発していくときにどう開発していくの?ってところですが、MVCパターンを採用しているのでMとVとCをそれぞれ作っていきます。

 

1.Viewの開発

Viweは、実際に使う人(ユーザー)に対して何をどう見せるのかっていう見せるもののことです。つまり一般的にHTMLのこと。

使う人が他システムとかNativeアプリとかになるとViewがJSONXMLになる場合もありますが、今回は考えません。

Strutsとか利用して開発すると動的なHTMLを生成するためにJSPなどを使ったりします。RailsではERB(Embedded Ruby)テンプレートっていうのを使います。ERBってのはHTMLにRubyスクリプトを埋め込めるような仕組みです。JSPでHTMLにJavaを埋め込めるのとほぼ同じです。この仕組みを使って、APサーバーで取得した値をクライアントへ動的に返すことができます。

また、Strutsで言うとStrutsタグとかいうView生成で使うと便利なタグがあります。これと同じようなことをRailsではHelperという機能群を使って実現することができます。たとえば、パスワード用のフィールドを定義できるpassword_fieldや日付入力用のdeta_fieldなんかです。Strutsだと<html:password>など。

これを駆使して、最終的にデザイナーが上げたデザインと同じになるように画面を組み立てていくような感じになると思います。

 

2.Modelの開発

Modelは、ビジネスロジックの実装部分になります。

ここの定義とか整理をあらかじめきちんとやっておかないとアプリケーションはできません。で、ここの特徴としてあらかじめDBとのO/Rマッピングがされております。便利ですね。Javaで言うとmyBatisのgeneratorで生成するDAOクラスが標準で搭載されている感じです。強力です。

んで、Modelでは何ができるかというと。

 ・実データへのアクセス(Select、Update、Delete、Insertなどなど)

 ・データの検証(Validator)

 ・リレーションシップの設定

 ・Migration

とかです。

テーブル同士のリレーションは設計段階で必ずER図書くと思います。ここではその通りに記載するだけで勝手にリレーション張ることができます。

たとえば、Twitterとかで考えると

ユーザーモデルとつぶやきモデルを作ります。

ユーザーは何件もつぶやけるので関連性は1:Nになります。

かつ、つぶやきは必ずユーザーに依存します。

そして、その設定をモデルにしてあげます。

すると、

GET Users/Tweets みたいな感じで指定したユーザーのつぶやきを全部取得でき、

GET Tweets/User みたいな感じで指定したつぶやきのユーザー情報がとれたりします。ここがくそ楽にできるのでびっくりしました。あとは、Validation機能。これもStrutsでいうValidatorみたいなのが用意されています。個人的にここに書くのは「?」な気がしていますが、たぶんそれは理解しきれていないからなのでしょう。

ちなみにModelの実装で一番メインになるのはもちろん実データへのアクセスです。

ここもSQLを書く必要がほとんどなく、ibatorで自動生成されたDAOクラスのようにwhereやorder byメソッドが用意されています。もちろんSQLを任意に発行することも可能です。

 

3.Controllerの開発

 ControllerはViewとModelをつなぐ部分になります。

クライアントからHTTPリクエストを受け取り、任意のModelを呼んで、HttpResponseをViewに返してあげる役割をしています。ここで、Modelから受け取った情報をどのViewに返すのか?とかどういったフォーマットで返すのか?とかどういったHttpStatusを返すのか?とかそういった情報の実装ができます。

また、Filter機能や、Cookieやセッションの管理もここで行えます。

 

4.ルーティングの設定

Railsでいうルーティングとは、クライアントからHTTP受け取った際、どのコントローラーのどのアクションを呼んであげるかというのを定義するところです。

外部に公開したくないリソースがあった場合とかここをいじってあげます。

 

5.テストの実装

RailsではSPECを使って以下のテストをサポートしています。

単体テスト(モジュール単位)

・機能テスト(単一コントローラー)

結合テスト(複数コントローラー)

JUnitでいうassertや、テストデータ作成機能なんかも搭載しているのでそれを使ってテストを実装していきます。

 

以上が、Railsを使ったAP開発の最低限の流れになります。

ほかにもSassやCoffeeScriptをサポートしていたり、GEMでRedis(メモリ上のDB)やSoler(全文検索エンジン)、Mandoril(JSでメールが送れるSMTPサーバー)なども使えたりするのでいろいろと拡張ができます。

 

一通り把握したところで、とりあえず覚えるまでがつらい。本当につらい。

次回はからはそろそろScaffolding使った実装をやっていこうとおもいます。