このような疑問をお持ちの方に向けて書いています。
結論: gem ridgepoleを使うと、スキーマの変更、追加の内容をファイルに保存しコマンドを打つだけで管理が可能です。
▼この記事では、以下の点を理解できるような内容となっています。
- Railsのマイグレーション
- 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に慣れたら使ってみてください。