Slide 1

Slide 1 text

実践 Database Schema as Code Kenʼichiro Oyama Fusic Co.,Ltd. 2017.2.27 1 Fukuoka.php Vol.21

Slide 2

Slide 2 text

Who 2 Fukuoka.php Vol.21

Slide 3

Slide 3 text

k1LoW   Kenʼichiro Oyama   @k1LoW   Fusic Co.,Ltd. エンジニア   基盤ユニット テックリード   awspecというAWS⽤のテストツールを作っています   https://github.com/k1LoW/awspec 3 Fukuoka.php Vol.21

Slide 4

Slide 4 text

データベーススキーマ どのように管理していますか? 4 Fukuoka.php Vol.21

Slide 5

Slide 5 text

データベーススキーマ   CREATE TABLE, ALTER TABLE, DROP TABLE   型   物理名、論理名   リレーション 5 Fukuoka.php Vol.21

Slide 6

Slide 6 text

データベーススキーマの管理   例えばExcel   提出物としては良い   CREATE⽂を出⼒するマクロも可能   バイナリファイルなので差分の確認がしにくい   ALTERの管理が難しい   スキーマ情報の反映を忘れて過去のものになることも   例えば.sqlファイル   テキストファイルとしてGit管理ができる   ALTERの管理が難しい 6 Fukuoka.php Vol.21

Slide 7

Slide 7 text

データベーススキーマもコード で管理したい 7 Fukuoka.php Vol.21

Slide 8

Slide 8 text

フレームワーク   フレームワークのマイグレーション機能   ALTERを都度別ファイルで管理   詳細に記述することも可能   積み上げ型   最終形のスキーマを確認しにくい   積み上げに失敗したとき修復が難しい   気づかずに失敗していることがある   Phinxなども同じ 8 Fukuoka.php Vol.21

Slide 9

Slide 9 text

つらいぞ 9 Fukuoka.php Vol.21

Slide 10

Slide 10 text

我々がしたいことは何か?   データベーススキーマをコードで管理したいだけ   ALTERを管理したいわけではない   Gitで管理できればいい   テーブル履歴をファイルで管理したいわけではない   Gitで管理できればいい   みんなが最終形のスキーマを⼿に⼊れられれば良い   そしてそれをいい感じで適⽤できればいい 10 Fukuoka.php Vol.21

Slide 11

Slide 11 text

Infrastructure as Code の世界はどうか? 11 Fukuoka.php Vol.21

Slide 12

Slide 12 text

例えばAnsible   宣⾔的   あるべき状態を宣⾔   可読性が⾼い   べき等性   ある操作を何度実⾏しても常 に結果が同じになる [宣伝] “Ansible徹底⼊⾨” 発売中! http://www.shoeisha.co.jp/book/detail/ 9784798149943 12 Fukuoka.php Vol.21

Slide 13

Slide 13 text

Database Schema as Code はないのか? ※初出: https://www.slideshare.net/YoshiyukiNakahara/db-schema-ascode 13 Fukuoka.php Vol.21

Slide 14

Slide 14 text

そう、 Rubyistは知っている 14 Fukuoka.php Vol.21

Slide 15

Slide 15 text

Ridgepole 15 Fukuoka.php Vol.21

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

RidgepoleはPHPerこそ使うべき 18 Fukuoka.php Vol.21

Slide 19

Slide 19 text

RidgepoleはPHPerこそ使うべき理由   アプリケーションはRuby製ではないので、 Ridgepole専⽤のRubyを気軽に導⼊できる   Railsではないので、最新のRubyで最新の Ridgepoleを気軽に導⼊できる   フレームワークに関係なく、古いPHPアプリだ ろうが気軽導⼊できる   --export オプションがあるので、今からでも気 軽に導⼊できる 19 Fukuoka.php Vol.21

Slide 20

Slide 20 text

気軽に導⼊できる最⾼体験 20 Fukuoka.php Vol.21

Slide 21

Slide 21 text

Ridgepole導⼊しようぜ! 21 Fukuoka.php Vol.21

Slide 22

Slide 22 text

我々がしたいことは何か?   データベーススキーマをコードで管理したいだけ 22 Fukuoka.php Vol.21

Slide 23

Slide 23 text

それだけなんだ! 23 Fukuoka.php Vol.21

Slide 24

Slide 24 text

...それだけでは いかない世界がある 24 Fukuoka.php Vol.21

Slide 25

Slide 25 text

続・我々がしたいことは何か?   データベーススキーマをコードで管理したいだけ 25 Fukuoka.php Vol.21

Slide 26

Slide 26 text

続・我々がしたいことは何か?   データベーススキーマをコードで管理したいだけ   データベース設計書も欲しい(Excelで) 26 Fukuoka.php Vol.21

Slide 27

Slide 27 text

続・我々がしたいことは何か?   データベーススキーマをコードで管理したいだけ   データベース設計書も欲しい(Excelで)   ER図も欲しい(いい感じのやつ) 27 Fukuoka.php Vol.21

Slide 28

Slide 28 text

ならば解決しよう 28 Fukuoka.php Vol.21

Slide 29

Slide 29 text

スキーマからの リバースエンジニアリング 29 Fukuoka.php Vol.21

Slide 30

Slide 30 text

A5:SQL Mk-2 30 Fukuoka.php Vol.21

Slide 31

Slide 31 text

A5:SQL Mk-2   http://a5m2.mmatsubara.com/   ⾼機能SQLツール   強⼒なスキーマからのリバースエンジニアリングツー ルによって   Excelなデータベース設計書を作れる   コメントを論理名として認識させる設定最⾼   ER図を作れる   いけそう! 31 Fukuoka.php Vol.21

Slide 32

Slide 32 text

...それだけでは いかない世界がある 32 Fukuoka.php Vol.21

Slide 33

Slide 33 text

キーレスエントリ 33 Fukuoka.php Vol.21

Slide 34

Slide 34 text

キーレスエントリ   SQLアンチパターンの1つ   データベースで外部キー制約をはっていない   フレームワークの命名規則によるリレーションに頼っ ている状態   よくある 34 Fukuoka.php Vol.21

Slide 35

Slide 35 text

ER図は外部キー制約を設定していないと (キーレスエントリなスキーマでは) リレーションがはられない 35 Fukuoka.php Vol.21

Slide 36

Slide 36 text

tmpfk 36 Fukuoka.php Vol.21

Slide 37

Slide 37 text

tmpfk   Railsライクな命名規則を読み取ってテンポラリ な外部キー制約を付けたり外したりするツール   Railsライク: users と user_id とか   CakePHPもRailsライクな命名規則   LaravelもRailsライクな命名規則   https://github.com/k1LoW/tmpfk 37 Fukuoka.php Vol.21

Slide 38

Slide 38 text

38 Fukuoka.php Vol.21

Slide 39

Slide 39 text

外部キー制約を付けてER図を⽣成する と。。。 39 Fukuoka.php Vol.21

Slide 40

Slide 40 text

40 Fukuoka.php Vol.21 :+1:

Slide 41

Slide 41 text

Ridgepole導⼊しようぜ! 41 Fukuoka.php Vol.21

Slide 42

Slide 42 text

Thank you!  Fusicはテクノロジーが  好きなエンジニアを募集しています  https://fusic.github.io 42