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

実践 Database Schema as Code

実践 Database Schema as Code

Fukuoka.php Vol.21

Ken’ichiro Oyama

February 27, 2017
Tweet

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