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
Hatena Blog Development Flow
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yasuhiro Onishi
September 21, 2013
Technology
38k
34
Share
Hatena Blog Development Flow
はてなブログの開発フロー
YAPC ASIA Tokyo 2013 で発表したものです
Yasuhiro Onishi
September 21, 2013
More Decks by Yasuhiro Onishi
See All by Yasuhiro Onishi
「手を動かした者だけが世界を変える」ソフトウェア開発だけではない開発者人生
onishi
18
11k
アニメから得た学びを発表会 in 関西 はてな スポンサーLT
onishi
1
84
大吉祥寺.pm 基調講演
onishi
4
8.9k
YAPC::Kyoto 2023 Keynote
onishi
3
11k
2016 Devsumi Kansai
onishi
3
1.6k
Hatena-Camp
onishi
2
4.6k
Hatena Blog for Engineer
onishi
2
3.2k
hatena-diary-blog-xss
onishi
5
1.2k
wget.pl
onishi
3
1.5k
Other Decks in Technology
See All in Technology
AI対話分析の夢と、汚いデータの現実 Looker / Dataplex / Dataform で実現する品質ファーストな基盤設計
waiwai2111
0
230
React 19×Rustツール 進化の「ズレ」を設計で埋める
remrem0090
1
100
アクセシビリティはすべての人のもの
tomokusaba
0
300
AI時代に越境し、 組織を変えるQAスキルの正体 / QA Skills for Transforming an Organization
mii3king
5
4.1k
OWASP APTSを眺めてみた
su3158
0
130
CyberAgent YJC Connect
shimaf4979
1
170
データモデリング通り #5オンライン勉強会: AIに『ビジネスの文脈』を教え込むデータモデリング
datayokocho
0
190
AI駆動開発で生産性を追いかけたら、行き着いたのは品質とシフトレフトだった
littlehands
0
450
Oracle Cloud Infrastructure presents managed, serverless MCP Servers for Oracle AI Database
thatjeffsmith
0
170
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
4
1.2k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8k
色を視る
yuzneri
0
320
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
4 Signs Your Business is Dying
shpigford
187
22k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
Documentation Writing (for coders)
carmenintech
77
5.3k
Building the Perfect Custom Keyboard
takai
2
750
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
100
Become a Pro
speakerdeck
PRO
31
5.9k
Discover your Explorer Soul
emna__ayadi
2
1.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
220
Transcript
2013/09/21 YAPC ASIA TOKYO גࣜձࣾͯͳ େ߁༟JEPOJTIJ ͯͳϒϩάͷ ։ൃϑϩʔ
ɹJEPOJTIJେ߁༟ ɹ0/*4)* ɹ!ZBTVIJSP@POJTIJ ɹגࣜձࣾͯͳ ɹͯͳϒϩά
%FWFM,5:1SPG 5FYU)BUFOB 8FC&NCFE 3FENJOF$IBO
ͯͳϒϩά IBUFOBCMPHDPN
ͯͳϒϩά w݄։ൃ։࢝ w1FSM w1MBDL14(* 4UBSMFU w$BSUPO w3PVUFS4JNQMF $POpH&/7 w%#*XSBQQFS42-.BLFS wDBQJTUSBOP
ϒϩάάϧʔϓͰɺͯͳεϖʔεͱ࿈ܞͯ͠ܝࣔ൘ΛઃஔͰ͖ΔΑ͏ʹ͠·ͨ͠ϒϩάͷίϝϯτ Λɺͯͳ*%Λࢦఆͯ͠ڋ൱Ͱ͖ΔΑ͏ʹ͠·ͨ͠εϚʔτϑΥϯJ1BEͰॻ͖͘͢ɺಡΈ͢ ͍ʂJ04ΞϓϦΛϢχόʔαϧΞϓϦԽ͠·ͨ͠'MJDLS͔Βͷը૾ͷݕࡧͱషΓ͚ʹରԠ͠·͠ ͨιʔείʔυΛ؆୯ʹڞ༗͠Α͏ʂ(JTU͔ΒͷషΓ͚ʹରԠ͠·ͨ͠Πϥ ετɾϚϯΨ࡞Λϒϩάʹߘ͠Α͏ʂQJYJW͔ΒͷషΓ͚ʹରԠ͠·ͨͯ͠ͳϒϩά"UPN1VC"1*Λެ ։͠·ͨ͠ɻαʔυύʔςΟͷϒϩάߘπʔϧΛར༻ɾ࡞Ͱ͖·͢هࣄΛॻ͖ͳ͕ΒදࣔΛ֬ ೝʂฤूը໘ʹϦΞϧλΠϜϓϨϏϡʔػೳΛՃ͠·ͨ͠ϒϩάάϧʔϓʹࢀՃ͢Δࡍʹɺهࣄ ͷΧςΰϦʔΛࢦఆͰ͖ΔΑ͏ʹ͠·ͨ͠ϔομϝχϡʔΛϦχϡʔΞϧʂϒϩάΛॻ͘ͱ͖ಡΉ ͱ͖ʹศརʹͳΓ·͓ͨ͠ֆඳ͖ػೳΛύϫʔΞοϓʂʮಁ໌ϖϯʯʮృΓͭͿ͠ʯʮεϙΠ τʯΛՃ͠·ͨ͠ಈըͷషΓ͚ΛڧԽʂχίχίಈըͱ*OTUBHSBNಈըʹରԠ͠·ͨ͠
ίϝϯτཝͳͲͰχοΫωʔϜΛදࣔɺϦϯΫϘλϯͰλΠτϧΛࣗಈऔಘɺͳͲͷػೳՃΛߦ͍· ͨ͠ϒϩάͰ؆୯ͳֆΛॻ͜͏ʂฤूαΠυόʔʹʮ͓ֆඳ͖ػೳʯΛՃ͠·ͨ͠ ฤूը໘ʹʮҾ༻ʯϘλϯΛՃɺஶ໊ਓϒϩάϖʔδΛެ։ɺ΄͔ϒϩάͰؒΛݟ͚ͭΑ ͏ʂͯͳϒϩάάϧʔϓΛެ։͠·ͨ͠5VNCMSͰڞ༗͘͢͠ͳͬͨ΄͔ɺଟ͘ͷػೳՃɾ मਖ਼Λߦ͍·ͨ͠.5ܗࣜͷϒϩάΠϯϙʔτʹରԠʂͯͳ֎ͷαʔϏε͔ΒҠߦ͘͢͠ͳΓ· ͨ͠ʮ-*/&ͰૹΔʯ΄͔ɺ͍͔ͭ͘ͷػೳՃɾमਖ਼Λߦ͍·ͨ͠σβΠϯς ʔϚςʔϚετΞΛ͞ΒʹڧԽͨ͠΄͔ɺԼॻ͖ҰཡͳͲΛՃ͠·͓ͨͨͤ͠͠·ͨ͠ɻͯ ͳϒϩάͱͯͳμΠΞϦʔͷશυϝΠϯͰ5XJUUFS$BSETʹରԠ͠·͍ͨ͠ϒϩάεοΩϦ ͱදࣔɻهࣄΛׂ͢Δʮଓ͖ΛಡΉʯه๏ΛϦϦʔε͠·ͨͯ͠ͳϒϩά͕5XJUUFS$BSETʹ ରԠ͠·ͨ͠ɻπΠʔτͰهࣄͷ֓ཁ͕දࣔ͞Ε·͢ʦه͋Γʧʦ࠶ه͋Γඒຯ͍͠ใΛϒϩ άʹʂฤूαΠυόʔ͔ΒϨετϥϯΛհͰ͖ΔΑ͏ʹ͠·ͨ͠σβΠϯςʔϚςʔϚετΞΛ ڧԽʂͦͷ΄͔ଟͷػೳՃɾमਖ਼Λߦ͍·ͨ͠εϚʔτϑΥϯεϚϗͷฤूπʔϧόʔ͕ύϫ ʔΞοϓʂషΓ͚ػೳͰɺͯͳ5γϟπΛΒ͓͏ʂʂهࣄ͝ͱͷϒοΫϚʔΫ͍͍Ͷʂ ΛɺτοϓϖʔδͰ֬ೝͰ͖ΔΑ͏ʹ͠·ͨ͠σβΠϯςʔϚϒϩάͬͱՄѪ͘ͳͪ͘Όʂ ެࣜσβΠϯςʔϚʹʮ#,6."ʯΛՃ͠·ͨ͠τϐοΫ͍·Γ্͕ͬͯΔ͋ͷʹࢀՃ͠ Α͏ʂʮτϐοΫʯϖʔδΛϦϦʔε͠·ͨ͠σβΠϯςʔϚΦϦδφϧͷςʔϚΛڞ༗͠Α͏ʂ ि࿈ଓ ৽ػೳ ϦϦʔε
QVMMSFRVFTUT DPNNJUT QFSZFBS
PO
ຊͷΞδΣϯμ w()&Λத৺ʹͨ͠։ൃϑϩʔ wࣗಈԽɾޮԽɾ҆ఆԽͷͨΊ ͷऔΈ w ։ൃϑϩʔҎ֎ͷ5*14গ͠
ຊͷ·ͱΊ wࣗಈԽͰ͖ΔͷࣗಈԽ͢Δ wϛεͷ࠶ൃࢭΛΈԽ͢Δ
Α͍։ൃϓϩηε wϓϩηεͷϑϨʔϜϫʔΫԽ w҆৺ײɺϚωδϝϯτੑ wඪ४Խ୭͕ͬͯେৎ wνʔϜαʔϏεʹ͋ͬͨͷ
Α͍։ൃϓϩηε wλεΫཧɺϫʔΫϑϩʔ wςετɺ$* wϦϦʔεཧ
λεΫཧɺ ϫʔΫϑϩʔ
:"1$
:"1$
:"1$
:"1$
wιʔγϟϧίʔσΟϯά w*TTVF1VMM3FRVFTU w1SJWBUF3FQPTJUPSZ wใڞ༗ɾϨϏϡʔπʔϧ
w༏ઌ͕ແ͍ wظ͕ͳ͍ wෳਓΞαΠϯͰ͖ͳ͍ wΨϯτνϟʔτͳʹͦΕ (JU)VC*TTVF
(JU)VCͷ*TTVF λεΫཧπʔϧͰͳ͍
͓͢͢Ί w(JU)VCϨϏϡʔπʔϧ wλεΫཧπʔϧͱซ༻͠Α͏ wUSFMMPDPNͱ͔
ͯͳϒϩάνʔϜ wπʔϧΛز͍ͭͨ͘ͳ͍ wແཧΓ(JU)VC͚ͩͰΔ
։ൃͷྲྀΕ wதظܭը wظܭը ݄ wΞαΠϯ w։ൃ wϦϦʔε
CSBODIઓུ wNBTUFS wຊ൪ͱಉҰɺৗʹ݈શ wTUBHJOHNBTUFS wϦϦʔεՄೳͳͷ͕શͯ NFSHF͞Ε͍ͯΔ wUPQJDCSBODI wػೳ͝ͱͷ։ൃϒϥϯν
CSBODIઓུ NBTUFS TUBHJOHNBTUFS UPQJDCSBODI UPQJDCSBODI SFMFBTF
*TTVF׆༻ w*TTVF w1SPEVDU#BDLMPH w୭Ͱొ͍͍ͯ͠ w"TTJHOFE*TTVF w4QSJOU#BDLMPH wΞαΠϯݖݶσΟϨΫλʔ w༏ઌϥϕϧͰ؆қཧ
*TTVF13 wணखͨ͠Β͙͢1VMM3FRVFTU wਐߦϥϕϧͰཧ wϨϏϡʔ͕ࡁΜͩΒTUBHJOH NBTUFSʹNFSHF
͙͢1VMM3FRVFTU w༷ݕ౼1VMM3FRVFTU্Ͱ w༷ͷϨϏϡʔ wσβΠφʔ1VMM3FRVFTU wͳΜͰ*TTVF্Ͱձ
*TTVFొ ΞαΠϯ13 ϨϏϡʔґཔ ϨϏϡʔத ϦϦʔεͪ
TUBUJOHNBTUFS NBTUFS ϦϦʔε ϥϕϧͰ ཧ
ΞαΠϯ wಉܥ౷ͷࣄΛಉ͡ΤϯδχΞ ʹΞαΠϯ͚ͭͮ͠ΔଐਓԽ wҙࣝͯ͠୲Λม͑Δ
ΞαΠϯ͓Έ͘͡ wIUUQ IJUPEFBQQTQPUDPN BTTJHO@PNJLVKJ
QVMMSFRMBCFM w1VMM3FRVFTUϥϕϧΛؾܰ ʹม͑ΒΕͳ͍ w"1*Ͱม͑ΒΕΔ w$ISPNF֦ுΛར༻
None
None
None
None
IUUQTHJUIVCDPN TIJNPCBZBTIJ QVMMSFRMBCFM
னա͗ϨϏϡʔλΠϜ wຖϥϯνޙʙ wʮϨϏϡʔͪʯϑϥάͷ *TTVFΛย͔ͬΒॲཧ͢Δ
৽ن*TTVFొ javascript: location.href = 'http://GHE/USER/REPOS/issues/new? title=' + document.getSelection().toString() || document.title
+ '&body=' + location.href
৽ن*TTVFొ
৽ن*TTVFొ UJUMF CPEZ BTTJHOFF NJMFTUPOF MBCFMT
NJMFTUPOF wNJMFTUPOFظΛઃఆͰ͖Δ
NJMFTUPOF wJTTVFΛNJMFTUPOFʹඥ͚Δ
ઢද
εέδϡʔϧཧ wσΟϨΫλʔ͕ઢදཧ wਐ֬ೝɺεέδϡʔϧҾ͖͠ XFFLMZ wΤϯδχΞ͕͏πʔϧHIF ͚ͩ
*TTVF·ͱΊ w*TTVFͰ༏ઌͱظ͕ܾΊ ΒΕͳ͍ w༏ઌΞαΠϯͷ༗ແͱϥϕ ϧͰ wظNJMFTUPOF͔ผͰཧ
ςετɺ$*
ςετͷجຊ wසൟʹ࣮ߦ͢ΔʢࣗಈԽ͢Δʣ wෆ۩߹͕͋ͬͨΒճؼςετ wཏతͳςετ͕͋Ε҆৺ͯ͠ ϦϑΝΫλϦϯάͰ͖Δ
ςετ w։ൃऀͷखݩͷςετ wϑΝΠϧมߋΛࣗಈݕ wKFOLJOTʹΑΔ$* wͲͷϒϥϯνͰɺQVTIͨ͠ Βࣗಈςετ wTUBHJOHNBTUFSͷQVTI ͞Βʹಛผѻ͍ ޙड़
KFOLJOT wϝΠϯ wશϒϥϯν͕QVTIຖʹςε τ͞ΕΔ wϦϦʔε wTUBHJOHNBTUFS NBTUFS wΧόϨοδ wΧόϨοδઐ༻ճΔ
ςετϞδϡʔϧ w)BSSJFU w5FTUNZTRME wQSPWFຖʹNZTRMEΛཱͯΔ w%#*Y3FXSJUF%4/
$BTQFS+4 w+4Ͱ࡞ΒΕͨ1IBOUPN+4ͷϢ ʔςΟϦςΟ wIUUQDBTQFSKTPSH wςετ$P⒎FF4DSJQUͰهड़ w;Δ·͍ͷςετΛॻ͘
None
ςϯϓϨʔτͷςετ w9TMBUFͷςϯϓϨʔτͷςετ wςϯϓϨʔτ͕ίϯύΠϧՄೳ͔ wຊޠؚ·Εͯͳ͍͔ ࠃࡍԽ
ίʔυΧόϨοδ
NFUSJDTςετ wίʔυͷෳࡶ͞Λςετ wϦϑΝΫλϦϯάରબఆ wIUUQTNFUBDQBOPSH NPEVMF1FSM.FUSJDT-JUF
॥తෳࡶ ϝιουͷ͞
ςετͷ·ͱΊ wগͣͭ͠ͰͰ͖ΔςετΛ૿ ͍ͯ͘͠ wෆ۩߹͕͋ͬͨΒճؼςετΛ ͭ͘ΔɺͳͲಉ͡ϛεΛ܁Γฦ ͞ͳ͍
ϦϦʔεཧ
ϦϦʔεཧ wͳΔ͘͘εςʔδϯάڥʹ w։ൃςετσϓϩΠ w͍ϑΟʔυόοΫ wେ͖ͳखΓΛແ͘͢
ܭըϦϦʔε w։ൃܭըͰϦϦʔεΛఆΊ͍ͯ Δͷ
ఆظϦϦʔε wि࣍ϦϦʔεʢຖिਫ༵ʣ wఆظϦϦʔεʹؒʹ߹ΘͤΑ͏ ͱ͍͏ҙ͕ࣝಇ͘ w۠Γ͕͍ͭͯ։ൃͷϦζϜ͕ ͏·ΕΔ
ܧଓϦϦʔε wTUBHJOHNBTUFSͷNFSHF ͕*3$ʹ௨͞ΕΔ w͋Δఔ૿͑ͨΒϦϦʔε w݁ہɺຖϦϦʔε ˞ͨͩ͠ɺٳલϦϦʔεېࢭ 18:25 ikachan01: ʲϦϦʔεʳHatena::Epic::Admin::EntryϦϑΝΫλϦϯά (4݅)
https://...
EFTDSJCFQVMMSFRVFTUSC wTUBHJOHNBTUFSͷςετ͕௨ ͬͨΒࣗಈ࣮ߦ͞ΕΔ wϦϦʔε༻ͷQVMMSFRVFTU wHGNͷνΣοΫϦετػೳ w<>νΣοΫϦετ0'' w<Y>νΣοΫϦετ0/
None
None
None
18:25 hitode909: https://... ஶ໊ʹΤϯδχΞΛՃ ͜ΕϦϦʔε͍͍ͯ͠Ͱ͔͢ > onishi 18:26 onishi ϦϦʔε͓Ͷ͕͍͠·͢
> hitode909 18:30 hitode909: https://... ஶ໊ʹΤϯδχΞΛՃ ϦϦʔε͠·ͨ͠ > #diary 18:31 hitode909: https://... ஶ໊ʹΤϯδχΞΛՃ ຊ൪֬ೝ͓ئ͍͠·͢ > hitode909
18:25 hitode909: https://... ஶ໊ʹΤϯδχΞΛՃ ͜ΕϦϦʔε͍͍ͯ͠Ͱ͔͢ > onishi 18:26 onishi ϦϦʔε͓Ͷ͕͍͠·͢
> hitode909 18:30 hitode909: https://... ஶ໊ʹΤϯδχΞΛՃ ϦϦʔε͠·ͨ͠ > #diary 18:31 hitode909: https://... ஶ໊ʹΤϯδχΞΛՃ ຊ൪֬ೝ͓ئ͍͠·͢ > hitode909 ίϐϖ ίϐϖ ίϐϖ
EFTDSJCFQVMMSFRVFTUSC ۙެ։༧ఆ
ϩʔΧϧ։ൃ wTFUVQεΫϦϓτ wNZTRMEJ⒎ wIUUQTHJUIVCDPN POJTIJNZTRMEJ⒎ wQMFOW SCFOW w$BSUPO #VOEMFS
EFWIPTU wτϐοΫϒϥϯνΛ؆୯ʹαʔ όʔ্Ͱ࣮ߦ͢ΔΈ wDBQEFWIPTUTFUVQ wϒϥϯν໊͔ΒࣗಈͰυϝΠϯ ͕ܾఆ͠ɺݕূڥ͕ग़དྷΔ
EFWIPTUSPVUJOH wSFWFSTFQSPYZ OHJOY ͷઃ ఆʹҰʑQVTIͨ͘͠ͳ͍ wOHJOY MVBͰಈతϧʔςΟϯ ά wOHY@MVBϞδϡʔϧ
location / { proxy_set_header Host $http_host; set $upstream_socket ""; rewrite_by_lua
' local m = ngx.re.match( ngx.var.host, "^([^.]+[.]dev)[.]" ) if m then ngx.var.upstream_socket = "/tmp/"..m[1]..".sock" else ngx.exit(ngx.HTTP_NOT_FOUND) end '; proxy_pass http://unix:$upstream_socket; }
ͦͷଞͷͱΓ͘Έ
"#ςετ wݕূՄೳͳͷΛϦϦʔε͢Δ w໎ͬͨΒग़ͯ֬͠ೝͨ͠ΒΑ͍ wˠϦϦʔεαΠΫϧ͕͘ͳΔ
"#ςετ wDIBOLPతͳͷ wಛఆͷ݅ͰػೳΛग़͚͠Δ wελοϑҙͰ݅Λ͍͡Ε Δ
ܭଌɾ౷ܭ wαʔϏεʹ͓͚Δ,1* wΫϦοΫܭଌ w+4ؚΊͨϖʔδͷදࣔ w6"ຖͷ+4Τϥʔ wΤϯδχΞຖͷJTTVF
ϖʔδදࣔ
JTTVF
*3$ར༻ wEJBSZνʔϜશһʹ௨ wϑΟʔυόοΫ wΤΰαʔν wTUBHJOHNBTUFSঢ়گ wKFOLJOTͷςετ࣮ߦ݁Ռ wຊ൪ͷΤϥʔ
ڭҭ wݚम wIUUQTHJUIVCDPN IBUFOB)BUFOB5FYUCPPL wίʔσΟϯάن wϖΞϓϩٛԽ
ϖΞϓϩάϥϛϯά wຖिϖΞ࣮ࢪ͢ΔͷΛϧʔϧԽ wҰਓͰΔͷ͕ਏ͍λεΫΛ Δ͖͔͚ͬʹ wศརؔΤσΟλઃఆͳͲͷ ҉͕ڞ༗͞ΕΔ
ϦϑΝΫλϦϯά wNFUSJDTΛࢀߟʹϦϑΝΫλϦ ϯάରΛબఆ wि˓࣌ؒͱ͔࣌ؒΛܾΊΔ wখ͍͞୯ҐͰ1VMM3FRVFTU
·ͱΊ wਓϛεΛ͢ΔͷͰΈԽɾ πʔϧར༻Λ৺͕͚Δ w։ൃϑϩʔͷվળʹίετΛ͔ ͚Δ w݁ہτʔλϧͷύϑΥʔϚϯ εɺαʔϏε্࣭͢Δ
ਓࡐืू w҆৺ͯ͠։ൃͰ͖ΔڥͰҰॹʹɹɹ ϒϩάΛ࡞Γ·͠ΐ͏ʂ www.hatena.ne.jp/company/staff
None
None