見習いエンジニア(仮)の学び場

未経験からエンジニア転職を目指す男が、プログラミング学習で学んだことを分かりやすくアウトプットするためのブログです。

テストコードで使われる「FactoryBot」って何?

FactoryBotとは、インスタンスをまとめておくことができるgem(プログラムの集合体)のことです。

主にテストコードにおいて、テスト用のユーザー情報などを作成したいときに使用されます。

 

例えば、正常系のテストで「ユーザーが新規登録できるか」をテストするとします。

このテストを実行するために、架空のユーザーを作る必要があることは何となくわかると思います。

 

ただ、この時の問題点が「テストコードの記述が長くなってしまうこと」です。

「ユーザーの名前は〜〜さんで、登録に必要なemailは〜〜で、パスワードは〜〜」と毎回記述をするのは時間もかかりますし、コードも読みづらくなってしまいます。

 

 

そこで活躍するものがFactoryBotです。

FactoryBotは、ユーザー情報の雛形を1つのファイルに記述しておけば、別のファイルにあるテストコード内でも簡単にユーザー情報を生成することができます。

 

つまり、コードが長くなったり複雑になってしまうことを防いでくれるのです。

 

この時生成されたユーザー情報のことを、インスタンスと呼びます。

ただし、生成されたインスタンスは、そのままでは使用することができません。

FactoryBotから生成されたインスタンスは、FactoryBot.build(インスタンス名)とテストコード内で記述することで、はじめて使用することができます。

 

 

ここまでの流れを例えるなら、FactoryBotはニワトリです。

FactoryBotニワトリは、インスタンスという卵をポンポンと生み出してくれます。

そしてそのインスタンスは、FactoryBot.build(インスタンス名)と記述をすることで孵化し、各テストコードで使用することができるイメージになります。

 

 

ここまでで、FactoryBotのメリットや役割について解説しました。

ちなみに、FactoryBotはfaker(フェイカー)というgemとセットで使用されることが多いです。

fakerには、FactoryBotで生成するインスタンスにランダムな値をつける役割があります。

先ほどのユーザー情報であれば、名前やメールアドレスなどのスペースを用意するのがFactoryBotで、用意されたスペースの中に「名前=太郎さん」「メールアドレス=〇〇@gmail.com」といった具体的な情報をランダムに用意してれるのがfakerになります。

 

 

今日紹介したFactoryBotやFakerは、テストコードを記述する際に必要な知識だと思うので、ぜひ押さえておきましょう。

Railsで使われる「ビュー」ってどういう役割なの?

ビューとは、私たちが見ているスマホやPCの画面を用意してくれる機能のことです。

 

アプリケーションは、幾つものページで成り立っています。

例えば、Twitterであれば、「タイムライン」「ツイートの詳細」「マイページ」といったページがありますよね。

そして、もしタイムラインを表示させたいときは、アプリの左下にあるアイコンを押せば、すぐに表示させることができます。

この時に、表示されたタイムラインの画面を用意してくれているのが「ビュー」です。

 

ビューは画面を用意するだけなので、単体では私たちに返すことはできません。

実際に画面を返してくれているのは、サーバー内の「コントローラー」という機能です。

 

ビューはこのコントローラーから「ユーザーからリクエストのあったこの画面を用意してください!」という指示を受け、用意していた画面をコントローラーに渡し、コントローラーが表示させる画面を私たちに返してくれる流れになっています。

 

 

ここまでで、ビューの役割について説明してきました。

 

では具体的に、ビューはどのようにして画面を用意しているのでしょうか?

 

ビューの中には、ERBファイルというファイルがあります。

ERBファイルとは、ブラウザ画面の表示に使うHTMLに、アプリ内のデータを扱えるRubyを埋め込んだファイルのことです。

このファイルは、〇〇.html.erbとタイトルをつけます。〇〇の中にはユーザーからのリクエストを処理する方法であるアクション名が入ります。

 

こうして作成したERBファイルの中に、ユーザーからのリクエストに必要な画面を出すための情報を記述していきます。

 

 

では、具体的にどのように記述するのでしょうか?

 

 

この場面で役立つのが、インスタンス変数です。

 

インスタンス変数については、詳しい説明は長くなるので割愛しますが、今回はコントローラーで受け取ったユーザーの固有の情報を、ビュー内で使用するための記述なんだと思ってもらえれば大丈夫です。

 

コントローラーのアクション内で定義したインスタンス変数は、対応するビューファイル内でも使用することができるので、その仕組みを利用してビューは私たちが見ている画面を作ってくれているのです。

 

流れとしては

①コントローラー内でindexアクションのメソッド内で、インスタンス変数を定義する。

②そのインスタンス変数は、index.html.erbファイル内で使用ができる。

といったイメージです。

 

 

、、すみません、後半すごく分かりづらかったですよね笑

MVC初見の方は、「ビューはアプリケーションの見た目を作っている機能なんだ」と理解してもらえれば今回は大丈夫です!

Railsで使われる「モデル」ってどういう意味?

モデルとは、テーブルの管理人のことです。

 

テーブルは、アプリケーションの中のデータをカテゴリーごとに分けたものです。

例えば、Twitterというアプリには、「ユーザー情報」「ツイート内容」「リプライ」といった複数のデータのカテゴリーが存在しますよね。

そのカテゴリー1つ1つのことをテーブルと呼んでいます。

 

テーブルは、ユーザーからのリクエストに応じて更新されたり、呼び出されたりしています。

この時にテーブルを動かしている人がモデルです。

 

モデルは、テーブル1つにつき1人存在しています。

各モデルは、自分が担当しているテーブルのデータが必要になったら、テーブルのデータを更新したり、コントローラーというユーザーに返信を返す役割の人に必要なデータを渡したりします。

 

ちなみに、モデル同士で手を組んで、それぞれが担当しているテーブルのデータを関連づけることもできます。

その関連付けのことをアソシエーションと呼び、1つの処理を実行するために2つ以上のテーブルのデータが必要な時に使用します。

 

また、テーブルにどのデータを入れるのかを記載している設計図のことをマイグレーションファイルと言います。

テーブルを新規作成するときは、このマイグレーションファイルを作成して、rails db:migrateというコマンドを実行する必要があります。

 

 

少し長くなりましたが、まとめるとこのようになります

 

モデル → テーブルのデータを動かす人。各テーブルに1人いる。

 

テーブル → データを分類分けした引き出しのようなもの。「このテーブルにはあのデータが入っている」と分かるように整理してある。

 

アソシエーション → 各テーブル同士のデータの関連付けを行うこと

 

マイグレーションファイル → テーブルにどのようなデータを入れるかを記述した設計図

 

 

Railsで使われる「コントローラー」ってどういう意味?

コントローラーとは、ユーザーから受け取ったリクエスト(要求)に対して適切な処理をし、ユーザーにレスポンス(返信)を返す機能のことです。

 

Rails(レイルズ)というフレームワークを用いたアプリ開発において使用されます。

 

ここで、アプリケーションの処理の流れについて簡単に説明します。

私たちが使っているアプリケーションは、以下の流れで動いています。

 

①ユーザーがスマホ上からリクエスト(要求)をアプリのサーバーに送る。

②サーバーは、そのリクエストに応えるために必要なサーバー内の処理の流れを決める(ルーティング)

③流れを決めたら、リクエストに対して適切な処理を実行する

④実行した処理をユーザーにレスポンス(返信)として返す。

 

この流れのうち、③と④の役割を担っているのがコントローラーです。

 

ではコントローラーは、どのようにしてリクエストに対して適切な処理を実行しているのでしょうか?

 

コントローラーの中には、アクションという処理のカテゴリーを記述しておくことができます。

 

リクエストに対してあらかじめ必要なアクションを用意しておくことで、コントローラーは適切な処理を実行することができます。

 

用意しておけるアクションには、主に下記の7つです。

 

index = 一覧ページを表示する

new = 新規投稿ページを表示する

create = データの投稿を行う

show = 詳細ページを表示する

edit = 投稿編集ページを表示する

update = データの編集を行う

destroy = データの削除を行う

 

例えば、ユーザーから「このツイートの詳細が見たい」というリクエストが送られた時には、コントローラー内に「show」アクションを用意しておくことで、ツイートの詳細を開く処理が実行できます。

 

ここまでで、コントローラーが処理を実行する流れについて説明しました。

 

最後に、実行した処理結果をユーザーに対して返してあげないといけません。

 

この処理結果を返すために、ビューの力を借ります。

ビューとは、ユーザーが見やすいような画面を用意するための機能です。

 

コントローラーは、このビューと連携して、処理結果をユーザーが見やすい情報に変え、レスポンスとして返しているのです。

 

今日紹介したコントローラーの7つのアクションは、アプリ開発の時に頻繁に使うのでぜひ覚えておきましょう。

 

 

アプリ作成で使われる「ルーティング」ってどういう意味?

ルーティングとは、ユーザーからのリクエストに対して、どのような処理をサーバー側で実行していくかという道筋を明らかにする仕組みです。

 

ここで前提知識として、アプリケーションの稼働する仕組みについて簡単に説明します。

 

普段私たちは、スマホ上でアプリケーションを操作することが多いはずです。

その操作を正確に言うと、私たちは画面上にあるアイコンや文字をクリックすることで、アプリケーションのサーバーにリクエスト(要求)を送っています。

そしてサーバーは、そのリクエストに対して適切な処理を行い、ユーザーにレスポンス(返信)をしています。

例えば、「topページに戻る」という文字をクリックしたら、そのリクエストをサーバーに送信し、サーバーがそれを受け取ってレスポンスを返すことで、topページに戻ることができます。

 

以上がアプリケーションの稼働する仕組みについての説明でした。

 

そしてこのリクエストには、ご存じの通り様々な種類があります。

ユーザーの多岐に渡るリクエストに全部応えるためには、そのリクエスト1つ1つに対する道筋を決めてあげる必要があります。

この道筋を決める役割を担うのが、冒頭でお伝えした「ルーティング」になるわけです。

 

では、ルーティングはどのように道筋を決めていくのでしょうか?

具体的には、「HTTPメソッド」と「パス」によって道筋を決めます。

 

HTTPメソッドとは、リクエストの種類のことです。

例えば、「TOPページに戻りたい」というリクエストであれば、HTTPメソッドは「(ページ情報を)取得する」の処理を意味するGETという種類になります。

HTTPメソッドで頻繁に登場するものは以下の4つです。

ルーティングにおいて必須の知識なので、ぜひ押さえておきましょう。

 

GET → 取得する

POST → 送信する

PUT → 更新する

DELETE → 削除する

 

続いて、パスとは処理の場所を示す文字列のことです。

Webページを開くと、必ずURLというページの場所を表している文字列がありますよね。

あの文字列の一部分を切り取ったものがパスです。

 

ルーティングは、リクエストの種類を示す「HTTPメソッド」と、場所を示す「パス」の2つを明記することで、その役割を果たすことができます。

MVCでよく使う「テーブル」って何?

テーブルとは、「データベース内で管理しているデータのグループ分け」のことです。

例えば、Twitterというアプリがあります。

Twitterは、「ユーザー」「ツイート」「コメント」といった様々な情報をデータベース内で管理しています。

このように、データベース内に保管しているデータを、「ユーザー情報」や「ツイート情報」などに分類することをテーブルと言います。

 

テーブルは、MVCの中だとモデルと密接にやり取りをします。

ちなみに、MVCとはアプリケーションを稼働させるための役割の総称です。

Model(モデル)、View(ビュー)、Controller(コントローラー)の頭文字をとったもので、モデルはテーブルなどのデータを管理する役割を持ちます。

 

このテーブルをデータベース内に作る時は、マイグレーションという処理をします。

マイグレーションをすることで、データベース内にテーブルが作られ、モデルとデータのやり取りができるようになります。

 

このような仕組みによって、ユーザーからの要求に対して適切なデータを送り返したり、新しいデータを登録したりして、アプリケーションは稼働しています。

レイアウトテンプレートとは?

レイアウトテンプレートとは、アプリケーション内の共通の記述をまとめたものです。

 

例えば、Webページのヘッダー(画面上部)は、どのページでも基本的には同じヘッダーが使われていると思います。

 

このヘッダーのような、全てのページにおいて共通して使用したい部分をまとめたものがレイアウトテンプレートです。

 

レイアウトテンプレートは、アプリケーションの見た目を整えるビューファイルに記述します。

具体的にどのファイルに記述するのかというと、railsの場合はapplication.html.erb(アプリケーション エイチティーエムエル イーアールビー)というファイルに記述します。

 

application.html.erbファイルは、app/views/layoutsディレクトに配置されています。

 

また、レイアウトテンプレートであるapplication.html.erbファイルには、yield(イールド)というメソッドが記述されています。

 

このyieldメソッドは、他のビューファイルの情報をレイアウトテンプレートに集約させる役割があります。