プログラミング技術

本サイトはプロモーションが含まれています。

Ruby on Railsのgem ridgepoleで面倒なMigrationとさようなら

Railsのgem ridgepole使い方
初心者さん
RailsのMigration面倒だな〜。簡単なライブラリないかな?

このような疑問をお持ちの方に向けて書いています。

結論: gem ridgepoleを使うと、スキーマの変更、追加の内容をファイルに保存しコマンドを打つだけで管理が可能です。

▼この記事では、以下の点を理解できるような内容となっています。

  1. Railsのマイグレーション
  2. Railのgem ridgepoleの使い方

自分は開発環境にDockerを利用しているため、コマンドもDockerのコマンドで紹介しています。ridgepoleで楽々データベース管理してみましょう。

Ruby on Railsが学べる高評価のプログラミングスクール

Rubyを学ぶならRUNTEQ
Web系開発企業に内定98%。必要な技術力がきちんと身につくカリキュラムで自走力を身に着け、卒業後には開発現場レベルのスキルが身につくと評判です。WEB系企業が運営する信頼できるプログラミングスクールです。
Webエンジニア輩出実績トップクラスの【ポテパンキャンプ】
Rails専門に教えているプログラミングスクール。卒業生の転職先からの評判が良いと話題に。厳しめでレベルの高い学習をするため本気で転職したい人以外は挫折します。
tech boost無料カウンセリング
オリジナルアプリの作成ができるため、応募先から高い評価をもらえる本格的なプログラミングスクール。転職サービスも展開している。

Railsのマイグレーションは少し面倒

railsでスキーマの変更があった時に、マイグレーションファイルを追加して管理をしていきます。

直接SQLを使わないで、データベースやテーブルの構造を管理していく仕組みになっていますが、変更や削除など面倒です。

マイグレーションファイルの例

Railsドキュメントに書いてある例です。

class AddSsl < ActiveRecord::Migration
  def up
    add_column :accounts, :ssl_enabled, :boolean, default: true
  end

  def down
    remove_column :accounts, :ssl_enabled
  end
end
class TenderloveMigration < ActiveRecord::Migration
  def change
    create_table(:horses) do |t|
      t.column :content, :text
      t.column :remind_at, :datetime
    end
  end
end

マイグレーションで使えるメソッド

データベースやテーブルに以下のメソッドで変更を加えることができます。(他にもたくさんあります。)

  • create_table
  • change_table
  • add_column
  • change_column
  • add_index

Railのgem ridgepoleとは

gem ridgepoleは冒頭で書いたように、Schemafileのみで管理できます。使い方も簡単なので紹介していきます。

環境

  • Railsは6系
  • MySQLは8.0

gem ridgepoleをGemfileに追加

Gemfileにgemを追加していきます。

gem 'ridgepole'

dockerをつかっているので、以下のコマンドでインストール。

docker-compose run api bundle install

Schemafileを作成

gemのインストールが終わったら、Schemafileを作成していきます。以下のような簡単なテーブルを作ってみます。

create_table "keywords", id: :bigint, unsigned: true, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
  t.string "keyword"
  t.datetime "created_at", precision: 6, null: false
  t.datetime "updated_at", precision: 6, null: false
end

データベースの作成

dockerのdatabase.ymlにデータベースの情報を記述し以下のコマンドでデータベースを作成。

# apiは[サービス名]
docker-compose run api bundle exec rake db:create

ridgepoleコマンド実行

最後にridgepoleのコマンドを実行すると、Schemafileに書いてある通りに作成されます。

# apiは[サービス名]
docker-compose run --rm api bundle exec ridgepole -c config/database.yml -f db/Schemafile --apply

--rmは実行が終わり次第コンテナが削除されるのでdocker-compose run 〇〇の時はつけておくといいかもですね。

Ruby on Railsのgem ridgepoleまとめ

今回は、Railsのgem ridgepoleの紹介でした。Railsでテーブルの管理が面倒と感じたら入れてみてください。

Railsを業務で使っている人は、使ったことがあるかもしれませんね。初心者の方は、Railsに慣れたら使ってみてください。

-プログラミング技術