Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実践 Database Schema as Code

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

実践 Database Schema as Code

Fukuoka.php Vol.21

Avatar for Ken’ichiro Oyama

Ken’ichiro Oyama

February 27, 2017

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. k1LoW   Kenʼichiro Oyama   @k1LoW   Fusic Co.,Ltd. エンジニア

      基盤ユニット テックリード   awspecというAWS⽤のテストツールを作っています   https://github.com/k1LoW/awspec 3 Fukuoka.php Vol.21
  2. データベーススキーマ   CREATE TABLE, ALTER TABLE, DROP TABLE   型

      物理名、論理名   リレーション 5 Fukuoka.php Vol.21
  3. データベーススキーマの管理   例えばExcel   提出物としては良い   CREATE⽂を出⼒するマクロも可能   バイナリファイルなので差分の確認がしにくい  

    ALTERの管理が難しい   スキーマ情報の反映を忘れて過去のものになることも   例えば.sqlファイル   テキストファイルとしてGit管理ができる   ALTERの管理が難しい 6 Fukuoka.php Vol.21
  4. フレームワーク   フレームワークのマイグレーション機能   ALTERを都度別ファイルで管理   詳細に記述することも可能   積み上げ型  

    最終形のスキーマを確認しにくい   積み上げに失敗したとき修復が難しい   気づかずに失敗していることがある   Phinxなども同じ 8 Fukuoka.php Vol.21
  5. 我々がしたいことは何か?   データベーススキーマをコードで管理したいだけ   ALTERを管理したいわけではない   Gitで管理できればいい   テーブル履歴をファイルで管理したいわけではない  

    Gitで管理できればいい   みんなが最終形のスキーマを⼿に⼊れられれば良い   そしてそれをいい感じで適⽤できればいい 10 Fukuoka.php Vol.21
  6. 例えばAnsible   宣⾔的   あるべき状態を宣⾔   可読性が⾼い   べき等性  

    ある操作を何度実⾏しても常 に結果が同じになる [宣伝] “Ansible徹底⼊⾨” 発売中! http://www.shoeisha.co.jp/book/detail/ 9784798149943 12 Fukuoka.php Vol.21
  7. Ridgepole   べき等性を持ったデータベーススキーマ管理ツ ール   https://github.com/winebarrel/ridgepole   ridgepole --apply コマンドを実⾏したとき、

    Ridgepole は Schemafile に書かれたテーブル定義を、実際の DB に接続して DB 上のテーブル定義 と⽐較します。もし Schemafile に書かれた定義と DB 上の定義に差分が あれば、その差分だけが ALTER TABLE ⽂となって、DB に適⽤されます。   http://techlife.cookpad.com/entry/2014/08/28/194147   1ファイル(Ruby DSL)でスキーマ管理   コメントも管理できる 16 Fukuoka.php Vol.21
  8. Schemafile 17 Fukuoka.php Vol.21  create_table “users”, comment: ”会員情報” do |t|

      t.text "username", comment: "ログインユーザー"   t.text "password", comment: "ログインパスワード”   t.text "email", comment: "メールアドレス"   t.datetime "created", comment: "登録⽇時"   t.datetime "modified", comment: "更新⽇時”  end
  9. A5:SQL Mk-2   http://a5m2.mmatsubara.com/   ⾼機能SQLツール   強⼒なスキーマからのリバースエンジニアリングツー ルによって  

    Excelなデータベース設計書を作れる   コメントを論理名として認識させる設定最⾼   ER図を作れる   いけそう! 31 Fukuoka.php Vol.21
  10. tmpfk   Railsライクな命名規則を読み取ってテンポラリ な外部キー制約を付けたり外したりするツール   Railsライク: users と user_id とか

      CakePHPもRailsライクな命名規則   LaravelもRailsライクな命名規則   https://github.com/k1LoW/tmpfk 37 Fukuoka.php Vol.21