Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
知らないWebアプリケーションの開発に途中からJOINしたとき、どこから切り込むか? / PHPerKaigi 2020
Ken’ichiro Oyama
February 10, 2020
Technology
30
11k
知らないWebアプリケーションの開発に途中からJOINしたとき、どこから切り込むか? / PHPerKaigi 2020
https://fortee.jp/phperkaigi-2020/proposal/c8d6b9b1-29e4-48bd-b8bd-9f43f74d6265
Ken’ichiro Oyama
February 10, 2020
Tweet
Share
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
GitHub Actions Deep Dive using PHP / PHPerKaigi 2022
k1low
0
680
io/fs.FS for testability. io/fs.FS for abstraction. / Go Conference 2021 Autumn (Online)
k1low
0
280
Continuous Documentation - CI/CDパイプラインを活用した文書化技術 - / Pepabo Tech Conference #16
k1low
1
140
システムの変化に追従可能でかつ理解し易いドキュメントシステムのモデル化 / Web System Architecture #8
k1low
9
2.9k
目的に沿ったDocumentation as Codeをいかにして実現していくか / PHPerKaigi 2021
k1low
15
4.1k
Documentation as Codeで継続的なドキュメント運用を実現する / July Tech Festa 2021 winter
k1low
6
4.7k
tblsで実現したいシステムとGoによるその実装 / Fukuoka.go#16
k1low
1
340
データ基盤のメタデータを継続的に管理できる仕組みを作る(ペパボ編) / pepabohatena
k1low
5
1.6k
明日から使えるDatabase tools / Fukuoka.php Vol.31 LT
k1low
0
190
Other Decks in Technology
See All in Technology
プロダクトグロースと技術のベースアップを両立させるRettyのアプリ開発スタイル / Achieve Product Growth and Tech Update
imaizume
1
250
~スタートアップの人たちに捧ぐ~ 監視再入門 in AWS
track3jyo
PRO
30
8k
Microsoft 365の中でのPower BIの利用 / M365VM2022
ishiayaya
0
1.3k
[SRE NEXT 2022]ヤプリのSREにおけるセキュリティ強化の取り組みを公開する
mmochi23
1
150
Power Query 日時の変換でちょっと焦ったケース +1 / Power Query Some cases
ishiayaya
0
140
様々な現場のPower Platform ~小さなエンジニアの奮闘記~
hyodol2513
0
1.6k
Who owns the Service Level?
chaspy
5
580
Accelerating ZOZOTOWN Modernization with Istio
yokawasa
0
210
Devに力を授けたいSREのあゆみ / SRE that wants to empower developers
tocyuki
3
390
Power BIのモバイルと都 +1 / Tokyo
ishiayaya
0
130
jaws-ug-asa-datasync-20220510
hiashisan
0
430
220428event_overview
caddi_eng
1
200
Featured
See All Featured
The Cult of Friendly URLs
andyhume
68
4.7k
Building Adaptive Systems
keathley
25
1.1k
Stop Working from a Prison Cell
hatefulcrawdad
261
17k
4 Signs Your Business is Dying
shpigford
169
20k
YesSQL, Process and Tooling at Scale
rocio
157
12k
What’s in a name? Adding method to the madness
productmarketing
11
1.5k
Code Review Best Practice
trishagee
41
6.7k
Gamification - CAS2011
davidbonilla
75
3.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
For a Future-Friendly Web
brad_frost
164
7.4k
Side Projects
sachag
449
37k
Transcript
খࢁ݈Ұ(.01FQBCP *OD 1)1,BJHJ Βͳ͍8FCΞϓϦέʔγϣϯͷ։ൃʹ ్த͔Β+0*/ͨ͠ͱ͖ɺ Ͳ͔͜ΒΓࠐΉ͔ʁ
IUUQTHJUIVCDPNL-P8 ϓϦϯγύϧΤϯδχΞ খࢁ݈Ұ!L-P8 ϗεςΟϯάࣄۀ෦ϗεςΟϯάάϧʔϓϚωʔδυΫϥυνʔϜ
None
None
w్த+0*/ʹ͍ͭͯվΊͯߟ͑Δ w్த+0*/ͷϊϋڞ༗ͷ͖͔͚ͬΛ࡞Δ wࢲ͕ɺΈͳ͞Μͷɺ్த+0*/ͷϊϋΛΓ͍ͨ ͜ͷൃදͷΰʔϧ
Έͳ͞Μ ։ൃʹ్த+0*/ͨ͠ܦݧ ͋Γ·͔͢ʁ
w ࣮͋·Γ్த+0*/ͷܦݧ͕ͳ͍ w θϩ͔Βߏங͢Δܦݧͷ΄͏͕ѹతʹଟ͍ w ϓϩδΣΫτʹ్த͔Β+0*/͢Δܦݧ͕ຊʹগͳ͍ w 044׆ಈʹϞϩʹͰ͍ͯͯɺ(JU)VCͷϓϩϑΟʔϧ ͷάϥϑΛΈͯҟৗͳภΓʢѹతʹࣗͷ044ͷίϛοτ͕ଟ͍ʣ w
ͳͷͰɺࠓճͷ్த+0*/Λ͢Δͱ͖ɺҙਂࣗ͘ͷঢ়گ Λ֬ೝ͠ͳ͕ΒਐΊ͍ͯ͘͜ͱʹͨ͠ ࢲͱ͍͏ͱ
w 1)1 .Z42- w ͍ΘΏΔ8FC%#ͷΞϓϦέʔγϣϯ w ຊ൪ڥɾεςʔδϯάڥɾڞ༗։ൃڥ w ։ൃڥ7BHSBOUͰ༻ҙ w
Πϯϑϥߏ$IFGͰߏஙɾཧ w αʔϏεͱͯ͠ͷྺ࢙͘ɺଞαʔϏεͱͷ࿈ܞ͋Γ +0*/ͨ͠αʔϏεͷ֓ཁ
͜͜·ͰͰ։ൃʹ औΓ͔͔Εͦ͏Ͱ͔͢ʁ
w 1)1.Z42-ɺ$IFGͳͲ৮ͬͨ͜ͱ͋Δ w 1)1νϣοτσΩϧ w ݴͬͯΈΕαʔϏεΛߏ͍ͯ͠Δٕज़ελοΫʹͭ ͍ͯͷཧղʹ͍ͭͯ΄΅ͳͦ͞͏ w ιʔείʔυ(JUʢ()&ʣͰཧ͞Ε͍ͯΔ w
͍͚ͦ͏ w ͦΕͳͷʹͳͥʁ ͳͥ։ൃʹऔΓ͔͔Εͳ͍ͷ͔ʁ
θϩ͔Β։ൃ͢Δͱ͖Λߟ͑ͯΈΔ ͲͷΑ͏ͳαʔϏε͔
θϩ͔Β։ൃ͢Δͱ͖Λߟ͑ͯΈΔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔
θϩ͔Β։ൃ͢Δͱ͖Λߟ͑ͯΈΔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ
θϩ͔Β։ൃ͢Δͱ͖Λߟ͑ͯΈΔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ
θϩ͔Β։ൃ͢Δͱ͖Λߟ͑ͯΈΔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ ͲͷΑ͏ͳίʔυ͔
w͔Β·ͰੵΈ্͛ͯɺ ͡Ίͯ։ൃ͕Ͱ͖͍ͯΔ ঢ়ଶʹͳΔ θϩ͔Β։ൃ͢Δͱ͖Λߟ͑ͯΈΔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ
ͲͷΑ͏ͳίʔυ͔ ։ൃ
wٕज़ελοΫ͕Θ͔ͬͯຊ ൪ڥ։ൃڥ͕͋ͬ ͨͱͯ͠ɺɺɺ͕ Γͳ͍ w͜ͷੵΈ্్͛த͔Β +0*/͢Δͱͯ͠ඞཁ Կ͕Γͳ͍͔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔
ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ ͲͷΑ͏ͳίʔυ͔ ։ൃ
ʮͲ͔͜ΒΓࠐΉ͔ʁʯ ͷճɺৗʹ ʮͲͷΑ͏ͳαʔϏε͔ΛΔ͜ͱ͔Βʯ
w ։ൃΛ͢Δ্Ͱͷؾ͖ͮΛଟ͘͢ΔͨΊɻ w Կ͔ͷػೳΛͭ࡞Δͱ͖ɺͦͷػೳ͚ͩͰαʔϏε͕ Γཱ͍ͬͯΔΘ͚Ͱͳ͍ɻଞͷػೳͱͷ͍ؔͯ͠Δɻ w ͜ͷؔੑͷࠜװʹ͋Δͷ͕ʮͲͷΑ͏ͳαʔϏεͳͷ ͔ʯ ʮͲͷΑ͏ͳαʔϏε͔ʯ͕ͳͥඞཁ͔
w ͍͍ͩͨ3%#.4͕ͩ3%#.4ʹݶΒͳ͍ w αʔϏεͷػೳ্࣮ͷ੍ͷใ͕ͬͱ৭ೱ͘Ͱ ͍ͯΔͷίʔυͰͳͯ͘σʔλϕʔεͷςʔϒϧઃܭ w 8FCΞϓϦέʔγϣϯɺۃͯ͠͠·͑σʔλͷग़͠ ೖΕͳͷͰɺӬଓσʔλ͕͋ΔՕॴͷઃܭ੍ΛѲ͢ Δ͜ͱͰɺαʔϏεͷࠜݩͷ෦͔ΒཧղͰ͖Δ w
8FCΞϓϦέʔγϣϯͷ࣮ʹӨڹΛड͚ͳ͍ܗͰཧղͰ ͖Δใ ʮͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ʯ͕ͳͥඞཁ͔
σʔλϕʔεͷण໋ ΞϓϦέʔγϣϯΑΓ͍ ીࠜେ
w ͍͍ͩͨ3%#.4͕ͩ3%#.4ʹݶΒͳ͍ w αʔϏεͷػೳ্࣮ͷ੍ͷใ͕ͬͱ৭ೱ͘Ͱ ͍ͯΔͷίʔυͰͳͯ͘σʔλϕʔεͷςʔϒϧઃܭ w 8FCΞϓϦέʔγϣϯɺۃͯ͠͠·͑σʔλͷग़͠ ೖΕͳͷͰɺӬଓσʔλ͕͋ΔՕॴͷઃܭ੍ΛѲ͢ Δ͜ͱͰɺαʔϏεͷࠜݩͷ෦͔ΒཧղͰ͖Δ w
8FCΞϓϦέʔγϣϯͷ࣮ʹӨڹΛड͚ͳ͍ܗͰཧղͰ ͖Δใ ʮͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ʯ͕ͳͥඞཁ͔
wιʔείʔυΛಡΉͨΊͷΤϯτϦʔϙΠϯτ͕Γ͍ͨ w 8FCΞϓϦέʔγϣϯΛͲ͔͜ΒಡΈਐΊΕྑ͍͔ͱ ͍͏۩ମతͳࢦ w ϝδϟʔͳϑϨʔϜϫʔΫΛར༻͍ͯ͠Δ߹҉తʹ ͍͑ͯΔ͜ͱ͕ଟ͍ w ͦ͏Ͱͳ͍߹ɺʮ)551ϦΫΤετΛͲ͏ϧʔςΟ ϯά͍ͯ͠Δ͔ʯ͔ΒΔඞཁ͕͋Δ
w ʮ։ൃʯʹ࠷͍ۙϨΠϠʔͳͷͰܦݧͷߴ͍Τϯδχ ΞྗٕͰղܾ͢ΔͷͰඞཁͳ͍͜ͱ ʮͲͷΑ͏ͳίʔυ͔ʯ͕ͳͥඞཁ͔
ٕज़ελοΫͷ͕ࣝ͋ͬͨͱͯ͠ ։ൃ։࢝·Ͱʹ खؒͱ͕͔͔࣌ؒΔ
l։ൃ։࢝·ͰͷΦʔόʔϔουz
w ։ൃʹऔΓֻ͔Δ·Ͱʹ͔͔Δ࣌ؒΛɺ͜ͷηογϣϯͰ ʮ։ൃ։࢝·ͰͷΦʔόʔϔουʯͱݺͿ w ։ൃνʔϜ͕ˋະདྷӬ߷ݻఆϝϯόʔͰ͋Δඞཁ͕ͳ ͍ݶΓʮ։ൃ։࢝·ͰͷΦʔόʔϔουʯͦͷ։ൃʹ͓ ͍ͯ՝ͱͳΓ͏Δ w ࣮ࢲ͕Βͳ͍͚ͩͰԿ໊͔લ͕͍ͭͯͦ͏ͳͷͰ୭͔ڭ͍͑ͯͩ͘͞ w
ͬ͘͠ͱ໊͍͍લΛͥͻ ։ൃ։࢝·ͰͷΦʔόʔϔου
ʮ్த+0*/ͷϊϋʯͱ ʮ։ൃ։࢝·ͰͷΦʔόʔϔουΛ ͲͷΑ͏ʹখ͘͢͞Δ͔ʯ ͱ͍͏͜ͱ
։ൃ։࢝·ͰͷΦʔόʔϔου ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ ͲͷΑ͏ͳίʔυ͔ ։ൃ αʔϏεཧղϨΠϠʔ
ΞʔΩςΫνϟཧղϨΠϠʔ σʔλετΞཧղϨΠϠʔ ڥϨΠϠʔ ίʔυϨΠϠʔ
w αʔϏε։ൃʹ͓͚Δଐਓੑ͕ബ͘ͳΔ w αʔϏε୯ҐͰͳ͘ɺͦͷͱ͖ͦͷͱ͖ͷϓϩδΣΫτ ୯ҐͰͷ։ൃ͕͘͢͠ͳΔ wεϖγϟϧνʔϜͷ͕݁͘͢͠ͳΔ w ։ൃϝϯόʔͷҠಈͱಉ࣌ʹαʔϏεΛԣஅٕͨ͠ज़ݟ ͷަྲྀ͕׆ൃʹͳΔ w
ͦͷαʔϏεͷಥൃతͳٕज़՝ʹରͯ͠ɺ͙͢ʹผνʔ ϜؚΊͯͨશΤϯδχΞͰऔΓΉ͜ͱ͕Ͱ͖Δ ΦʔόʔϔουΛখ͘͢͞ΔϝϦοτ
w ։ൃ։࢝·ͰͷΦʔόʔϔουݮͷύλʔϯʹɺେ͖ ͭ͘ʹྨ͞ΕΔ w+0*/͢Δϝϯόʔ͕ͯ͠ݮ͢Δύλʔϯ w ύλʔϯΛ͓͚ͬͯࣄલ४උͳ͠Ͱ࣮ߦՄೳ w ͨͩ͠εέʔϧ͠ͳ͍ wαʔϏεͱͯ͠ࣄલʹݮ͓ͯ͘͠ύλʔϯ w
εέʔϧ͢Δ w ͨͩ͠αʔϏεͷมԽʹӨڹ͢ΔͳΒৗʹΞοϓσʔ τ͕ඞཁ Φʔόʔϔουݮύλʔϯ
ྫ͑ࢲ͕࣮ફͨ͠ Φʔόʔϔουݮ
είʔϓΛߜΔ
wॎʹείʔϓΛߜͬͯѲ ͢Δ͜ͱͰΦʔόʔϔου Λݮ wੵΈ্͛Δඞཁ͕͋Δͷ ͰϐϥϛουܕʹͳΔ ʢλϫʔܕʹͳΓʹ͘ ͍ʣ είʔϓΛߜΔ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔
ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ ͲͷΑ͏ͳίʔυ͔ ։ൃ
w αʔϏε֓ཁʢαʔϏεཧղϨΠϠʔʣΛείʔϓΛߜͬ ͯѲ͢Δ w ʮͲͷΑ͏ͳϢʔβ͕͜ͷαʔϏεΛར༻͍ͯ͠ΔͷͰ ͔͢ʁʯ w ϢʔβͷಛੑʹΑ࣮ͬͯͷํ͕มΘΔ w ʮͲͷΑ͏ͳαʔϏεͱ࿈ܞΛ͍ͯ͠ΔͷͰ͔͢ʁʯ
w ࿈ܞͯͨ͠ΒϩάΠϯ࿈ܞͯͦ͠͏ είʔϓΛߜΔ
w σʔλϕʔεͷઃܭʢσʔλετΞཧղϨΠϠʔʣΛείʔϓΛ ߜͬͯѲ͢Δ w ʮϢʔβʔςʔϒϧͬͯͲΕͰ͔͢ʁʯ w ʮϑϨʔϜϫʔΫʢ03.ʣͬͯԿΛ͍ͬͯ·͔͢ʁʯ w 03.ʹΑͬͯίʔυ͔Β࣮ࡍͷϦϨʔγϣϯΛѲͰ͖ Δ
w είʔϓΛߜͬͯιʔείʔυΛಡΈղ͘ʢίʔυϨΠϠʔʣ w ʮϩάΠϯϖʔδͬͯ͜ͷ63-͚ͩͰ͔͢ʁʯ w ʮ)551ϦΫΤετͷΤϯτϦʔϙΠϯτΛڭ͍͑ͯͩ͘͞ʯ είʔϓΛߜΔ
ઐ༻4MBDLνϟϯωϧΛ࡞Δ
w ։ൃ͕يಓʹͷΔ·Ͱͷઐ༻4MBDLνϟϯωϧΛ࡞ͬͯɺ ͦ͜Ͱ͋ΒΏΔ࣭ٙɺͭͿ͖Λॻ͘ wʮࢲ͕௨Δ։ൃ։࢝·ͰͷಓͷΓ͖ͬͱ࣍ͷਓ௨Δʯ w ઐ༻ʹ͢Δ͜ͱͰλΠϜϥΠϯΛʮ։ൃ։࢝·Ͱͷʯ ʹߜΕΔ w 4MBDLͰ࣭Λ͍ͯ͠Δ͚ͩͰɺ։ൃ։࢝·Ͱͷͭ·ͮ ͖ϙΠϯτ͕ू͞Εͯίεύ͕͍͍
w ʮ࣭͗ͯ͢͠5-͕ྲྀΕͯ͠·͏ʯΈ͍ͨͳ৺ඞཁͳ ͍ɻͳͥͳΒઐ༻͔ͩΒ w ༗༻ͳͷυΩϡϝϯτԽɺيಓʹͷͬͨΒBSDIJWF ઐ༻4MBDLνϟϯωϧΛ࡞Δ
ดͨ͡։ൃڥΛखʹ͍ΕΔ
w ༻ҙ͞Ε͍ͯͨͷ7BHSBOUڥ ڞ௨σʔλϕʔε ϝʔ ϧαʔό w σβΠφʔར༻͢ΔͨΊɺ։ൃڥߏஙίετΛখ͞ ͨ݁͘͠Ռͩͱ༧ w ͏গ͠ґଘੑͳ͘ڥΛ࡞ΕΔΑ͏ʹͳΔͱΑΓίετ
͕খ͘͞ͳΓͦ͏ʢڥϨΠϠʔͷվળʣ w %PDLFSͰ։ൃʹඞཁͳڥ͚ͩʹ͢Δ w ϝʔϧૹ৴ػೳϝʔϧαʔόͳ͠ͰڥΛ༻ҙ͓ͯ͘͠ ͱศརͦ͏ ดͨ͡։ൃڥΛखʹ͍ΕΔ
%PDLFS 1)1 TFOENBJM # docker-compose.yml version: '3' services: www: image:
php:latest volumes: - ./maildir:/path/to/maildir - ./sendmail.ini:/etc/php/conf.d/sendmail.ini - ./mail.sh:/usr/local/bin/mail.sh # sendmail.ini sendmail_path = /usr/local/bin/mail.sh # mail.sh cat - >> /path/to/maildir/sendmail_out ࢀߟIUUQTRJJUBDPNTBXBOPCPMZJUFNTCBCFFCEDBF
؍ଌͰ͖֤ͨϨΠϠʔͷΦʔόʔϔουݮ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃڥ͔ ʢຊ൪ڥɾ։ൃڥʣ ͲͷΑ͏ͳίʔυ͔ ։ൃ Πϯϑϥߏਤ
1)1%PD *%& ։ൃڥͷ%PDLFSԽ αʔϏεϔϧϓ σϓϩΠͷ$IBUCPUԽ ςετίʔυ ϚΠάϨʔγϣϯϑΝΠϧ 1VMM3FRVFTU ϑϨʔϜϫʔΫ
w ։ൃ։࢝·ͰͷΦʔόʔϔουݮ࣮༷ʑͳϨΠϠʔ Ͱ࣮ࢪ͍ͯ͠Δ͜ͱ͕Θ͔Δ w ͬͱ৫ͱͯ͠ҙࣝͯ͠ઓུతʹ࣮ࢪ͢Δ͜ͱ͕Ͱ͖Ε ɺΑΓߴ͍ޮՌΛಘΔ͜ͱ͕Ͱ͖ΔͷͰͳ͍͔ʁ w l։ൃ։࢝·ͰͷΦʔόʔϔουzݮύλʔϯΛͬͱந Խͯ͠ମܥԽͯ͠Ͱ͖ΔͷͰͳ͍͔ʁ w
ͬͱใ͕ཉ͍͠ l։ൃ։࢝·ͰͷΦʔόʔϔουzݮ
l։ൃ։࢝·ͰͷΦʔόʔϔουz Λٕज़ʢΤϯδχΞϦϯάʣͰ ݮ͢Δ
w ਓྗͰͳ͘ɺٕज़ʹΑͬͯ։ൃ։࢝·ͰͷΦʔόʔϔο υΛݮͰ͖ΔΈΛఏڙ͢Δ w ٕज़ʹΑͬͯఏڙͰ͖Δͱ͍͏͜ͱʮ൚༻ੑ͕ߴ͍ʯ ʮ࠶ݱੑ͕͋Δʯͱ͍͏͜ͱ w ٕज़ͷੵΈॏͶʹΑͬͯʮ൚༻తʹʯʮ࠶ݱͯ͠ʯΦʔόʔ ϔουΛݶΓͳ͘খ͘͞Ͱ͖ΔΑ͏ʹͳΔͱɺ৫ͱͯ͠ ܧଓͯ͠ϝϦοτΛಘΔ͜ͱ͕Ͱ͖Δɻ
wͦͯ͠ɺΦʔόʔϔου͕খ͍͜͞ͱΛલఏͱͨ͠৫Λ ࡞Δ͜ͱ͕Ͱ͖Δɻ l։ൃ։࢝·ͰͷΦʔόʔϔουzΛٕज़Ͱݮ͢Δ
ٕज़ʹΑΔ l։ൃ։࢝·ͰͷΦʔόʔϔουz ݮͷྫ
શαʔόͷϢʔβϩʔϧ ͷίʔυԽ
w 45/4BMMPXTZPVUPFBTJMZNBOBHF -JOVYVTFSTXJUITJNQMF50.-CBTFE DPOpHVSBUJPO w *UDPOTJTUTPGTFSWFSBOEDMJFOU JNQMFNFOUBUJPO XIJDISFRVJSFTPOMZB GFXTUFQTUPJOTUBMM w
.PSFPWFS ZPVDBOVTFJUXJUIFYJTUJOH VTFSNBOBHFNFOUTZTUFNTTVDIBT -%"1 w IUUQTTUOTKQ
w ϖύϘͷ ͨͿΜ શαʔόʹల։͞Ε͍ͯΔ͜ͱͰɺ50.- ϑΝΠϧΛमਖ਼ͨ͠1VMM3FRVFTU͕Ϛʔδ͞ΕΔ͚ͩͰ αʔό܈ͷ44)ΞΫηεݖΛಘΔ͜ͱ͕Ͱ͖Δ wݖݶ͕(JUͰཧ͞Ε͍ͯΔͷڧྗ w ͋·Γʹࣗવʹ͋Γ͗ͯ͢ϖύϘύʔτφʔΕ͕ͪ w
Կ͋Δ͔Θ͔Βͳ͍αʔόΛӡ༻͢Δ͏͑Ͱɺ45/4ʹ ΑΔڥϨΠϠʔͰͷΦʔόʔϔουݮ૬େ͖͍ 45/4
σʔλϕʔευΩϡϝϯτͷ ܧଓతΠϯςάϨʔγϣϯ ͱपลใͱͷϦϯΫ
w UCMTJTB$*'SJFOEMZUPPMGPSEPDVNFOU BEBUBCBTF XSJUUFOJO(P w %PDVNFOUBEBUBCBTFBVUPNBUJDBMMZ JO('.GPSNBU0VUQVUEBUBCBTF TDIFNBJONBOZGPSNBUT w 4JOHMFCJOBSZ$*'SJFOEMZ
w 4VQQPSUNBOZEBUBCBTFT w 1PTUHSF42-.Z42-42-JUF42-4FSWFS #JH2VFSZ"NB[PO3FETIJGU$MPVE4QBOOFS w 8PSLBTMJOUFSGPSEBUBCBTF w IUUQTHJUIVCDPNL-P8UCMT
w σʔλϕʔευΩϡϝϯτΛੜͰ͖Δ͚ͩͰͳ͍ w $*ʹΈࠐΉ͜ͱͰυΩϡϝϯτͷߋ৽ΕΛػցతʹ͙͜ͱ ͕Ͱ͖ΔͷͰɺৗʹ࠷৽ͷঢ়ଶΛอͯΔ w ࣮σʔλϕʔεʹ"-5&3͢Δ͜ͱͳ͘ίϝϯτϦϨʔγϣϯΛ ՃฤूՄೳ w υΩϡϝϯτΛ.BSLEPXOͰग़ྗͰ͖ΔͷͰɺιʔείʔυͱಉ
͡ϦϙδτϦʹίϛοτ͢Δ͜ͱͰɺςʔϒϧͷΧϥϜͱιʔε ίʔυΛϒϥβ্ͰಡΜͰࣈͷ͝ͱ͘ϦϯΫ͢Δ͜ͱ͕Ͱ͖Δ w σʔλετΞཧղϨΠϠʔΛܧଓతʹαϙʔτ UCMT
$ brew install k1LoW/tap/tbls $ cat .tbls.yml dsn: mysql://dbuser:dbpass@$dbhost:3306/dbname docPath:
docs/schema $ tbls doc
طଘͷσʔλϕʔεΛରʹ͍͖ͳΓtbls docΛ࣮ߦͯ͠υΩϡϝϯτΛੜ ίϛοτ ϒϥϯνΛͬͯςʔϒϧͷ֓ཁΛ͍ͬͯΔϝϯόʔ͔ΒώΞϦϯάΛ͠ͳ ͕ΒUCMTZNMΛຒΊ͍ͯ͘ w ରςʔϒϧɾରΧϥϜͷ֓ཁ
w ςʔϒϧͷϦϨʔγϣϯ w ॏཁͳͱ͜ΖA<MJOL> 63- AΛ͔ͭͬͯυΩϡϝϯτͱιʔείʔυΛ ϦϯΫ 1VMM3FRVFTUϕʔεͰ֬ೝͯ͠Β͏ɺ࠷ޙʹtbls docΛ࣮ߦͯ͠υΩϡϝ ϯτΛ࠶ੜ ίϛοτ ҎԼ܁Γฦ͠ ܧଓతυΩϡϝϯτΞοϓσʔτ
w .JDSPTFSWJDFTڥαʔϏεԣஅͰͷ։ൃʹରԠͰ͖ΔΑ͏ʹɺ σʔλϕʔεΛ·͍ͨͩςʔϒϧϦϨʔγϣϯΛදݱͰ͖ΔΑ͏ʹ ͢Δ w /BNFTQBDF w 7FSTJPOJOH w 3%#.4͔ΒαϙʔτൣғΛ͞Βʹ͛Δ
w ֤छ03.ͱͷΠϯςάϨʔγϣϯ w %BUBCBTFEPDVNFOUBTB4FSWJDF UCMT/&95ʢߏʣ
l։ൃ։࢝·ͰͷΦʔόʔϔουz
w ్த+0*/Ͱ։ൃ։࢝·Ͱʹඞཁͳ͜ͱɺθϩ͔Β։ൃ͢Δͱ͖ͱ ಉ͡ w ҧ͏ͷ͢ͰʹαʔϏε͕ଘࡏͯ͠։ൃ͕ਐߦ͍ͯ͠Δ͔Ͳ͏͔ ͚ͩɻ࠷ॳʹΓࠐΉॴಉ͡ɻ w ్த+0*/ͷϊϋʹ։ൃ։࢝·ͰͷΦʔόʔϔουΛখ͘͢͞Δ ํ๏ w
ΦʔόʔϔουΛݮ͢Δͱ͍͏͜ͱɺ৫ͷ͋ΓํʹΠϯύΫ τΛ༩͑ΒΕΔ͘Β͍ॏཁͳ՝ͳͷͰੵۃతʹߟ͍͖͍͑ͯͨ w ͥͻօ͞ΜͷݟΛڞ༗͍ͯͩ͘͠͞ʂ ·ͱΊ
5IBOLZPV ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU