0Pricing
Ruby Academy · レッスン

マイグレーション

スキーマを進化させます。

「マイグレーション」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Active Record の基礎
  2. マイグレーション
  3. 関連付け
  4. バリデーションとクエリ
← Ruby Academyに戻る