Railsじゃなくてもマイグレーションを使えるStandaloneMigration

Rails等のフレームワークを使っていないプロジェクトでマイグレーションを使いたい時にはStandaloneMigrationが使える。(Ruby以外のプロジェクトでも使える。動かすにはもちろん要Rubyだけど)

これを使わなくてもActiveRecordを使って自前でいろいろ書けばできるが、そういういろいろの面倒を見てくれるので楽ができる。

インストール

gem install standalone-migrations

又はbundlerを使ってもいい。
というか環境を移すことを考えるとbundlerを使ったほうがいいですよね。

Rakefileの修正

以下のコードを追記。

begin
  require 'tasks/standalone_migrations'
rescue LoadError => e
  puts "gem install standalone_migrations to get db:migrate:* tasks! (Error: #{e})"
end

db/config.ymlの作成

Railsと同様に例えば以下のように。

development:
  adapter: sqlite3
  database: db/development.sqlite3

production:
  adapter: sqlite3
  database: db/production.sqlite3

test: &test
  adapter: sqlite3
  database: db/test.sqlite3

ここまでやって

rake -T

するといろいろタスクが使えるようになっている。

rake db:create          # Create the database from config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config)
rake db:drop            # Drops the database for the current Rails.env (use db:drop:all to drop all databases)
rake db:fixtures:load   # Load fixtures into the current environment's database.
rake db:migrate         # Migrate the database (options: VERSION=x, VERBOSE=false).
rake db:migrate:status  # Display status of migrations
rake db:new_migration   # Create a new migration
rake db:rollback        # Rolls the schema back to the previous version (specify steps w/ STEP=n).
rake db:schema:dump     # Create a db/schema.rb file that can be portably used against any DB supported by AR
rake db:schema:load     # Load a schema.rb file into the database
rake db:seed            # Load the seed data from db/seeds.rb
rake db:setup           # Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the db first)
rake db:structure:dump  # Dump the database structure to an SQL file
rake db:version         # Retrieves the current schema version number

これらは内部的には’active_record/railties/databases.rake’を使っているので、Railsのマイグレーションと同様に動作する。

rake db:new_migration

以下のようにマイグレーションファイルを作成するRakeタスクが追加されている。

rake db:new_migration name=CreateHoge

nameでマイグレーションの名前を指定する。
これでdb/migrate以下にマイグレーションファイルができるので、Railsを使うときと同様に書いていけばよい。