読者です 読者をやめる 読者になる 読者になる

cd siliconvalley

I will startup at San Francisco !

Rails Tutorialで使うSample Appのフレーム構成をメモ

Railsプログラミング言語を進めていくにあたり、どのフォルダが
どのような役割を果たしているのかが最初はよく分からなくなってしまいます。
 
$ rails generate controller static_pages ...
 
その為、きちんと上記の命令によって生成されたファイル/ディレクトリが、
どのような役割を担っているのかをきちんと把握しておきましょう
 

f:id:yamadasmith:20150801043805j:plain

 
基本的に触るのは、app/ と db/ そして、テスト用に用いるspecです。
 
app/ とはモデル、ビュー、コントローラ、ヘルパーなどを含む主要なアプリケーションのコード(MVCモデ)となります。ちなみに、一つずつ解説していきますと。まず、モデルはActive Recordを使ってデータベースの情報を操作することになります。Active Recordとは、同名の"Active Record”というデータベースアクセスに関するデザインパターンを実装したライブラリとなります。次に、ビューですがこちらは直訳通りに、見た具合を作ります。htmlにRubyを組み込むことで実装されます。全ページに適用されるパーシャルなども適宜利用しましょう。コントローラは、ユーザーが操作することができる選択肢を示します。これは、create, show, destroyといったアクションをpathを使って結びつけます。そして、ヘルパーはHTMLのタグを作成する為のツールとなります。<%= link_to"削除", :action => 'destroy' %>は<a href="/destroy">削除</a>を吐き出します。Ruby on Railsでは、直接HTMLタグを書かずに、ヘルパメソッドを利用するのがルールとなります。つまり、使われているオブジェクトがどのようなものか記しておく材料となるわけですね。
 
app/ assets には、アプリケーションで使用するCSSJavaScript、画像などのアセットが入ります。bin/ はバイナリ実行可能ファイルとなります。
 
config /はアプリケーションの設定を行います。configに入っているroute.rbでルーティングの作業を行います。Railsにおけるルーティングは大きく分けて2つの機能を持ちます。
 
・URLから、「どのコントローラー」の「どのアクション」に「どういうパラメータ」を与えて処理を実行するかを定義します
・ビューにURLを記述する際は、ハードコーディングを避ける為URLを直接記述せずに、専用の方法で生成します
 
これによりURL構造とアプリケーション構造を独立して設計することを可能にします。一言でいえば、URLとアプリケーションのパラメータをつなぐ役割です。
 
db/ はデータベース関連のファイルです。マイグレーションファイルがここでは重要となってきます。マイグレーションRailsならではです。通常テーブルを新規に作成するには必要なSQL文を直接実行して作成します。カラムを追加したりする場合も同じです。それに対してマイグレーションを使う場合はテーブルを新規に作成する為のマイグレーションスクリプトと呼ばれるスクリプトファイルを作成し実行します。
 
spec/ はテストを実行するファイルとなる為、直接開発には関係がありません。しかし、spec/ を用いることによって、わざわざブラウザ上でテストをする必要がなくなる為、手間が省けます。ファイルとしてはcontrollers/ 、models/ 、requests/ 、/support があります。
 
下記は、Rails Tutorialで一番初めに行なうテストコードです。
spec/ requests/ static_pages_spec.rb
 
require 'spec_helper'
 
describe "Static pages" do
 
  describe "Home page" do
 
    it "should have the content 'Sample App'" do
      visit '/static_pages/home'
      expect(page).to have_content('Sample App')
    end
  end
end
 
これはRuby言語の中でもRSpecがテスト用に定義しているDSLを用いて記述されています。
 
  describe "Home page" do
 
ここでは、Homeページに対するテストである(describe)ことを記述しています。
 
    it "should have the content 'Sample App'" do
 
次の行では、「 /static_pages/ home のHomeページにアクセスした時、"Sample App"という語が含まれていなければならない」と記述しています。
 
      visit '/static_pages/home'
 
上の行では、Capybaraのvisit機能をつかって、
ブラウザでの/ static_pages/ home URLへのアクセスをシュミレーションしています。
 
      expect(page).to have_content('Sample App')
 
最後に、Capybaraが提供するpage関数をつかって、
アクセスした結果のページに正しいコンテンツ('Sample App')が表示されているかどうかをテストしています
 
上記らの作業をこなしながら、開発を進めていきます。
 
参考資料: Rubylife (http://www.rubylife.jp/)