Precena Tech Book
コーポレートサイト採用サイト
  • はじめに
  • ソフトウェア開発
    • 開発環境構築
      • Homebrew
        • Homebrew用語の意味
      • ngrok
        • ngrokの導入
        • ngrokのアップグレード(v2 to v3)
      • Slack
        • Slackの/remind コマンドの形式
        • 対面での相談を気軽にするためのSlack設定
      • AWS CLI
      • Ruby
      • Scala
      • Prettier
      • zsh
        • zsh-completion
      • Mac
        • M1 Macでの開発環境構築(rosetta 無し)
    • バックエンド
      • OpenAPI
        • OpenAPI 定義ファイル分割のすゝめ
      • Ruby on Rails
        • ActiveRecordのfind_or_initialize_byメソッドにブロックを渡したときの挙動
        • Railsのアプリケーションサーバーのプロセス数とスレッド数の設定方法
        • Railsを6.1系から7.0系へアップグレードした時に調査したこと
        • schema.rbで差分が発生する事例とその復旧について
        • tmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する
        • Rails Migrationチートシート
        • GithubのプライベートリポジトリをGemfileで参照する方法
        • ActiveSupportのto_jsonメソッドの注意点
        • 危険なJSON出力を禁止するRuboCopカスタムルールの作成方法
      • Scala
        • Validated を直列に処理したい
      • DB
        • PostgreSQLにおける、削除行に対するロック獲得時の挙動
    • フロントエンド
      • React
        • Storybookを利用したビジュアルリグレッションテスト
  • インフラ開発
    • AWS
      • IAM
        • スイッチロールの設定手順
        • AWS CLIでのスイッチロールの設定手順
        • AWS Vaultを使ったスイッチロール設定手順
        • Github ActionsでIAMロールを利用してAWSリソースを操作する
      • ECS
      • SES
        • AWS SESメールボックスシミュレーターにて、カスタムヘッダや添付ファイル付きのテストEメールを送信する
      • CloudWatch
        • Amazon SNS + Slack Workflowを使って、CloudWatch Alarmの通知をSlackチャンネルへ投稿する
      • Lambda
        • lambrollでAWS Lambda関数をデプロイしたときのTips
    • Heroku
      • HerokuのStackの設定
      • Heroku Postgresの運用でよく使うコマンド集
  • セキュリティ
    • Web
      • Same Origin PolicyとCORS
      • 脆弱性診断 2社同時依頼実施記録
  • Mail
    • SPF、DKIM、DMARCを使用した迷惑メール対策
  • データ分析
    • データ分析プロセス
  • SaaS
    • Zendesk
      • 問い合わせフォームの項目をサービスごとに出し分け、各サービス担当者に自動で振り分けてメールで通知する
  • イベント
    • RubyKaigi
      • RubyKaigi 2023 に現地参加しました
    • EMConf
      • EMConfJP2025_参加レポート
  • やってみた
    • IoT
      • Raspberry Pi + PaSoRi + Python で、勤怠打刻マシンを作ってみた
  • Precena Tech Book 管理
    • コンテンツ執筆時のルール
  • 関連リンク
    • プレセナエンジニア公式Twitter
GitBook提供
このページ内
  • よく使うパターン
  • 空のマイグレーションファイルを作成する
  • 特定の型のカラムを既存のテーブルに追加する
  • ときどき使うパターン
  • 既存のテーブルに、カラム名からは参照先を自動的に推定できない外部キーを追加する

役に立ちましたか?

PDFとしてエクスポート
  1. ソフトウェア開発
  2. バックエンド
  3. Ruby on Rails

Rails Migrationチートシート

前へtmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する次へGithubのプライベートリポジトリをGemfileで参照する方法

最終更新 2 年前

役に立ちましたか?

Rails歴が長い人でも、意外とmigrationの追加用のコマンドを覚えていられず、毎回調べていているので、実装で使ったもの・使いそうなものを少しずつ追加しています。

この記事は定期的に内容が追加される予定です。

よく使うパターン

空のマイグレーションファイルを作成する

以下のように、マイグレーションの名前を指定しながらrails generate コマンドを入力します。

% rails g migration AddXXXXsToSomeRecords

特定の型のカラムを既存のテーブルに追加する

以下のようにコマンドでカラムと型を指定する(YYY はテーブル名)か、

$ rails g migration AddXXXXToYYY カラム名:データ型

あるいは、後、次のように、直接、change メソッド内にadd_column メソッドを記載します。

class AddXXXXsToSomeRecords < ActiveRecord::Migration
  def change
    add_column :some_records, :column_name, :string
  end
end

ときどき使うパターン

既存のテーブルに、カラム名からは参照先を自動的に推定できない外部キーを追加する

some_master_records というテーブルがある前提で、別のsome_transaction_records テーブルにdefault_some_master_record_id というカラムを追加して、そのカラムを使ってsome_master_records テーブルを参照したい場合に使います。

やり方はいくつかあると思いますが、筆者が使うのは、以下です。

その後、以下のようにadd_reference メソッドにforeign_key オプションを指定し、そのオプションの中でto_table を指定します。

class AddXXXXsToSomeTransactionRecords < ActiveRecord::Migration
  def change
    add_reference :some_transaction_records, #カラムを追加したいテーブル
                  :default_some_master_record, #これでdefault_some_master_record_idカラムが作られる
                  {
                    foreign_key: {to_table: :some_master_records}
                  }  
  end
end

これで、some_transaction_records テーブルに、default_some_master_record_id カラムが追加され、some_master_records テーブルへの外部キー制約も作られます。

なお、この場合、ActiveRecordのモデルクラス(SomeTransactionRecord クラス)にも参照に使う外部キーと参照先のモデルの設定が必要になります(この記事での説明は省略します)。

まず、。

本サイトの更新情報は、で発信しています。ご確認ください。

Twitterの株式会社プレセナ・ストラテジック・パートナーズエンジニア公式
空のマイグレーションファイルを作った
空のマイグレーションファイルを作ります