実践 Database Schema as Code // Speaker Deck
どうやら社内でもRidgepole利用が観測されはじめたのでPHPer用チュートリアル。
事前準備
Rubyをインストールしましょう。
PHPerならRubyのバージョンに悩むことなく、できるだけ新しいRubyにしましょう。
実際に簡単なRidgepoleの導入
Gemfileの設置
コマンドでGemfileの雛形を生成しましょう。
PHPerならプロジェクトでRuby使っていないので何も考えず実施できますね。
$ bundle init
Gemfileを以下のように書き換えます。
# frozen_string_literal: true
source "https://rubygems.org"
gem "ridgepole"
gem "pg" # PostgreSQLを利用する場合
gem "mysql2" # MySQLを利用する場合
Ridgepoleのインストール
$ bundle install
この時点でGemfileもGemfile.lockもコミットしましょう。
database.ymlを作成
Ridgepoleがデータベースに接続するための設定です。
PostgreSQLの場合
adapter: postgresql
encoding: utf8
host: 127.0.0.1
database: my_database
username: postgres
password: xxxxXXXxxxxx
port: 5432
MySQLの場合
adapter: mysql2
encoding: utf8
host: 127.0.0.1
database: my_database
username: myadmin
password: xxxxXXXxxxxx
port: 3306
Schemafileをexport
Ridgepoleは、Schemafileたった1ファイルを管理するだけでOK。
しかも既存のデータベースからSchemafileをエクスポートできる。便利。
$ bundle exec ridgepole -c database.yml --export -o Schemafile
これで今日からRidgepole!!!簡単!!!
スキーマを変更してみる
Schemafileの中を見てみましょう。
PHPerでもだいたい雰囲気でわかると思います。設定ファイルみたいなもんです。
わかりますよね?
試しにカラムを追加してみましょう。Schemafileを雰囲気で修正するだけです。
そして以下のコマンドを実行します。
$ bundle exec ridgepole -c database.yml --apply -f Schemafile --dry-run
--dry-run
オプションで実行予定のSQLが分かります。修正方法が間違っていたらここでエラーがでます。
問題なければ実際に適用します。
$ bundle exec ridgepole -c database.yml --apply -f Schemafile
これでスキーマ変更完了!!!簡単!!!
そしてSchemefileをコミットして終わり。
まとめ
PHPerならRidgepole使おうぜ!