Rails

RSpecのlet_it_be:test-profで高速化するDB生成の使い方

RSpecのlet_it_be:test-profで高速化するDB生成の使い方 # let! を let_it_be に変えるだけ let_it_be(:user) { create(:user) } # グループ全体で1回だけ生成(let!はitの数だけ生成) let! との違い:let! は各 it の前に毎回DBへINSERTします。let_it_be…

Rails FactoryBot入門:RSpecで使うテストデータの作り方まとめ

Rails FactoryBot入門:RSpecで使うテストデータの作り方まとめ RSpec でテストを書くとき、テストデータを都度 User.create(name: "...") で作るのは手間がかかります。FactoryBot を使うと、モデルのデフォルトデータを一箇所に定義して create(:user) の…

ActiveRecord N+1問題の解決:includes・preload・eager_loadまとめ

ActiveRecord N+1問題の解決:includes・preload・eager_loadまとめ N+1問題とは 関連を持つレコードをループで取得するとき、1回の一覧取得 + N件分の関連取得 = N+1回のSQLが発生する問題です。 posts = Post.all # SELECT * FROM posts (1回) posts.eac…

PostgreSQLチートシート:ログインからスキーマ確認・DMLまとめ

PostgreSQLチートシート:ログインからスキーマ確認・DMLまとめ はじめに PostgreSQLはRailsの本番環境で広く使われるデータベースです。psql コマンドを使うとDBに直接ログインしてテーブル構造の確認やデータの操作ができます。 この記事ではログインから…

Active Record入門:検索・更新・リレーションの基本まとめ

Active Record入門:検索・更新・リレーションの基本まとめ はじめに Active RecordはRailsのORMで、Rubyのコードでデータベースを操作できます。SQLを直接書かなくても User.where(name: "田中") のように書けば、対応するSQLが自動で発行されます。 この記…

MySQLチートシート:ログインからスキーマ確認・DMLまとめ

MySQLチートシート:ログインからスキーマ確認・DMLまとめ はじめに Railsの本番環境やステージング環境ではMySQLがよく使われます。mysql コマンドを使うとDBに直接ログインしてテーブル構造の確認やデータの操作ができます。 この記事ではログインから、ス…

SQLiteチートシート:ログインからスキーマ確認・DMLまとめ

SQLiteチートシート:ログインからスキーマ確認・DMLまとめ sqlite3 db/development.sqlite3 # ログイン sqlite> .tables # テーブル一覧 sqlite> .schema users # テーブル定義 sqlite> .headers on # ヘッダー表示 sqlite> .mode table # テーブル形式で見…

RSpecのletとlet!:遅延評価と即時評価の違いと使い分け

RSpecのletとlet!:遅延評価と即時評価の違いと使い分け はじめに RSpecで頻繁に使う let と let! は、どちらもテストデータを定義するためのヘルパーです。しかし評価のタイミングが異なり、使い方を間違えるとテストが意図通りに動かないことがあります。 …

RSpec入門:インストールからモデルスペックの書き方まで

RSpec入門:インストールからモデルスペックの書き方まで はじめに RSpecはRubyのテストフレームワークで、Railsプロジェクトで最もよく使われています。describe・context・itを使って「何をテストするか」を自然言語に近い形で書けるのが特徴です。 この記…

Rails開発コマンド早見表:bundle / rake / rails の使い分けまとめ

Rails開発コマンド早見表:bundle / rake / rails の使い分けまとめ はじめに Railsを開発していると bundle exec rake db:migrate、rails db:migrate、bin/rails など似たようなコマンドがたくさん出てきます。この記事ではそれぞれの使い分けと、よく使う…

Rake入門:Rakefileの書き方からRailsでのカスタムタスク作成まで

Rake入門:Rakefileの書き方からRailsでのカスタムタスク作成まで はじめに Rakeはタスクを定義して実行するためのRuby製ツールです。rake db:migrate や rake routes のようにRailsで日常的に使いますが、自分でタスクを定義してスクリプトを整理することも…

Bundler入門:Gemfile・bundle install・bundle execの使い方まとめ

Bundler入門:Gemfile・bundle install・bundle execの使い方まとめ はじめに RubyやRailsのプロジェクトでgemを管理するとき、bundle install や bundle exec を使うことになります。何となく使っているけど仕組みがよくわからない、という方向けにBundler…

RuboCop導入入門:インストールから設定・git commit時の自動実行まで

RuboCop導入入門:インストールから設定・git commit時の自動実行まで はじめに RuboCopはRubyのコードスタイルをチェックするlinterで、Rubyスタイルガイドに基づいてコードの問題を検出します。個人開発からチーム開発まで幅広く使われており、Railsプロジ…

RailsでOpenAPIを使ったコントローラー作成入門:Design-firstアプローチでGET・POST・PUT・DELETE対応

RailsでOpenAPIを使ったコントローラー作成入門:Design-firstアプローチでGET・POST・PUT・DELETE対応 はじめに Design-firstアプローチとは、実装の前にAPIの仕様(OpenAPI YAML)を先に定義し、その仕様に合わせてコントローラーを実装する方法です。 フ…

Rails binding.pry実践:コントローラー・モデル・テストでのデバッグ

Rails binding.pry実践:コントローラー・モデル・テストでのデバッグ はじめに binding.pry の基本的な使い方は「Rails binding.pry入門:セットアップと基本コマンドの使い方」で解説しています。 この記事ではコントローラー・モデル・RSpecでの実践的な…

Rails binding.pry入門:セットアップと基本コマンドの使い方

Rails binding.pry入門:セットアップと基本コマンドの使い方 はじめに Railsの開発中にコードが期待通り動かないとき、puts で変数を出力しながらデバッグするのは効率が悪いです。binding.pry を使えば、コードが実行されているその場所で一時停止して、変…

Rails のDB操作コマンド入門:db:create から db:migrate まで

Rails のDB操作コマンド入門:db:create から db:migrate まで はじめに Railsを使い始めると、データベース操作のコマンドが多くて混乱することがあります。 db:migrate と db:schema:load の違いがわからない db:reset と db:migrate:reset は何が違うの?…

RubyとRailsのバージョン確認方法:gem・bundler・rbenv・miseコマンド一覧

RubyとRailsのバージョン確認方法:gem・bundler・rbenv・miseコマンド一覧 はじめに Rubyプロジェクトを始めるとき、既存のプロジェクトに参加するとき、エラーが起きたとき、まず確認するのがRubyとRailsのバージョンです。 この記事では ruby、rails、gem…