Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
実践 Database Schema as Code
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ken’ichiro Oyama
February 27, 2017
Technology
2.9k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実践 Database Schema as Code
Fukuoka.php Vol.21
Ken’ichiro Oyama
February 27, 2017
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
Introducing RFC9111 / YAPC::Fukuoka 2025
k1low
2
5.8k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
1.1k
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
920
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
200
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
12
6.5k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
11k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
480
Cleanup handling in Go / Go Conference 2024
k1low
7
4.2k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
18
12k
Other Decks in Technology
See All in Technology
hackers_champloo_2026_tidb
makocchi
0
160
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
250
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
200
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
140
会社説明資料
persolserverworks
0
9.8k
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
170
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
130
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Abbi's Birthday
coloredviolet
4
10k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
GraphQLとの向き合い方2022年版
quramy
50
15k
What's in a price? How to price your products and services
michaelherold
247
13k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Transcript
実践 Database Schema as Code Kenʼichiro Oyama Fusic Co.,Ltd. 2017.2.27
1 Fukuoka.php Vol.21
Who 2 Fukuoka.php Vol.21
k1LoW Kenʼichiro Oyama @k1LoW Fusic Co.,Ltd. エンジニア
基盤ユニット テックリード awspecというAWS⽤のテストツールを作っています https://github.com/k1LoW/awspec 3 Fukuoka.php Vol.21
データベーススキーマ どのように管理していますか? 4 Fukuoka.php Vol.21
データベーススキーマ CREATE TABLE, ALTER TABLE, DROP TABLE 型
物理名、論理名 リレーション 5 Fukuoka.php Vol.21
データベーススキーマの管理 例えばExcel 提出物としては良い CREATE⽂を出⼒するマクロも可能 バイナリファイルなので差分の確認がしにくい
ALTERの管理が難しい スキーマ情報の反映を忘れて過去のものになることも 例えば.sqlファイル テキストファイルとしてGit管理ができる ALTERの管理が難しい 6 Fukuoka.php Vol.21
データベーススキーマもコード で管理したい 7 Fukuoka.php Vol.21
フレームワーク フレームワークのマイグレーション機能 ALTERを都度別ファイルで管理 詳細に記述することも可能 積み上げ型
最終形のスキーマを確認しにくい 積み上げに失敗したとき修復が難しい 気づかずに失敗していることがある Phinxなども同じ 8 Fukuoka.php Vol.21
つらいぞ 9 Fukuoka.php Vol.21
我々がしたいことは何か? データベーススキーマをコードで管理したいだけ ALTERを管理したいわけではない Gitで管理できればいい テーブル履歴をファイルで管理したいわけではない
Gitで管理できればいい みんなが最終形のスキーマを⼿に⼊れられれば良い そしてそれをいい感じで適⽤できればいい 10 Fukuoka.php Vol.21
Infrastructure as Code の世界はどうか? 11 Fukuoka.php Vol.21
例えばAnsible 宣⾔的 あるべき状態を宣⾔ 可読性が⾼い べき等性
ある操作を何度実⾏しても常 に結果が同じになる [宣伝] “Ansible徹底⼊⾨” 発売中! http://www.shoeisha.co.jp/book/detail/ 9784798149943 12 Fukuoka.php Vol.21
Database Schema as Code はないのか? ※初出: https://www.slideshare.net/YoshiyukiNakahara/db-schema-ascode 13 Fukuoka.php Vol.21
そう、 Rubyistは知っている 14 Fukuoka.php Vol.21
Ridgepole 15 Fukuoka.php Vol.21
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
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
RidgepoleはPHPerこそ使うべき 18 Fukuoka.php Vol.21
RidgepoleはPHPerこそ使うべき理由 アプリケーションはRuby製ではないので、 Ridgepole専⽤のRubyを気軽に導⼊できる Railsではないので、最新のRubyで最新の Ridgepoleを気軽に導⼊できる フレームワークに関係なく、古いPHPアプリだ ろうが気軽導⼊できる
--export オプションがあるので、今からでも気 軽に導⼊できる 19 Fukuoka.php Vol.21
気軽に導⼊できる最⾼体験 20 Fukuoka.php Vol.21
Ridgepole導⼊しようぜ! 21 Fukuoka.php Vol.21
我々がしたいことは何か? データベーススキーマをコードで管理したいだけ 22 Fukuoka.php Vol.21
それだけなんだ! 23 Fukuoka.php Vol.21
...それだけでは いかない世界がある 24 Fukuoka.php Vol.21
続・我々がしたいことは何か? データベーススキーマをコードで管理したいだけ 25 Fukuoka.php Vol.21
続・我々がしたいことは何か? データベーススキーマをコードで管理したいだけ データベース設計書も欲しい(Excelで) 26 Fukuoka.php Vol.21
続・我々がしたいことは何か? データベーススキーマをコードで管理したいだけ データベース設計書も欲しい(Excelで) ER図も欲しい(いい感じのやつ) 27 Fukuoka.php Vol.21
ならば解決しよう 28 Fukuoka.php Vol.21
スキーマからの リバースエンジニアリング 29 Fukuoka.php Vol.21
A5:SQL Mk-2 30 Fukuoka.php Vol.21
A5:SQL Mk-2 http://a5m2.mmatsubara.com/ ⾼機能SQLツール 強⼒なスキーマからのリバースエンジニアリングツー ルによって
Excelなデータベース設計書を作れる コメントを論理名として認識させる設定最⾼ ER図を作れる いけそう! 31 Fukuoka.php Vol.21
...それだけでは いかない世界がある 32 Fukuoka.php Vol.21
キーレスエントリ 33 Fukuoka.php Vol.21
キーレスエントリ SQLアンチパターンの1つ データベースで外部キー制約をはっていない フレームワークの命名規則によるリレーションに頼っ ている状態 よくある
34 Fukuoka.php Vol.21
ER図は外部キー制約を設定していないと (キーレスエントリなスキーマでは) リレーションがはられない 35 Fukuoka.php Vol.21
tmpfk 36 Fukuoka.php Vol.21
tmpfk Railsライクな命名規則を読み取ってテンポラリ な外部キー制約を付けたり外したりするツール Railsライク: users と user_id とか
CakePHPもRailsライクな命名規則 LaravelもRailsライクな命名規則 https://github.com/k1LoW/tmpfk 37 Fukuoka.php Vol.21
38 Fukuoka.php Vol.21
外部キー制約を付けてER図を⽣成する と。。。 39 Fukuoka.php Vol.21
40 Fukuoka.php Vol.21 :+1:
Ridgepole導⼊しようぜ! 41 Fukuoka.php Vol.21
Thank you! Fusicはテクノロジーが 好きなエンジニアを募集しています https://fusic.github.io 42