Ruby on Rails チュートリアル をやってみた その3

前回、「Ruby on Rails チュートリアル をやってみた その2 - IxD's blog」で第2章をやりましたが、今回は

railstutorial.jp

 

こちらのチュートリアルをやっていきます。

今回は第3章 ほぼ静的なページの作成です。

 

第3章 ほぼ静的なページの作成
説明のみなので特にありません。

3.1 セットアップ

リスト3.1

$ cd ~/workspace
$ rails _4.2.2_ new sample_app
$ cd sample_app/

実行したコマンド

$ cd ~/workspace
$ rails new sample_app
$ cd sample_app/

 

リスト3.2

source 'https://rubygems.org'

gem 'rails', '4.2.2'
gem 'sass-rails', '5.0.2'
gem 'uglifier', '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks', '2.3.0'
gem 'jbuilder', '2.2.3'
gem 'sdoc', '0.4.0', group: :doc

group :development, :test do
gem 'sqlite3', '1.3.9'
gem 'byebug', '3.4.0'
gem 'web-console', '2.0.0.beta3'
gem 'spring', '1.1.3'
end

group :test do
gem 'minitest-reporters', '1.0.5'
gem 'mini_backtrace', '0.1.3'
gem 'guard-minitest', '2.3.1'
end

group :production do
gem 'pg', '0.17.1'
gem 'rails_12factor', '0.0.2'
end

実際に使用したGemfile

source 'https://rubygems.org'

gem 'rails', '4.2.5'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
gem 'sqlite3'
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
end

group :test do
gem 'minitest-report'
gem 'mini_backtrace'
gem 'guard-minitest'
end

group :production do
gem 'pg'
gem 'rails_12factor'
end

完全に環境を一緒にすることも考えましたが、バージョンがほぼ変わらないのでそのまま進めることにしました。

第1章や第2章と同様に、リスト1.8や1.9の「Hello, world」の手順に従うことをお勧めします。

とありますが、リスト1.9はroutes.rbのデフォルト状態が掲載されているのみですので、リスト1.10を実行してほしいのだろうと解釈し、実行しています。
また、今回のやってみたではBitbucketやHerokuは使用しませんので、

$ git remote add origin git@bitbucket.org:<username>/sample_app.git
$ git push -u origin --all # リポジトリと参照を初めてプッシュする

上記コマンドは実行しません。そして、

$ git commit -am "Add hello"
$ heroku create
$ git push heroku master

はコミットのみ実行としました。ですので、

$ git commit -am "Add hello"

のみとなります。これらのことからも分かる通り、

$ heroku logs

についても必要ありませんので実行しません。

3.1 静的ページ
前章の章番号が3.1だったので、おそらくは3.2が正しいと思われます。
内容的には特に不明な点はありませんでした。

3.2.1 静的なページの生成

$ git status
$ git add -A
$ git commit -m "Add a Static Pages controller"
$ git push -u origin static-pages

記事にも説明がありますが、最後のコマンドはBitbucketへプッシュを実行するものなので、

$ git push -u origin static-pages

は実行しません。

3.3 テストから始める
説明のみなので特にありません。

3.3.1 最初のテスト
リスト 3.12: GREEN

$ bundle exec rake test

を実行すると、以下の文言が含まれるエラーが発生します。

doesn't exist yet. Run `rake db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter application.rb to limit the frameworks that will be loaded.

パス部分は省略していますが、rake db:migrateを実行せよ、ということですので実行しました。

$ bundle exec rake db:migrate

その後、

$ bundle exec rake test

を実行すると以下のエラーが出ました。

`require': cannot load such file -- guard (LoadError)

そこで、

$ bundle exec guard

を実行したところ、

bundler: command not found: guard
Install missing gem executables with `bundle install`

ということでしたので、Gemfileのtestに「gem 'guard’」を追加します。

group :test do
gem 'minitest-reporters'
gem 'mini_backtrace'
gem 'guard'
gem 'guard-minitest'
end

全体としては以下のようになります。

source 'https://rubygems.org'

gem 'rails', '4.2.5'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
gem 'sqlite3'
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
end

group :test do
gem 'minitest-reporters'
gem 'mini_backtrace'
gem 'guard'
gem 'guard-minitest'
end

group :production do
gem 'pg'
gem 'rails_12factor'
end

書き換え後、

$ bundle install bundle install --without production
$ bundle update

と実行後、

$ bundle exec rake test

テストを実行すると、正常にテストを行うことができました。

3.3.2 Red
3.3.3 Green
特に詰まるポイントはありませんでした。

3.3.4 リファクタリング
説明のみなので特にありません。

3.4 少しだけ動的なページ
ようやく動的な要素が出てきましたね。
ここでの内容について、特に躓くポイントはありませんでしたが、実際にコードを書いた結果がわかりやすく反映される様は、僅かではあったとしても楽しくなってきます。

3.5 最後に

$ git add -A
$ git commit -m "Finish static pages"

$ git checkout master
$ git merge static-pages

までは実行しましたが、それ以降は実行していません。

3.5.1 本章のまとめ
説明のみなので特にありません。

3.6 演習
特に問題なくできました。
回答は本記事には掲載しません。

3.7 高度なセットアップ

3.7.1 minitestレポーター
特に詰まるポイントはありませんでした。

3.7.2 Backtrace silencer
私はクラウドIDEを使用していませんので、スキップしました。

3.7.3 Guardによるテストの自動化
3.3.1 最初のテストで問題となったguardについて記載があります。
こちらでリスト3.2においてguard gem をアプリ内に取り込み済みである、という記載がありますがリスト3.2の状態で

$ bundle exec guard init

とすることで動かすことができるとあるのですが、guard gemはリスト3.2にはありませんので、下記のエラーになります。

`block in replace_gem': guard is not part of the bundle. Add it to Gemfile. (Gem::LoadError)

ですので上記3.3.1の箇所で指摘した通り、guardを追加しておきましょう。


次回、「Ruby on Rails チュートリアル をやってみた その4 - IxD's blog」は

railstutorial.jp

をやっていきます。