Ruby on Rails

RailsでCORSを設定

CORS RailsでCORSを設定する CORS CORSは、別のオリジンからのリクエストを許可するかどうかを決める仕組みです。 utouto97.hatenablog.com RailsでCORSを設定する RailsでCORSの設定をします。 RailsでAPIサーバーを構築したときに、別のオリジンからのリソ…

RailsでMongoDBを使う

Mongoid 実際に試してみる Mongoidのインストール RailsでMongoidを使う Mongoidのモデルの使用例 Mongoid RailsでMongoDBを使うには、Mongoidを利用します。 Mongoidは、RubyのMongoDB用ORMです。 RailsでRDBを利用する場合、Active Recordが広く使われてい…

システムスペック (System Spec) - RSpec

システムスペック Capybara システムスペック RSpecには、システムスペック (System Spec) というテストがあります。 システムスペックでは、複数のモデルやコントローラーを統合してテストします。 APIの呼び出しであったり、あるURLにアクセスしたときに返…

rspec-railsでモデルをテストしてみる

Railsでモデル作成 モデルをテストしてみる Railsでモデル作成 Railsでモデルを作成します。 $ rails g model User name:string これで、モデルを作成できました。 次のようなログがでました。 Running via Spring preloader in process 83 invoke active_re…

RailsでRSpecを使う

RailsでRSpecを利用する rspec-railsのインストール rspecの初期設定 ディレクトリ構成 RailsでRSpecを利用する RSpecには、rspec-railsというRails用のGemがあります。 これを使うことで、RailsもRSpecでテストできます。 rspec-railsのインストール rspec-…

RSpecのMatcher基礎

前回RSpecを使ってみました。 utouto97.hatenablog.com その中で、eq を使いました。 RSpecには、eq以外にも多くのMatcherが用意されています。 基本的なMatcherの使用例 a = b aとbが等しい a ≠ b aとbが等しくない a < b aがbより小さい a >= b aがb以上 a…

RSpecを使ってみる

Rubyテスティングフレームワークで人気の高いRSpecを使ってみます。 RSpecのインストール テスト対象のクラス RSpecでテストしてみる テストの記述 テストの実行 テスト失敗 RSpecのインストール RSpecを使ってテストしてみたいと思います。 まず、第一歩と…

Ruby用テスティングフレームワーク

Ruby用テスティングフレームワーク RSpec Ruby用テスティングフレームワーク テストをRubyで書きたい、となったときに利用するフレームワークとしてどのような選択肢があるのでしょうか。 Ruby用ユニットテストのフレームワークです。 Test::Unit Rubyに標準…

ユニットテスト・インテグレーションテスト

開発において、テストでは正常に動作するかの確認をします。 テストについて、特にユニットテスト・インテグレーションテストについて簡単にまとめます。 ユニットテスト インテグレーションテスト まとめ ユニットテスト ユニットテスト(単体テスト)は、…

Railsのtransactionを試す

utouto97.hatenablog.com 準備 同名のユーザーを追加してみる ApplicationRecord.transactionを試す 準備 以下のようなUserモデルを作成します。 validatesで:nameがユニークであることを確認します。 class User < ApplicationRecord validates :name, uniq…

トランザクション

トランザクションとは Railsでトランザクション トランザクションとは トランザクションは処理のまとまりです。 銀行の振り込みがトランザクションの例としてよく挙げられると思うので、ここでも銀行振り込みを例にします。 AさんからBさんの口座への振り込…

RailsでN+1問題を検出する - Bullet

RailsでN+1問題を検出するBullet Bulletを実際使ってみる (Rails) N+1問題を発生させる (TodoとUser) Bulletをインストール N+1を検出するとアラート発生 RailsでN+1問題を検出するBullet N+1問題とその解消方法について、以前まとめました。 そんなN+1問題…

N+1問題 解消方法 (Rails)

対象のN+1問題 N+1問題を解消する 対象のN+1問題 前回、触れたN+1問題を今回は解消します。 utouto97.hatenablog.com ↓で起こっているN+1が対象です。 <% @todos.each do |todo| %> <div> <%= todo.title %> : <%= todo.user.name %> </div> <% end %> N+1問題を解消す…

N+1問題

前回、ORMについてまとめました。 SQLを書かなくてもDB操作を簡単にできて便利なORMですが、 N+1問題という問題があります。 N+1問題とは RailsでN+1問題を試す N+1を確認する N+1問題とは N+1問題とは、ループ処理の中で、1回ずつクエリを発行してしまう問…

ORMとはなんぞや

ORM (オブジェクト関係マッピング) とは 各言語の有名ORM ORM (オブジェクト関係マッピング) とは ORMとは、Object-Relational Mappingの頭文字をとったものです。 その名前からわかる通り、オブジェクトと関係(関係データベース、RDB)とのマッピングを行…

rakeを使う 続き

↓の続き utouto97.hatenablog.com 試してみる デフォルトタスク ネームスペース cleanタスク 試してみる デフォルトタスク task default:を設定することで、デフォルトで実行されるタスクを設定することができます。 デフォルトタスクは、rakeコマンドが引数…

rakeを使う

Rakefile 試してみる 実行環境 シンプルなタスク 依存のあるタスク 引数をとるタスク Rakefile rubyのmakeがrakeです。 そして、ruby版のMakefileがRakefileとなります。 このRakefileには、Rubyを使ってタスクを記述し、rakeコマンドから実行することが可能…

idをランダムな文字列にする

はじめに SecureRandom uuid hex base64 Railsでidをランダムな文字列にする はじめに Railsを使っているとデータのidは、デフォルトでは整数の連番になります。 この場合、URLにパラメータとしてidを含む場合 (例えば、https://hostname/api/v1/article/123…

railsコマンドとrakeコマンド

Rails のこと調べてたら、よくrakeコマンドなるものが使われていました。 しかも、rakeコマンド使うように書かれているところも、railsコマンドでできてしまいます。 この二つのコマンド、何なんだろうと思い調べてみました。 まず、railsコマンドですが、こ…

Rails で ToDo アプリをつくる⑨ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること Herokuアプリを作成 Postgresの追加 アプリをデプロイする 今回やること ここまで作ってきたToDoアプリをHerokuにデプロイします。 Herokuはクレジットカードを登録すると、フリープランでずっと無料で使うこ…

Rails で ToDo アプリをつくる(Rails 入門)目次

Railsの練習として、ToDoアプリを作って記事にしたので、その目次を作っておきます。 ソースコード github.com アプリ https://rails-todo--app.herokuapp.com/ 目次 ① どんなToDoアプリを作るか & 環境構築 utouto97.hatenablog.com ② ToDo一覧を表示する (…

Rails で ToDo アプリをつくる⑧ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること フィルタリング機能の追加 今回やること 今回はフィルタリング機能を追加します。 ToDoの状態 (status) によってフィルタリングします。 すべて表示、In progressのみ、Completeのみ、の3パターンを実装します…

Rails で ToDo アプリをつくる⑦ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること 編集用フォームの準備 編集用アクションの追加 今回やること 今回は、CRUDのU (Update) として、ToDoの内容の編集を実装していきます。 あらかじめ用意していたEditボタンに機能を実装していきます。 編集用フ…

Rails で ToDo アプリをつくる⑥ (Rails 入門)

↓の続き utouto97.hatenablog.com Rails ストロングパラメータ require と permit ToDoアプリのソースコード変更 Rails ストロングパラメータ Rails には、ストロングパラメータというものがあります。 ストロングパラメータとは、安全性が検証されたパラメ…

Rails で ToDo アプリをつくる⑤ (Rails 入門)

↓の続きです。 utouto97.hatenablog.com 今回やること ルーティングの設定 コントローラーのアクション追加 ボタンの追加(ビューの編集) 今回やること 今回は、CRUD の U をやっていきます。 ただし、ToDoの編集ではなく、ToDoの状態(status)を変更でき…

Rails で ToDo アプリをつくる④ (Rails 入門)

↓の続きです。 utouto97.hatenablog.com 今回やること ルーティングの設定 コントローラーのアクション追加 ボタンの変更 今回やること 今回は CRUD の D (Delete) を実装していきます。 つまり、ToDoの削除ということになります。 ルーティングの設定 まず…

Rails で ToDo アプリをつくる③ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること フォームの作成 ルーティングの設定 コントローラーのアクション追加 バリデーション 今回やること 今回は、CRUD の C (Create) をやっていきます。 つまり、ToDo の新規作成をできるようにします。 フォーム…

Rails で ToDo アプリをつくる② (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること トップページを作成する コントローラーの作成 ルーティングの設定 ビューファイルの作成 ToDo モデルの作成 & テストデータ追加 ToDo 一覧を表示 コントローラーでデータ取得 ビューでTodo一覧表示 今回やる…

Rails で ToDo アプリをつくる① (Rails 入門)

Rails での開発の練習のために、数回にわたって、ToDo アプリをつくっていきたいと思います。 つくるもの 開発環境 環境構築 つくるもの ToDo アプリ CRUD を行う Create (ToDo作成) Read (ToDo一覧) Update (ToDo編集と完了処理) Delete (ToDo削除)…

docker-compose + Rails + PostgreSQL で環境構築する

docker-compose を使って、Rails + PostgreSQL の開発環境を構築していきます。 用意するもの Dockerfile docker-compose.yml Gemfile Rails のインストール Rails のプロジェクト作成 database.yml の設定 Rails サーバー起動 用意するもの Dockerfile FROM…