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
知らないWebアプリケーションの開発に途中からJOINしたとき、どこから切り込むか? / PH...
Search
Ken’ichiro Oyama
February 10, 2020
Technology
14k
36
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
知らないWebアプリケーションの開発に途中からJOINしたとき、どこから切り込むか? / PHPerKaigi 2020
https://fortee.jp/phperkaigi-2020/proposal/c8d6b9b1-29e4-48bd-b8bd-9f43f74d6265
Ken’ichiro Oyama
February 10, 2020
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
Introducing RFC9111 / YAPC::Fukuoka 2025
k1low
2
5.6k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
1k
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
810
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
190
ソフトウェア開発におけるインターフェイスという考え方 / 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
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
130
歴史から理解するクラウドインフラのしくみ
kizawa2020
0
180
最新IoT事例11選に学ぶ!現場の成功パターンと実践のコツ【SORACOM Discovery 2026】
soracom
PRO
0
120
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
620
人手不足への挑戦:車両保全を支えるIoTとクラウド内製化の道【SORACOM Discovery 2026】
soracom
PRO
0
150
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
330
GMOフィナンシャルゲートが挑む、「止まらない」決済インフラ構築の裏側【SORACOM Discovery 2026】
soracom
PRO
0
100
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
310
Power Automateアップデート情報
miyakemito
0
270
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
540
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
230
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
480
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
380
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
440
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
640
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
390
Accessibility Awareness
sabderemane
1
160
Color Theory Basics | Prateek | Gurzu
gurzu
0
400
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