Ruby

【Ruby】コンポジションと委譲の関係

コンポジションと委譲は、どちらも『あるオブジェクトが別のオブジェクトの機能を使う』という文脈で登場するため、混同しやすい概念です。しかし、この2つは同じ意味ではありません。本記事では、この両者の関係性について説明します。 コンポジション コ...
Ruby

【Ruby】移譲(Delegation)とは?

はじめに あるオブジェクトが受け取ったメソッド呼び出しを、別のオブジェクトに丸投げする仕組みを移譲(Delegation)と呼びます。 移譲の基礎 UserクラスがProfileクラスを持ち、Profileのnameを取得するケースを考えま...
Ruby

【Ruby】ポリモーフィズムとは?〜継承とダックタイピング〜

はじめに この記事では、オブジェクト指向の基本である ポリモーフィズム(多態性) を継承とダックタイピングの方法で説明し、それぞれの考え方の違いにも触れていきます。 ポリモーフィズムとは? ポリモーフィズムとは、異なるクラスのオブジェクトが...
Ruby on Rails

【Rails】polymorphic(ポリモーフィック)って何?使い方は?

Railsで開発していると、polymorphic(ポリモーフィック)関連という言葉を目にすることがあります。 ただ、実際に使ったことがなかったり、なんとなくで理解しているという方も多いのではないでしょうか? この記事では、そんな方向けに ...
Ruby on Rails

【Rails】joins・preload・eager_load・includesの違いと使い分け

RailsのActiveRecordで関連データを扱いたいとき、joins や includes など、いろいろなメソッドがありますよね。 でも、どう使い分けたらいいのかよく分からない…と疑問に思う方も多いのではないでしょうか。 この記事で...
SQL

【SQL】INNER/LEFT/RIGHT/FULL/CROSS JOINの違いと具体例

はじめに SQLの INNER JOIN、LEFT JOIN、RIGHT JOIN……「何がどう違うの?」と聞かれるとちょっと不安。この記事では、自分の頭の中を整理するために、JOINの基本的な種類と違いを簡単な例と一緒にまとめてみました。...
Git

【Git】git mv後に履歴が追えない原因と対策

はじめに ファイルのリネームや移動をするとき、みなさんは git mv コマンドを使っていますか? git mv old_file.rb new_file.rb git mv は、単にリネームや移動するだけでなく、その操作をGitの履歴とし...
MySQL

EXPLAINで意図したインデックスが使われなかったときにRailsで USE INDEX を指定する方法

はじめに MySQLでクエリのパフォーマンスを調査する際にまず行うのが EXPLAIN による実行計画の確認です。しかし、インデックスを張っているにもかかわらず、意図したインデックスが使われていないというケースがあります。この記事では、そう...
Git

【Git】派生元ブランチを変更したいときの git rebase –onto

Git を使っていると、ブランチを間違ったところから切ってしまうことがあります。 「本当は feature-A から feature-B を切るつもりだったのに、間違えて main から feature-B を切って作業してしまった…」 そ...
Ruby on Rails

【Rails】カラムのデフォルト値変更時にロールバックが失敗する原因と対策

Railsでは change_column_default を使うことで、カラムのデフォルト値を変更することができます。ただし、マイグレーションを記述する際に少し注意が必要な点があります。それはロールバック時の挙動です。 今回は、実際の書き...