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.4k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
930
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
750
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
160
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
12
6.3k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
11k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
450
Cleanup handling in Go / Go Conference 2024
k1low
7
4.1k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
18
12k
Other Decks in Technology
See All in Technology
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
350
Ruby::Boxでできること、Refinementsでできること
joker1007
3
390
LLMと共に進化するプロセスを目指して
ymatsuwitter
11
3.1k
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
18
10k
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
1.8k
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.2k
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
240
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
110
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
7.7k
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
10
6.4k
JJUG CCC 2026 Spring AI時代の開発こそ標準化を武器に! ― 方式・プロセス・プラットフォームの標準化
s27watanabe
2
720
Unlocking the Apps
pimterry
0
230
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
130
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
600
Information Architects: The Missing Link in Design Systems
soysaucechin
0
960
How to Talk to Developers About Accessibility
jct
2
220
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Un-Boring Meetings
codingconduct
0
310
Game over? The fight for quality and originality in the time of robots
wayneb77
1
190
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
210
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
260
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