Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CIフレンドリなDBドキュメント生成ツールでドキュメントの最新を維持し続ける / phpcon...
Search
Ken’ichiro Oyama
June 16, 2018
Technology
4.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CIフレンドリなDBドキュメント生成ツールでドキュメントの最新を維持し続ける / phpconfuk_rej
【非公式】PHPカンファレンス福岡2018前夜祭リジェクトコン #phpconfuk_rej
Ken’ichiro Oyama
June 16, 2018
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
Introducing RFC9111 / YAPC::Fukuoka 2025
k1low
2
5.5k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
970
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
800
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
180
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
12
6.3k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
11k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
460
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
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.2k
キャリアの中で本を作る / Making a Book During Your Career
ak1210
0
140
Making sense of Google’s agentic dev tools
glaforge
1
210
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
140
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
130
シンガポールで登壇してきます
yama3133
0
140
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
220
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
160
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3.2k
SRE Next 2026 何でも屋からの脱却
bto
0
730
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.6k
Balancing Empowerment & Direction
lara
6
1.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
300
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Being A Developer After 40
akosma
91
590k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Mind Mapping
helmedeiros
PRO
1
280
Odyssey Design
rkendrick25
PRO
2
730
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
খࢁ݈Ұ(.01FQBCP *OD 1)1ΧϯϑΝϨϯεԬલࡇϦδΣΫτίϯ $*ϑϨϯυϦͳ%#υΩϡϝϯτੜπʔϧͰ υΩϡϝϯτͷ࠷৽Λҡ࣋͠ଓ͚Δ
γχΞΤϯδχΞ খࢁ݈Ұ!L-P8 ϗεςΟϯάࣄۀ෦ϗεςΟϯάάϧʔϓϚωʔδυΫϥυνʔϜ IUUQTHJUIVCDPNL-P8
օ͞ΜͷϓϩδΣΫτʹ σʔλϕʔεઃܭॻ&3ਤ ͋Γ·͔͢ʁ
ͦΕߋ৽͞Ε͍ͯ·͔͢ʁ ࠷৽ͷঢ়ଶͰ͔͢ʁ
࠷ۙࢲ͕+0*/ͨ͠ ͋ΔϓϩδΣΫτͷ߹
͋ΔϓϩδΣΫτ -0-*101ϚωʔδυΫϥυ ͷྫ wͷ͍͍͢͝ͰػೳՃվળ͕܁Γฦ͞Ε͍ͯͨ w͍ΘΏΔ5JFSͳ୯७ͳ8FCΞϓϦέʔγϣϯͳͲͰͳ͘ɺϩʔϧ ͚ͩͰऑ͋Δɺ͍ΘΏΔ.JDSPTFSWJDFͳߏ wͦͷ͏ͪॏཁͳঢ়ଶอ࣋Λ୲͏σʔλϕʔε͕ϩʔϧ wνʔϜϝϯόʔ͕༏लͰ͋Δ͜ͱ͔ΒσʔλϕʔεͷεΩʔϚมߋ ;͘Ίಉ࣌ฒߦతʹߦΘΕ͍ͯͨ
͋ΔϓϩδΣΫτ -0-*101ϚωʔδυΫϥυ ͷྫ wίʔυͷཧ(JU)VC ()& Ͱશͯཧ wΤϯδχΞ͚ͩͰͳ͘σβΠφʔσΟϨΫλʔ(JU)VC্Ͱ׆ಈ wϓϩδΣΫτΛߏ͢ΔϦϙδτϦෳ wϓϩάϥϛϯάݴޠͭͰͳ͘5ZQF4DSJQU(PͳͲෳ
͘ฒߦతͳ։ൃͷσʔλϕʔεεΩʔϚͷߋ৽՝ w୭͕σʔλϕʔεεΩʔϚͷશͯΛѲ͍ͯ͠Δঢ়گͰͳ͔ͬͨ w ʮ͜ͷΧϥϜͲΜͳ༻్ͰΘΕΔΜͰ͔͢ʁʢࣗʣʯ w 4MBDLͰؾܰʹ࣭Ͱ͖Δ͠ɺௐͨΒΘ͔Δɻ͔͠͠ϫϯςϯϙΕΔ w୭͕σʔλϕʔεεΩʔϚͷ࠷৽ͷঢ়ଶΛѲ͍ͯ͠Δঢ়گͰͳ ͔ͬͨ w ʮ͋ΕʁԶ͕࡞ͬͨϚΠάϨʔγϣϯ͕ద༻͞Εͯͳ͍ʯˠฒߦͰϚΠάϨʔγϣ
ϯ͕ൃੜ͢Δ1VMM3FRVFTU͕͋ͬͨ݁ՌɺϚΠάϨʔγϣϯπʔϧͷϑΝΠϧ໊ ͷλΠϜελϯϓνΣοΫͰඈ͞Ε͍ͯͨ
࠷ॳͷࣗͷ wνʔϜʹ+0*/͔ͨ͠ΓͰσʔλϕʔεͷશମ૾͕Θ͔Βͳ͔ͬͨ wͱΓ͋͑ͣ4DIBNB4QZΛͬͯखݩʹσʔλϕʔευΩϡϝϯτΛ ࡞ͯ֬͠ೝ͍ͯͨ͠ wIUUQTDIFNBTQZPSH wશςʔϒϧશΧϥϜʹ$0..&/5ΛՃ͢Δ1VMM3FRVFTUΛ͢ΔͳͲ wͱΓ͋͑ͣ҆৺
ͱ͜Ζ͕ɺ͋Δͱ͖
ϓϩμΫτΦʔφʔ ʮͲ͔͜ʹσʔλϕʔεઃܭॻͳ͍Ͱ͔͢Ͷʁʯ
ΤϯδχΞͰͳͯ͘42-Λۦ͢Δձࣾͩͬͨ wσʔλϕʔεΛѲ͍ͨ͠ͷΤϯδχΞ͚ͩͰͳ͔ͬͨ w։ൃ͍ͯ͠ΔΤϯδχΞσʔλϕʔεͷεΩʔϚʹ͍ͭͯ࠷৽Ͱ ͳ͍ʹͤΑѲ͍ͯ͠Δʢ͠ͳ͍ͱ։ൃͰ͖ͳ͍ʣ w࣭֬ೝΛ͢Δͱ͖ʹΞλϦ͕͚ͭΒΕΔ wීஈผͷ͜ͱΛߟ͑Δඞཁ͕͋ΔσΟϨΫλʔͦ͏Ͱͳ͍ w͜Εʢྑ͍ҙຯͰʣఆ֎ɺ͜ͷ··ͩͱϚζ͍͔
UCMT
UCMT wUCMTJTB$*'SJFOEMZUPPMGPSEPDVNFOUBEBUBCBTF XSJUUFOJO(P wIUUQTHJUIVCDPNL-P8UCMT w.BSLEPXO ('. ܗࣜͰσʔλϕʔευΩϡϝϯτΛੜͯ͘͠ΕΔ$-* πʔϧ w$*ϑϨϯυϦʔͳίϚϯυ͋Δʢޙड़
Πϯετʔϧ w)PNFCSFXͰΠϯετʔϧՄೳ $ go get -u github.com/k1LoW/tbls $
brew install k1LoW/tbls/tbls w(PͳͷͰHPHFUͰΠϯετʔϧͰ͖·͢
Φϓγϣϯ(SBQIWJ[ͷΠϯετʔϧ w&3ਤੜͷͨΊͷ(SBQIWJ[ΛΠϯετʔϧ͠·͢ $ brew install graphviz
AUCMTEPDAσʔλϕʔευΩϡϝϯτͷੜ wAUCMTEPDAίϚϯυͰσʔλϕʔεʹଓͯ͠υΩϡϝϯτΛੜ͠·͢ $ tbls doc mysql://user:pass@hostname:3306/dbname ./dbdoc
ͦͯ͠(JU)VCʹίϛοτ
None
4".1-&
.BSLEPXOͰ͋Δྑ͞ w(JU)VC্ͰࣗಈͰϨϯμϦϯά͞ΕΔ wJNH؆୯ʹઃஔͰ͖Δ wϚʔΫμϯͳͷͰHJUEJ⒎Ͱ͕ࠩΘ͔Γ͍͢ wεΩʔϚߋ৽༰͕Θ͔Γ͍͢
lEJ⒎z
AUCMTEJ⒎AυΩϡϝϯτͱσʔλϕʔεͷࠩ wAUCMTEPDAΛAUCMTEJ⒎Aʹม͑Δ͚ͩͰσʔλϕʔεʹଓͯ͠طଘͷ ੜࡁΈυΩϡϝϯτͱͷࠩΛग़ྗ͠·͢ʢ(SBQIWJ[Ͱग़ྗͨ͠&3ਤ Ҏ֎ʣ w͕ࠩͳ͍ͱ͖Կग़ྗ͠ͳ͍ $ tbls diff
mysql://user:pass@hostname:3306/dbname ./dbdoc
l͕ࠩͳ͍ͱ͖Կग़ྗ͠ͳ͍z
͜ͷΈΛͬͯ$*ʹΈࠐΉ
$*࿈ܞ wσʔλϕʔεΛ࣋ͭΞϓϦέʔγϣϯͷςετʹ࠷৽ʹϚΠάϨʔγϣ ϯ͞Εͨσʔλϕʔε͕༻ҙ͞Ε͍ͯΔͣɻ wͦͷσʔλϕʔεʹଓͯ͠AUCMTEJ⒎AΛ࣮ߦɺίϛοτࡁΈͷυΩϡϝ ϯτͷࠩΛ֬ೝɺ͕ࠩ͋ΕΤϥʔʹ͢Δɻ wUCMTίϚϯυ(PͳͷͰϫϯόΠφϦɻͭ·Γ$*ʹΈࠐΈ͍͢
ྫ͑ϫϯϥΠφʔ w5SBWJT$*$JSDMF$*ͷ:".-ϑΝΠϧʹهड़ͯ͠ར༻Ͱ͖·͢ script: - DIFF=`tbls diff mysql://user:pass@hostname:3306/ dbname
./dbdoc` && if [ ! -z "$DIFF" ]; then echo "document does not match database." >&2 ; tbls diff mysql://user:pass@hostname:3306/dbname ./dbdoc; exit 1; fi
ྫ͑.BLFpMF wANBLFEPDAͱANBLFUFTUEPDA doc: ## Document database schema tbls
doc mysql://user:pass@hostname:3306/dbname ./dbdoc testdoc: ## Test database schema document $(eval DIFF := $(shell tbls diff mysql:// user:pass@hostname:3306/dbname ./dbdoc)) @test -z "$(DIFF)" || (echo "document does not match database." && tbls diff mysql://user:pass@hostname:3306/ dbname ./dbdoc && exit 1)
$*ϑϨϯυϦʔ
͞Βʹ
ABEEAϦϨʔγϣϯɺίϝϯτͷิ wUCMT',ΛΈͯϦϨʔγϣϯΛఆͯ͠&3ਤΛ࡞͢Δ w͔͠͠ɺੈͷதʹ',͕ͬͯͳ͍σʔλϕʔε͋ΔʢΩʔϨεΤϯ τϦʣ wӡ༻தͷσʔλϕʔεʹ$0..&/5ͷߋ৽ͷͨΊʹ"-5&3ͨ͘͠ͳ͍ wͦͷͨΊʹABEEAΦϓγϣϯͰ:".-ϑΝΠϧΛࢦఆ͢Δ͜ͱͰϦϨʔ γϣϯɺίϝϯτͷิ͕Ͱ͖·͢
ίϚϯυͰυΩϡϝϯτੜ ίϚϯυͰυΩϡϝϯτςετ
.Z42- 1PTUHSF42-
σʔλϕʔε υΩϡϝϯτ͕ͳ͍ υΩϡϝϯτ͕࠷৽Ͱͳ͍ ϓϩδΣΫτΛ ໓͢Δͧʂʂ
5IBOLZPV ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU