Rails Tutorial 第3版 第4、5章

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の2周目です。

第4章 Rails風味のRuby

見た目整える回です。
cloud9 は emmet も使えて気持ちよくcodingもそれほど苦になりませんね。
 

シンボルにハイフンが使えない

というのは、知リませんでした。
以下の自動生成される、data-turbolinks-track についてのお話です。

# app/views/layouts/application.html.erb
stylesheet_link_tag 'application', media: 'all',
                                   'data-turbolinks-track' => true

第5章 レイアウトを作成する

HTML5のIE8対応

もうそろそろいいのではないかという気はしますが、お仕事で使う場合はとりあえず入れる感じでしょうか。

HTML5は比較的新しく、一部のブラウザ (特に旧式のInternet Explorer) では
HTML5のサポートが不完全であるため、以下のようなJavaScriptコード
 (通称 “HTML5 shim”)3 を使用してこの問題を回避します。
<!--[if lt IE 9]>
  <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js">
  </script>
<![endif]-->

余談 このshimってなんだろうと思ったのでググると、以下の記事に記載がありました。なるほど。
Shimの意味 - Qiita

Asset Pipeline

app/assets: 現在のアプリケーション固有のアセット
lib/assets: あなたの開発チームによって作成されたライブラリ用のアセット
vendor/assets: サードパーティのアセット

path と url の使い分け

Railsチュートリアルでは、_path書式を使用する一般的な規約に従い、
リダイレクトの場合のみ_url書式を使用します。
これは、HTTP標準では技術的にリダイレクト後に完全なURLが要求されるためです。

演習

helperに対するテストを何故書かないのかと思っていたら、ここで出てきました。

testでhelper利用できるようにしておく方法は以下。

# test/test_helper.rb
include ApplicationHelper

コーディング実況動画

第5章 Railsチュートリアル第3版・コーディング実況動画 - YouTube

なんと、伊藤さんが実況動画をupされているようでした。
(第5章はkeyboardの音か何かわかりませんが、前半雑音が凄いので要注意。) 私は、BGMとして流しながらやってます。
一人じゃないよ感があっておすすめです。

ちなみに、伊藤さんの以下の書籍を購入させていただきました。
Tutorial 終わったら読んでいきます。
Everyday Rails… Aaron Sumner 著 et al. [Leanpub PDF/iPad/Kindle]

Rails Tutorial 第3版

気がついたら第3版が出ていたんですね。
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

上記ページ中頃に関連したスライドが埋め込まれてますが、
個人的には、Cloud9、MiniTest あたりが良いなと思いました。
 
特に初心者(特にwindowsユーザ)は環境周りで苦労するので、
Cloud9 を使うという選択肢はありな気がします。
今回初めて使ってみましたが、Cloud9 すげーの一言。
少し遅いのと、よく間違ってブラウザ閉じちゃうのが玉にきずですが、これ無料で使えるって凄い。
あと、私自身はRSpecを好んで利用していたので、MiniTestが学べるのは嬉しいです。
 
現在第3章まで完了です。
実際にやってみると、GithubよりBitbucketのprivateリポジトリを利用するなど、
いろいろ変わっているようです。
RESTの解説など、改めて思いましたが、やはり良い教材ですね。
あと、初心者は heroku は飛ばしても良い気がしました。  

第3章

個人的には、以下が良かったです。(本筋とは違いますが)

  • minitestレポータの設定
  • Backtrace silencerの設定
  • Guardの設定
  • Guard使用時のSpringとGitの競合(.gitignoreにspring/を追加)

共通.rubocop.ymlの管理

rubyを会社で利用している方なら、 複数プロジェクトにまたがるような .rubocop.yml をどう管理するか ということを考えるのは、ごくごく自然なことです。
(私は会社でruby使ってないですけど)

rubocop のしつけ方 - onk.ninja を見ていて、 inherit_from で継承するのかと感心していたら、

onkさんに version0.35 からは inherit_gem というのがあるということを 教えていただきました。
せっかくなので inherit_from と inherit_gem について見ていきます。

まずは

rubocopのversion upをしましょう。

ヘルプ

Configuration - RuboCop: The Ruby Linter that Serves and Protects

inherit_from

こんな感じで継承先を複数指定できます。

inherit_from:
  - http://www.example.com/rubocop.yml
  - ../.rubocop.yml

下のやつが優先されます(上から順に適用される)。
remote のファイルでも指定できます。
ただし、cache ファイルを作成するようで、取得後24時間はcacheを見るようになっています。
 
試しに以下のような.rubocop.ymlを作成しrubocopを実行すると

inherit_from:
  - https://raw.githubusercontent.com/rails/rails/master/.rubocop.yml

.rubocop.yml と同じディレクトリに.rubocop-https---raw-githubusercontent-com-rails-rails-master--rubocop-yml というファイルが出来上がります。
ただ、$HOME/.rubocop.yml でremoteを指定すると、$HOME以下に上記のものが出来上がるので $HOME以下のやつにremoteを指定するのはやめました。
社内共通の .rubocop.yml をホスティングして各プロジェクトで利用する形にすれば捗りそうです。

inherit_gem

(例が現実的でないかもしれないですが)こちらもこんな感じで継承先を複数指定できます。

inherit_gem:
  my-shared-gem: .rubocop.yml
  cucumber: conf/rubocop.yml

下のやつが優先されます(上から順に適用される)。
inherit_from と併用した場合は、inherit_gem が優先されます。
当たり前ですが、gemspecにrubocop.ymlが含まれていないと利用できません。(railsはダメ)。
inherit_from の方がお手軽ですが、rubocop用のgemを作って社内配布する形だと remoteへのアクセスはなくなるし、version管理できるので、これはこれで良いです。

See Also