cd siliconvalley

I will startup at San Francisco !

Ruby on Rails Tutorialに挑戦中!ほぼ静的なページの作成!

Ruby On Rails Tutorialのサンプルアプリケーションを

作っていきたいと思います。
 
なぜRuby On Railsなのか?
→ もともと、HTML,CSS,JavaScriptの経験がある上で最もウェブアプリケーションを作成する上で取っ掛かりやすい分野だと感じたからです。また、Ruby Motion(http://www.rubymotion.com/)などこれから取り組んでいきたい領域への派生も見込まれたからです。
 
Railsを進めていくにあたり、いちいち/users/~とローカルサーバーを立ち上げて
ここまでが出来ているかを確認しながら進めるのは面倒なので、
RSpecというサンプル(個体ユーザー)を用意します。
 
これは要するに、RSpecというサンプルアプリケーションの一番初めの
ユーザーということになります。
 
フレームワークであるsample_appを生成しましょう!
 
$ rails new sample_app
 
上記をコマンド入力すると、sample_appのフレームが生成されます。
 
Rubyにはgemというパッケージを追加していくことができるファイルがあります。ここに追加することで、rubyの機能を広げていくことができます。
 
ここで、使用するGemを紹介します。
開発環境(app)とテスト環境(spec)を同時に動かしていく為には、開発環境に固有のユーザーを作成し、これに連動させる必要があります。
> Capybara
英語に近い文法で開発を進めていくことができます。
 
gemを実際に採用する為には、bundle installbundle updateを実行する必要があります。
 
さらに、オープンソース(パブリックレポジトリ)である為に秘密トークンを作成してセキュリティ問題を回避する対策を取る必要があります。
→ config/initializers/secret_tokenに下記の内容を追加する
def secure_token
  token_file = Rails.root.join('.secret')
  if File.exist?(token_file)
    # Use the existing token.
    File.read(token_file).chomp
  else
    # Generate a new token and store it in token_file.
    token = SecureRandom.hex(64)
    File.write(token_file, token)
    token
  end
end
 
・静的なページを生成していきましょう!
 
動的なアプリケーションを作成するにページの素材を作っていきます。ビュー(app/views)とアクション(app/controllers)の静的なページを作っていくということです。コントローラはWebページの集合を束ねるコンテナです。
 
まず、作業ブランチを変更します。(作業デスクを変えるイメージ)
 
$ git checkout -b static-pages
 
次に、Homeページ、Helpページそして、Aboutページ複数ページを静的に置くことができるstatic-pageを生成します。
 
$ rails generate controller StaticPages home help --no-test-framework
 
ところで、routes.rbとはconfigフォルダの中にある「ユーザーが作業できる(触る)リスト一覧」となります。static-pageの生成に伴い、homeページとhelpページは自動的に生成されていました。
 
ここで、/static_page/homeにURLアクセス(HTTPのGETリクエスト)をすると、ページを取得(GET)できるように繋いであげられるようになりました。
 
ここで、コントローラ(static_page_controller)を覗いてみます。ここにはdefでページを定義づけて、ユーザーがそのページへアクセス(HTTPを操作)した時にappがどういった回答をするかを記述しています。
 
Rails Tutorialではテスト駆動開発をしていく
 
> static_pages_specを書き換えていきます
require 'spec_helper'
 
describe "Static pages" do
// Static pageの上で
 
describe "Home page" do
 
it "should have the content 'Sample App'" do
visit '/static_pages/home'
// Sample App上で /static_pages/home にvisit機能を使ってアクセスした場合
expect(page).to have_content('Sample App')
// page関数を使って、アクセスしたページに正しい結果が表示されるかどうか
end
end
end
 
ちなみに、RSpec上で""(ダブルクォート)で囲まれた箇所は虫される。したがって、分かりやすい言葉を書くようにしましょう。
 
最初のテストでは失敗するが、home.html.erbのh1タグを「Sample_App」と変更することによって、テストは正しいと判断されます。
 
これと同様に、HelpとAboutを作成する。
 
layoutファイルのapplication.html.erbを設定することにより、各ページにここに記載されている内容が連携して削除することができるようになります。
 
<!DOCTYPE html>
<html>
<head>
  <title>Ruby on Rails Tutorial Sample App | <%= yield(:title) %></title>
  <%= stylesheet_link_tag    "application", media: "all",
                                            "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>
 
<%= yield %>
 
</body>
</html>
 
上記のように書き換えた上でもテストには成功するはずです。
 
<本日のまとめ>
rails generateで基本的にフレームを生成していく
・bundle exec rspec~でテスト駆動開発をしながら進めてく
・組み込みRuby(<%= %>)を取り入れることでHTMLを省略していく
 
なんども挫折しているRuby on Rails今度こそ、きちんと把握できるように
がんばっていきます!
めざせ、エンジニア!!