Ruby初心者がMacローカル環境でRails5を動かしてみた。

html、css、サーバの仕組みは薄っすらと理解していて、基本的なパソコン操作ができる人用のメモ書きです。チュートリアルを読む前に軽く動かして動作を確認してみました。



##事前準備
>Xcode
Command Line Tools for Xcode
Homebrew 0.9.9
rbenv
ruby 2.3.1
Ruby on Rails 5
Atom 1.8.0
DB Browser 3.8.0

Xcodeとは、Mac用の開発環境
XcodeCommandLineToolsは、ターミナル上でゴニョゴニョするツール
Homebrewとは、Mac用のバージョン管理ツール
rbenvとは、複数verのrubyを同一環境内に構築するのに便利。
rubyとは、サクッとWebサービスを立ち上げたい人がよく使う言語。
Ruby on Railsとは、ruby用のフレームワーク。
Atomとは、個人的に使いやすいエディタ。
[DB Browser](http://sqlitebrowser.org)とは、SQLiteをGUIで操作する管理ツール。

参考にしたページ
- [初心者でもできた！Ruby on Rails開発環境の構築方法（Mac編）](http://techacademy.jp/magazine/4630)
- [【El Capitan】Mac OSX 10.11 El Capitan にRuby + Rails4 開発環境の構築 【初心者必見】](http://qiita.com/keneo/items/1772adc2ebbde229fb71)


##Ruby on Railsとは
ざっくり説明すると、Webページを動的に生成してくれるruby用の型枠(フレームワーク)のこと。MVCモデルで構築されており、PHPで言うCakePHPやZend Frameworkと同じ・・・というかパクリ元？？？

1. ユーザーがURLにアクセスする。
2. webサーバはアクセスされたURLを解析し、config/routes.rbに記述されたコントローラー(app/controllers/コントローラー名.rb)を呼び出す。
3. 呼び出されたコントローラーのメソッドが処理を開始する。この時データベース処理が発生する場合はモデル(app/models/モデル名.rb)が呼び出される。
4. 画面表示用のビュー(app/views/コントローラー名/メソッド名.html.erb)を呼び出し、HTML情報を動的に生成する。
5. ユーザーにHTML情報を返し、ブラウザ上に表示させる。


##新規プロジェクト作成と簡易Webサーバ立ち上げ（ターミナル作業）
後からRSpecを入れたいのでテストを省いてインストール。
>$rails new プロジェクト名 --skip-test

>$bundle install

>$rails server

##ブラウザーで表示を確認。

ｈttp://localhost:3000



##コントローラを自動生成。
>$rails generate controller Xxx

Xxx にコントローラ名(頭は大文字：例えばPages)

他にも一括削除やモデル雛形など便利なコマンドが沢山あります。
[Railsコマンド一覧](http://railsdoc.com/rails)
以下が自動生成されます。

- コントローラー：app/controllers/pages_controller.rb
- 画面(Webページ動的生成)：app/views/pages
- テストコード：test/controllers/pages_controller_test.rb
- ヘルパー(HTMLタグ生成)：app/helpers/pages_helper.rb
- JavaScript：app/assets/javascripts/pages.coffee
- スタイルシート：app/assets/stylesheets/pages.scss


##自動生成したコントローラーにメソッド追加。
app/controllers/pages_controller.rbに記述する。

>class PagesController < ApplicationController
>&nbsp;&nbsp; def home
>&nbsp;&nbsp; end
>end

メソッド名は英小文字(例えばhome)


##ルーティング情報を記述。
config/routes.rbのファイルに記述。
>get 'welcome' => 'pages#home'

ｈttp://localhost:3000/welcomeにアクセスしたら、pagesコントローラー内のhomeメソッドを呼び出す。

それぞれ英小文字で記述すること。
クラス名はPagesControllerと頭大文字だが記述は英小文字

##HTMLファイルとCSSファイルを記述。
app/views/pages/home.html.erb
app/assets/stylesheets/pages.css.sccs

HTMLファイルは、app/views/コントローラ名/メソソッド名.html.erb
CSSファイルは、app/assets/stylesheets/コントローラー名.css.sccs

##ブラウザーで表示を確認。

ｈttp://localhost:3000/welcome

##Railsチュートリアル用に環境整備
Ruby2.3.1&Rails5だとテスト時に警告が出たので'rspec-core','>=3.4.4'を指定し、spec_helperの記述については先人たちの知恵をパクらせて貰いました。

もしかしたらrails_helperに記述した方がいいのかも？？　内容はよくわかっていませんが・・・とりあえずエラーも吐かずに動いているのでヨシとします。

またエンドツーエンドテストツール用にcapybaraも入れてます。

###何故あえてRSpecを入れたのか？

チュートリアルでは第3版からRSpecではなく標準miniテストに変更されていますが、RSpecの使い勝手が良さそうなのと、業界標準らしいので導入しました。テスト部分については第2版を参考にWebを漁りながら学習を進めます。

- [Everyday Rails - RSpecによるRailsテスト入門
](https://leanpub.com/everydayrailsrspec-jp/read)
- [RSpec](http://rspec.info/documentation/3.5/rspec-mocks/)

###Gemfileに追加
>group :development, :test do
 &nbsp;&nbsp; gem 'byebug', platform: :mri
 &nbsp;&nbsp; gem 'rspec-rails'
 &nbsp;&nbsp; gem 'rspec-core','>=3.4.4' 
 &nbsp;&nbsp; gem 'guard'
 &nbsp;&nbsp; gem 'guard-rspec'
 &nbsp;&nbsp; gem 'factory_girl_rails'
 &nbsp;&nbsp; gem 'capybara'
end

####その他デバック用Gem
```
gem 'pry-rails'
gem 'pry-doc'
gem 'pry-byebug'
gem 'pry-stack_explorer'
```
[Pryでデバッグ](http://ruby-rails.hatenadiary.com/entry/20141024/1414081224)


###RSpecおよび自動監視の初期化
>$bundle update

>$rails g rspec:install

>$bundle exec guard init rspec

###spec_helperに下記を記述。

>require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'factory_girl'
require 'capybara/rails'
require 'capybara/rspec'

>Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

>ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
・
・
・
>RSpec.configure do |config|
  &nbsp;&nbsp; config.use_transactional_fixtures = true
  &nbsp;&nbsp; config.infer_base_class_for_anonymous_controllers = false
  &nbsp;&nbsp; config.run_all_when_everything_filtered = true
  &nbsp;&nbsp; config.order = 'random'
  &nbsp;&nbsp; config.include FactoryGirl::Syntax::Methods
  &nbsp;&nbsp; config.include Capybara::DSL

  >&nbsp;&nbsp; config.before(:all) do
   &nbsp;&nbsp; &nbsp; FactoryGirl.reload 
  &nbsp;&nbsp; end
・
・
・
 end
 
###簡易Webサーバを立ち上げ、自動監視を実行。
適当なページを修正し、テストが自動実行されることを確認する。
>$rails server 

>$bundle exec guard


##今後の学習ページ
[ドットインストール](http://dotinstall.com)
- Ruby入門 (全26回)
- Ruby on Rails 4入門 (全28回)

[Ruby on Rails4チュートリアル(日本語)](http://railstutorial.jp/chapters/beginning?version=4.2)
[日本語版ソース](https://github.com/yasslab/railstutorial.jp)

[RUBY ON RAILS TUTORIAL(RAILS5)](https://www.railstutorial.org/book/frontmatter)
[本家ソース](https://github.com/mhartl/sample_app_3rd_edition)

[Ruby on Rails ガイド](http://railsguides.jp)