○この記事の要点
「第3章 ほぼ静的なページの作成」の途中まで実施内容メモ
思ったことなどのメモ
○第3章でやること
・HTMLファイルだけの静的なWebページの作成
・自動化テストの雰囲気掴み
・静的なページを少し動的にする
○内容
■セットアップ
(1)sample_appの作成
(2)Gemファイルの修正
(3)bundleのインストール。相変わらず bundle update の実行が必要
※test環境では、SQLiteを利用するGemの設定になっているらしい。
(SQLiteの方がインストール等が楽。本場のPostgreSQLと動きが変わらない。ことから)
(4)README.md のメンテ。他の人へのアプリ説明
(5)Bitbucket上にリポジトリを作成してpush
(6)Herokuサーバへのデプロイ
ここまでは新しい内容はない
■静的ページの作成
(1)StaticPagesコントローラの作成
rails generate controller StaticPages home help でコントローラファイルが作成される。
※ここまで実施しただけでは、Webページの閲覧はまだできない。後述するが、routes.rbに各ページのルーティング設定が必要。
○重要
・home, helpはアクション
・作成されたstatic_pages_controller.rbのhome,help定義は空だが、ApplicationControllerを継承しているので、特有の振る舞いをする
/static_pages/homeというURLにアクセスすると、RailsはStaticPagesコントローラを参照し、homeアクションに記述されているコードを実行し、アクションに対応するビューを出力する。
・コントローラ名をキャメルケースで渡すと、コントローラーファイル名が_でつなぎ合わせたものになる
(StaticPagesで渡すと、static_pages_controller.rb ができる
・config/routes.rb(コントローラ)の役割
get 'static_pages/home' ⇒ /static_pages/homeというURLに対するリクエストを、StaticPagesコントローラのhomeアクションと結びつけている
○メモ
・GET:最も頻繁に使われるHTTPリクエストで、主にWeb上のデータを読み取る (get) ときに使う
・POST:GETの次によく使用されるリクエストで、ページ上のフォームに入力した値を、ブラウザから送信する時に使う
■テスト
(1)test/controllers/static_pages_controller_test.rbに追加
test "should get about" do
get static_pages_about_url
assert_response :success
end
(2)rails test実行でエラー
$ rails test
3 tests, 2 assertions, 0 failures, 1 errors, 0 skips
NameError: undefined local variable or method `static_pages_about_url'
⇒config/routes.rbにaboutのルートを設定してエラーへ対応
(3)rails test実行でエラー
AbstractController::ActionNotFound:
The action 'about' could not be found for StaticPagesController
⇒app/controllers/static_pages_controller.rbにaboutの定義を設定してエラーへ対応
(4)rails test実行でエラー
ActionController::UnknownFormat: StaticPagesController#about
is missing a template for this request format and variant.
⇒app/views/static_pages/about.html.erbを作成してエラーへ対応
(5)rails test実行で正常終了
ここまで実施すればWebページの閲覧が可能。
○重要
・rails generate controllerした時点で、テストファイルが作成されている
test/controllers/static_pages_controller_test.rb
・作成されているテストコードの実行コマンド。
rails test
○メモ
・テスト駆動開発 (TDD)。3つのメリット
1.テストが揃っていれば、機能停止に陥るような回帰バグ (Regression Bug: 以前のバグが再発したり機能の追加/変更に副作用が生じたりすること) を防止できる。
2.テストが揃っていれば、コードを安全にリファクタリング (機能を変更せずにコードを改善すること) ができる。
3.テストコードは、アプリケーションコードから見ればクライアントとして動作するので、アプリケーションの設計やシステムの他の部分とのインターフェイスを決めるときにも役に立つ。
この章では、コントローラテスト、モデルテスト、統合テストを行う
・あえて失敗するテストを書く
テスト駆動開発⇒「失敗するテストを最初に書く」「次にアプリケーションのコードを書いて成功させる (パスさせる)」「必要ならリファクタリングする」の順に進む
■感想
・テストコード書くの楽しい。UnitTestの存在は知っていたけど、自身で作成するのが初めてでした。
・動作仕様が定まっていないとテストコードが書けないだろうな。と思った。
・この初めてのテスト体験と、自分でアプリ作成するのをかけ合わせて実施するのは非常に良い教材だな。アプリに何が足りないか。など理解しながら実施できる。
・多分この後実施するんだろうけど、ファイルに変更がある都度自動でテストコードが走るようになれば、異変にもすぐ気づけるだろうから良い。