マイグレーション
スキーマを進化させます。
「マイグレーション」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
マイグレーションとは
マイグレーションは、テーブルの作成やカラムの追加など、データベーススキーマへの変更を記述するバージョン管理されたRubyファイルです。
- マイグレーションはコードなので、バージョン管理システムで管理します。
- チームの全員が同じ変更を同じ順序で適用します。
- データベースを手動で編集することはありません。
マイグレーションを生成する
Railsはマイグレーションファイルを生成してくれます。たとえばrails generate migration CreateUsersを実行すると、db/migrate/にタイムスタンプ付きのファイルが作成されます。タイムスタンプによって、マイグレーションを実行する順序が決まります。
テーブルを作成する
マイグレーションではchangeメソッドを定義します。create_tableでテーブルを作成し、t.timestampsでcreated_atとupdated_atを自動的に追加します。
class CreateUsers < ActiveRecord::Migration[7.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
endカラムの型
一般的なカラムの型は、データベースの型に対応します。
stringは短いテキストです。textは長いテキストです。integer、float、decimalは数値です。booleanはtrue/falseです。datetime、dateは日時の値です。
create_table :products do |t|
t.string :title
t.text :description
t.decimal :price
t.boolean :active
t.timestamps
endマイグレーションを実行する
rails db:migrateは、保留中のすべてのマイグレーションを適用し、schema.rbを更新します。Railsは実行済みのマイグレーションをschema_migrationsテーブルに記録するため、それぞれのマイグレーションは1回だけ実行されます。
カラムを追加する
既存のテーブルを拡張するには、マイグレーションを生成してadd_columnを使用します。テーブル、カラム名、型、オプションを指定します。
class AddAgeToUsers < ActiveRecord::Migration[7.1]
def change
add_column :users, :age, :integer, default: 0
end
endロールバックする
rails db:rollbackは、直前のマイグレーションを取り消します。add_columnやcreate_tableのように操作を元に戻せる場合、Railsはchangeメソッドを自動的に逆方向へ適用します。
元に戻せない変更
生のSQLの実行や、データが入ったカラムの削除など、自動的に元に戻せない操作もあります。その場合はupメソッドとdownメソッドを明示的に定義し、Railsが変更を取り消す方法を把握できるようにします。
class ChangeData < ActiveRecord::Migration[7.1]
def up
execute "UPDATE users SET active = TRUE"
end
def down
execute "UPDATE users SET active = FALSE"
end
endインデックス
外部キーやログインに使用するメールアドレスなど、頻繁に検索するカラムにインデックスを追加すると、検索を高速化できます。unique: trueを使用すると、データベースレベルでも一意性を強制できます。
class AddIndexToUsersEmail < ActiveRecord::Migration[7.1]
def change
add_index :users, :email, unique: true
end
endマイグレーションとschema.rb
マイグレーションは変更の履歴であり、schema.rbは現在のスナップショットです。新しい開発者はrails db:schema:loadを実行すれば、すべてのマイグレーションを順に実行する代わりに、スナップショットからデータベースをすぐに構築できます。
ベストプラクティス
安全なマイグレーションを維持します。
- 共有環境で実行済みのマイグレーションは編集せず、新しいマイグレーションを作成します。
- 各マイグレーションの対象を1つの変更に絞ります。
- 整合性を保つため、データベースレベルの制約(null: false、インデックス)を追加します。
理解度チェック
マイグレーションについての理解度を確認します。
まとめ:マイグレーション
スキーマを安全に発展させる方法を学びました。
- マイグレーションは、バージョン管理されコミットされたスキーマ変更です。
create_table、add_column、add_indexでテーブルを構成します。db:migrateで適用し、db:rollbackで元に戻します。- 元に戻せない変更には
up/downを使用します。 schema.rbは現在のスナップショットです。
次は、関連付けでモデル同士をつなぎます。
よくある質問
「マイグレーション」レッスンは無料ですか?
はい。「マイグレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「マイグレーション」で何を学びますか?
スキーマを進化させます。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「マイグレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Active Record の基礎
- マイグレーション
- 関連付け
- バリデーションとクエリ