Rails Tutorial意図せず2週目(第5章 レイアウトを作成する)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

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

本章では、header, footer,logo, body等をコンテンツレイアウトを切り出して別ファイルに定義することができるため、別ファイルにマークアップファイルを切り出しました。
また、今回はCSSを使ってデザイン調整を行いました。その中でBoostsrapフレームワークを利用してデザインを楽に良い形にすることができました。
そして、CSSですが、SCSSというCSSの冗長な部分を圧縮した新しい概念を利用することで楽にデザインを当てることを知りました。
最終的にはこれらのデザインや別ファイルに切り出したマークアップファイルに対して統合テストを書いてテスト実施をすることでページ間の遷移をシミュレートしてテストすることも行いました。

以下1周目はスルーしていた概念やコマンドの意味を調べる

アセットディレクト

名前の通りアセット(資産 / js,css,img等)を保持するディレクトリです。しかしながら、Railsでのアセットの保持の仕方やディレクトリについてわからなかったので調べてみました。


以下、Rails Tutorial 第5章 レイアウトを作成するから引用。

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

また、アセットパイプラインについてはRailsガイドv7にもドンピシャの記事があったので貼っておきます。

railsguides.jp

【結論】

  • アセットディレクトリは、その名前の通り資産となるjs, css, img 等を保持するディレクトリです。
  • これについてRailsガイドに1章分のサポートがある程度には重要であることがわかりました。
マニフェストファイル

どのアセットを取り込んでサポートするか指定するのに使用するのがマニフェストファイルです。しかしながら、それが何をしているのかわからなかったので調べてみました。


以下Railsガイド v7 アセットパイプライン 2.4マニフェストファイルとディレクティブ引用。

  • マニフェストファイルにはディレクティブ (directive: 命令、指示)を記述します。必要なファイルをディレクティブで指定し、それに基いて最終的に単一のCSSJavaScriptファイルがビルドされます。
  • Sprocketsはディレクティブで指定されたファイルを読み込み、必要に応じて処理を行い、連結して単一のファイルを生成し、圧縮します。
  • マニフェストファイルは必要に応じていくつでも使えます。

【結論】

  • マニフェストファイルには読み込みたいファイルを書くことでそれを圧縮して単一のファイルにすることができる。
  • マニフェストファイルは複数作成することができるため、必要に応じて複数のマニフェストファイルを作り、様々なアセットを圧縮生成することが可能。
プリプロセス

プリプロセスは名前の通り、プリ(事前)のプロセス(準備・手続き)です。しかしながら、アセットに関してどのような事前準備をしているのかわからなかったので調べてみました。


以下、Railsガイド v7 アセットパイプライン 2.5 プリプロセスから引用。

  • 適用されるプリプロセスの種類は、アセットファイルの拡張子によって決まります。
  • コントローラやscaffoldをデフォルトのgemセットで生成した場合、通常のCSSファイルが置かれる場所にSCSSファイルが生成されます。

  • アセットファイル名の拡張子は、「右から左」の順に処理されます。つまりアセットファイル名の拡張子は、これに沿って処理の必要な順序で与える必要があります。


【結論】

  • Railsにおけるプリプロセスはアセットファイルの拡張子によって種類があり、CSSの場合はSCSSファイルを生成します。

  • 拡張子を一番右から左の拡張子へ順番に読みながら、ファイル生成処理を行います。

minitestのテスト内容 Railsのテスト内容

第5章から本格的にテストを記載するようになったため、テストで確認することが増えました。しかしながら、理解が追いついていないため、わからない所を一つ一つ切り出して調べてみました。

  • assert_template

    • 調べた所、minitestの機能ではなくRailsの機能のようでした。1
    • できることは以降に設定したURLにページが存在するかを確認するものということです。
  • assert_select


以下、Railsガイドv7 Rails テスティングガイド 2.3 RailsとMinitestの出会いの引用です。

  • ArticleTestクラスはActiveSupport::TestCaseを継承することによって、テストケース(test case)を1つ定義しています。

  • これにより、ActiveSupport::TestCaseのすべてのメソッドをArticleTestで利用できます。これらのメソッドのいくつかについては後述します。

  • ActiveSupport::TestCaseのスーパークラスはMinitest::Testです


【結論】

  • minitestの機能だと思っていて書いていたテスト内容が、実はRailsのテスト機能だったということが判明しました。
  • ソースコードをよく見たらminitestを継承していないのでわかるはずだが、特に何も考えずコピペしていたら気がつかなかった可能性がありました。
  • 上記のRailsガイドをよく読むと、Railのテストで利用する「ArticleTest」は「ActiveSupport::TestCase」を継承し、その継承元は「Minitest::Test」で結局minitestの派生でRailsのテストを書いていることを改めて確認しました。

  1. minitest 公式ドキュメントを読んでみても出てこなかったのと、他のブログではRailsの機能として扱っている所からそのように理解しました。