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
3
3.7k
CIフレンドリなDBドキュメント生成ツールでドキュメントの最新を維持し続ける / phpconfuk_rej
【非公式】PHPカンファレンス福岡2018前夜祭リジェクトコン #phpconfuk_rej
Ken’ichiro Oyama
June 16, 2018
Tweet
Share
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
240
Cleanup handling in Go / Go Conference 2024
k1low
6
3.4k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
17
9.9k
Command-line interface tool design / PHPerKaigi 2024
k1low
8
3k
gostyle IS NOT Go Style / Fukuoka.go#19 Reboot
k1low
1
240
Parsing case study in Go / Go Conference mini 2023 Winter IN KYOTO
k1low
2
1.3k
APIシナリオテストツールとしてのrunn / 4 API testing tools
k1low
3
1.5k
The future of tbls and "Documentation as Code" / phpconfuk 2023
k1low
4
6.3k
net/http/httptest.Server のアプローチをテスト戦略に活用する / Go Conference 2023
k1low
10
3.1k
Other Decks in Technology
See All in Technology
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
4
590
やっちゃえ誤自宅Nutanix
yukiafronia
0
320
SIEMによるセキュリティログの可視化と分析を通じた信頼性向上プロセスと実践
coconala_engineer
1
2.3k
Plants vs thieves: Automated Tests in the World of Web Security
leichteckig
0
140
GDG Tokyo 生成 AI 論文をわいわい読む会
enakai00
0
250
第27回クラウド女子会 ~re:Invent 振り返りLT会~ 私の周辺で反響のあった re:Invent 2024 アップデートつれづれ/reinvent-2024-update-reverberated-around-me
emiki
1
560
デザインシステムを始めるために取り組んだこと - TechTrain x ゆめみ ここを意識してほしい!リファクタリング勉強会
kajitack
2
290
一人から始めたSREチーム3年の歩み - 求められるスキルの変化とチームのあり方 - / The three-year journey of the SRE team, which started all by myself
vtryo
7
4.8k
ブロックチェーンR&D企業における SREの実態 / SRE Kaigi 2025
datachain
0
3.1k
CNAPPから考えるAWSガバナンスの実践と最適化
yuobayashi
3
270
実践!生成AIのビジネス活用 / How to utilize Generative AI in your own business
gakumura
1
190
SREKaigi.pdf
_awache
2
3k
Featured
See All Featured
Scaling GitHub
holman
459
140k
Become a Pro
speakerdeck
PRO
26
5.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
590
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
BBQ
matthewcrist
85
9.4k
Bash Introduction
62gerente
610
210k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
980
Rails Girls Zürich Keynote
gr2m
94
13k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
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