#第3章 ほぼ静的なページの作成
テストをやるよってのがメインな気がした章。
何気にコラムやちょっとした解説にほほーってなった。
###herokuの仕様?
RailsのデフォルトのページはHeroku上ではうまく表示されない仕様になっています。
###ブランチ習慣
Gitを使う場合は、masterブランチでずっと作業するのではなく、その都度トピックブランチを作成して作業するのがよい習慣です。Gitでバージョン管理を行っているのであれば、次のコマンドを実行して、静的なページ用のトピックブランチをチェックアウトしましょう。
ブランチ(static-pages)切った後の最初のプッシュの流れ
$ git add -A
$ git commit -m "Add a Static Pages controller"
$ git push -u origin static-pages
以降はpushでOK
###Railsコマンドの短縮形
完全なコマンド | 短縮形 |
---|---|
$ rails server | $ rails s |
$ rails console | $ rails c |
$ rails generate | $ rails g |
$ rails test | $ rails t |
$ bundle install | $ bundle |
###Railsはキャメルケース好き?
コントローラ名をキャメルケース (単語の頭文字を大文字にしてつなぎ合わせた名前) で渡していることに注目してください。こうすると、StaticPagesコントローラ名をスネークケース (単語間にアンダースコアを加えて繋ぎ合わせた名前) にしたファイルstatic_pages_controller.rbを自動的に生成します。ただし、上のような命名は単なる慣習に過ぎません。
実際、コマンドライン上で次のようなスネークケースのコントローラ名を入力しても、
$ rails generate controller static_pages ...
先ほどと同様にstatic_pages_controller.rbというコントローラが生成されます。これは、Rubyがクラス名にキャメルケースを使う慣習があり (詳細は4.4で説明します)、また、キャメルケースの名前を使うことが好まれているためです。これらの慣習に必ず従わなければいけないということではありません。
###rails destroy
Railsはコントローラ以外にも関連ファイルを大量に生成するので、生成されたコントローラファイルを削除するだけでは元に戻りません。自動生成されたコードを元に戻すためには、新規作成されたファイルを削除するだけではなく、既存のファイルに挿入されたコードも削除する必要があります (実際、2.2や2.3でも説明したように、rails generateを実行するとルーティングのroutes.rbファイルも自動的に変更されるので、これも元に戻さなくてはなりません)。このようなときは、「generate」という言葉に因んで、rails destroyというコマンドを実行することで元に戻すことができます。
マイグレーションの変更を元に戻す方法も用意されています。
元に戻したいときは、db:rollbackで1つ前の状態に戻します。
$ rails db:rollback
最初の状態に戻したいときは、VERSION=0オプションを使います。
$ rails db:migrate VERSION=0
頻繁に触ってたら必要に駆られて勝手に覚えるんでしょうけど、この辺は忘れやすい。
###テストについて
何らかの変更を行う際には、常に「自動化テスト」を作成して、機能が正しく実装されたことを確認する習慣をぜひ身に付けましょう。アプリケーションを開発しながらテストスイート (Test Suite) をみっちり作成しておけば、いざというときのセーフティネットにもなり、それ自体がアプリケーションのソースコードの「実行可能なドキュメント」にもなります。テストを作成するということは、その分コードを余分に書くことになりますが、正しく行えば、むしろテストがないときよりも確実に開発速度がアップします。テストが揃っていれば、バグを追うために余分な時間を使わずに済むためです。
本書における主要なテストは、コントローラテスト (この節より)、モデルテスト (第6章より)、統合テスト (第7章より) の3つです。統合テストでは、ユーザーがWebブラウザでアプリケーションとやりとりする操作をシミュレートできるので特に強力です。
3.3.1のテストで変なエラーが出るっぽい
$ sudo yum install -y tmux
でtmux入れたりdb:migrateしたら消えるっぽい。
test失敗時の出力が正常じゃない。minitestが最新だとそうなるっぽいのでgem 'minitest', '~> 5.10.1'をgemfileに追記。
Ruby on Rails チュートリアル3章のテストのバグとその対応メモ
あとGuardの設定はパスした。バグがあるとのことだし、使わない気がするので。