現場で使えるRuby on Rails 5
Specが失敗した時の調査手順 Specが失敗した時に、以下の手順でエラーの原因を特定します。 手順3に関しては、モデルが正常に動作しているかを確認したい時に実行します。 失敗場所とエラーメッセージを確認する。 失敗場所とエラーメッセージを手がかりに原…
詳細表示機能Specを追加する 前回の一覧表示機能に続いて、詳細表示機能のテストコードを追記します。 describe 'タスク管理機能', type: :system do let!(:task_a) { FactoryBot.create(:task, name: '最初のタスク'), user: user_a)} ...省略 describe '詳…
前回はユーザーAが作成したタスクがページに表示されていることを確認するテストを書きました。 今回はユーザーBがログインした際にユーザーAのタスクは表示されていないことを確認するテストを書いていきます。 require 'rails_helper' describe 'タスク管…
タスクの一覧表示機能のSystem Spec タスク一覧表示機能をテストする場合、以下のようなSystem Specを書きます。 ここではファクトリーに定義したテストユーザーをそのまま使わずに、"ユーザーA"を定義しています。今後、ユーザーBなど別のユーザーを扱う際…
Spec(テスト)の書き方 Rspecでは、以下の基本フォーマットに従ってSpec(テスト)を書きます。 # テスト対象 describe '〜機能', type: :system do # 条件下で想定する動作 context '〇〇の場合' do before do # テストコード実行前に実行する処理(前提条件)…
テストについて 動作を確認する方法として、一般的には以下の3パターンが挙げられます。 1. コンソールでメソッドを呼び出す 2. Webサーバ起動後に、ブラウザを操作して確認する 3. 自動テストを書く この章では3つ目の「自動テストを書く」について深ぼっ…
Reactとは Facebook社が開発しているJavaScriptのUIライブラリです。Reactは仮想DOMと呼ばれるデータ構造をメモリ上に持ち、ページ変化の差分のみをレンダリングすることで効率的にページを表示・更新する事ができるという特徴があります。 ※UIライブラリと…
Webpackerとは? JavaScriptのビルドツールである「Webpack」のラッパーで、Webpackを使ってJavaScriptを管理することを簡単にしてくれるGemです。 Railsアプリケーションを新規作成する時にWebpackerを導入する方法 rails new コマンドのオプション「--webpa…
先日の続き ※先日学んだJavaScriptのパッケージマネージャーであるyarnとnpmで、yarnはアウトプットしたので今回はnpmについて学んでいきます。yarnはnpmを改造して作られたものなので根幹は同じという認識です。 npmとは? npmは、Node.js 関連のパッケージ…
Turbolinksを無効化する Turbolinksには高速化できるというメリットがある反面、ブラウザのページ遷移が発生しないなどのデメリットもあります。そのため、Turbolinksの性質をよく調べてから、使うようにしましょう。 Turbolinksをよく知らない場合は、無効…
Turbolinksとは? 全てのリンクに対するページ遷移を自動的にAjax化する事で、ページ遷移を高速化する仕組みです。Turbolinks自体はJavaScriptのライブラリとして提供されていますが、Railsでは利用しやすいようにGemとしてrals newすることでデフォルトで組…
前回はクライアント側でイベントハンドラとして用意してあったJavaScriptコードを実行してタスクを非表示にしていましたが、今回はAjax通信をした後にAjaxのリクエストボディにJavaScriptコードを返却してそれをブラウザ側で実行するという方法で削除機能の…
ページが読み込まれてからJavaScriptを実行する方法 ページが読み込まれてからJavaScriptを実行する方法は、2種類存在します。Turbolinks機能を有効にしていない場合と、有効にしている場合です。以下に、Turbolinks機能を有効にしていない場合のコードを記…
非同期処理とは? 非同期処理とは、あるタスクが実行している際に同時にバックグラウンドで他のタスクを実行できる方式です。 例えば、処理が重く時間が掛かるタスクを非同期処理として裏で動作させ、ユーザーに見える処理では処理の受付だけを行わせること…
9/9朝会の続き 前回にモデルファイルで実装したimportメソッドを使用して CSVデータをインポート出来るボタンを実装していきます。 # app/controllers/tasks_controller.rb def import current_user.tasks.import(params[:file]) redirect_to tasks_url, not…
CSVデータをインポートする際に使われるメソッド Csv.foreach 1行ずつ処理をするため、行数が多いCSVファイルを扱う場合でもメモリ使用量を気にしないで使えます。 slice 引数で指定されたキーとその値だけを含む Hash を返します。 to_hash to_hashメソッド…
Active Storageとは何? Railsガイド(Active Storageの概要)には以下のように書かれています。 Active StorageとはAmazon S3、Google Cloud Storage、Microsoft Azure Storageなどの クラウドストレージサービスへのファイルのアップロードや、ファイルをAct…
Active Storageとは何? Railsガイド(Active Storageの概要)には以下のように書かれています。 Active StorageとはAmazon S3、Google Cloud Storage、Microsoft Azure Storageなどの クラウドストレージサービスへのファイルのアップロードや、ファイルをAct…
greater than or epual _gteqと略して書けます。 登録日時を指定検索した時に出力されたSQL SELECT DISTINCT "tasks".* FROM "tasks" WHERE "tasks"."user_id" = $1 AND "tasks"."created_at" >= '2018-07-19 15:00:00' ORDER BY "tasks"."created_at" DESC …
7-2-1 Ransackのインストール Ransackとは? 検索機能を作成できるGemのことです。簡単な検索や複雑な検索のフォームを簡単に作成することができます。Gemfile内に以下のように記述します。 gem 'ransack' ターミナルでbundle installを実行してインストール…
form要素内のsubmitボタン form要素内のsubmitボタンを押すと、以下の挙動が実行されます。 現場Rails P.289 form要素内のsubmitボタンが押されると、パラメータに、押されたボタンのname属性の値をキーとしてキャプションが格納されます。 例) f.submit '戻…
f.hidden_field f.hidden_fieldとは、画面に表示されないinputタグを生成するメソッドです。このinputタグには値が保持されています。既に決まった値をユーザーから見えない形で送信する際に使います。f.hidden_fieldの代表的な使用例は、確認画面のフォーム…
assets配下のファイルは動的ファイルとして扱われ、アセットパイプラインを通して静的なファイルへとコンパイルされ、publicディレクトリの配下に生成されます。 404や500のエラーページは、もともと静的ファイルとしてpublic配下に置かれています。アセット…
プリコンパイルとは Railsにおけるプリコンパイルとは、あらかじめアセットパイプラインを実行して静的ファイルを生成しておくことを指します。 プリコンパイルされたファイルはpublic/assetsディレクトリの配下に配置されます。 上記における、「静的ファイ…
探索パスについて マニフェストファイルがファイルを探しに行くためのパスを探索パスと言います。 マニフェストファイルはデフォルトで以下のパスを探しに行きます。 app/assets/* lib/assets/* vendor/assets/* 上記以外のパスを参照したい場合、config/ini…
アセットパイプラインとは、gem sprockets-railsを活用して、アセット(CSS, JavaScript, 画像etc)を効率的にまとめた上で、軽量化・高速化・変更反映化を実現してくれます。流れとしては以下の順で行います。 高級言語(CoffeeScript,ERB,Slimなど)のコンパイ…
Rubyコードインジェクション Rubyコードインジェクションとは、コードインジェクションのうちRubyのソースコードを対象とする攻撃のことを指します。 sendとevalってなに?? sendメソッドは、引数で渡された文字列のメソッドを呼び出して実行します。 しか…
インジェクション インジェクションとは、Webアプリケーションに悪意のあるスクリプトやパラメータを入力し、それが評価される時の権限で実行させる攻撃です。ユーザーがデータを入力するところは注意が必要です。 XXS(クロスサイトスクリプティング) SOLイ…
Railsの代表的なセキュリティ機能 StrongParameters CSRF対策 インジェクション対策 Strong Prametersとは 想定通りのパラメータかどうかをホワイトリスト方式(リストにないアプリケーションやプログラムは起動しないよう制限を設け、リストにあるアプリケー…
国際化とは何か 国際化とは、さまざまな国ごとに最適な表示を行えるように基盤を整える事である。 ↓ ざっくり言うと、国によって自動でサイト内の言語を変えるように基盤を整える事である。 日本語を扱う方法 config.i18n.default_locale = :jaを設定(config…