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
Yasuhiro Onishi
September 21, 2013
Technology
34
38k
Hatena Blog Development Flow
はてなブログの開発フロー
YAPC ASIA Tokyo 2013 で発表したものです
Yasuhiro Onishi
September 21, 2013
Tweet
Share
More Decks by Yasuhiro Onishi
See All by Yasuhiro Onishi
アニメから得た学びを発表会 in 関西 はてな スポンサーLT
onishi
1
14
大吉祥寺.pm 基調講演
onishi
3
6.7k
YAPC::Kyoto 2023 Keynote
onishi
3
9.8k
2016 Devsumi Kansai
onishi
3
1.4k
Hatena-Camp
onishi
2
4.3k
Hatena Blog for Engineer
onishi
2
3k
hatena-diary-blog-xss
onishi
5
1.1k
wget.pl
onishi
3
1.4k
Redmine::ChanでIRCからプロジェクト管理
onishi
5
5.3k
Other Decks in Technology
See All in Technology
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
7
1.8k
GitHub Universe: Evaluating RAG apps in GitHub Actions
pamelafox
0
150
一休.comレストランにおけるRustの活用
kymmt90
1
160
Vueで Webコンポーネントを作って Reactで使う / 20241030-cloudsign-vuefes_after_night
bengo4com
3
2.3k
【LT】ソフトウェア産業は進化しているのか? -Javaの想い出とともに- #jjug_ccc
takabow
0
160
AWS re:Inventを徹底的に楽しむためのTips / Tips for thoroughly enjoying AWS re:Invent
yuj1osm
0
300
Mobbing Practices
kawaguti
PRO
3
350
What's in a Postgres major release? An analysis of contributions in the v17 timeframe | Claire Giordano | PGConf EU 2024
clairegiordano
1
700
omakaseしないための.rubocop.yml のつくりかた / How to Build Your .rubocop.yml to Avoid Omakase #kaigionrails
linkers_tech
3
340
ガチ勢によるPipeCD運用大全〜滑らかなCI/CDを添えて〜 / ai-pipecd-encyclopedia
cyberagentdevelopers
PRO
2
160
新卒1年目が挑む!生成AI × マルチエージェントで実現する次世代オンボーディング / operation-ai-onboarding
cyberagentdevelopers
PRO
0
110
Comparing Apache Flink and Spark for Modern Stream Data Processing
sharonx
0
190
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
51
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
It's Worth the Effort
3n
183
27k
Faster Mobile Websites
deanohume
304
30k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
9
670
Being A Developer After 40
akosma
86
590k
GraphQLとの向き合い方2022年版
quramy
43
13k
[RailsConf 2023] Rails as a piece of cake
palkan
51
4.8k
Practical Orchestrator
shlominoach
186
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
49k
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