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
レガシーPerlと「今」を組み合わせ、開発を継続し続ける方法
Search
Kazuhiko Yamashita
July 01, 2017
Programming
1
2.4k
レガシーPerlと「今」を組み合わせ、開発を継続し続ける方法
YAPC::Fukuoka 2017 HAKATAでロリポップのコアAPIについて話しました。
Kazuhiko Yamashita
July 01, 2017
Tweet
Share
More Decks by Kazuhiko Yamashita
See All by Kazuhiko Yamashita
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
5k
Managing Database Migrations in Go Backend Systems
pyama86
0
150
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
1.9k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
9.9k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.9k
Tuning GraphQL on Rails
pyama86
2
2.4k
ttlcacheのここがスゴい
pyama86
1
220
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
690
Other Decks in Programming
See All in Programming
GoLab2025 Recap
kuro_kurorrr
0
820
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
220
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
220
ゆくKotlin くるRust
exoego
1
190
JETLS.jl ─ A New Language Server for Julia
abap34
2
470
gunshi
kazupon
1
140
Grafana:建立系統全知視角的捷徑
blueswen
0
270
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
240
ThorVG Viewer In VS Code
nors
0
540
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
600
愛される翻訳の秘訣
kishikawakatsumi
3
370
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Documentation Writing (for coders)
carmenintech
77
5.2k
sira's awesome portfolio website redesign presentation
elsirapls
0
110
The Language of Interfaces
destraynor
162
26k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
880
Designing for humans not robots
tammielis
254
26k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
400
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
400
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
120
Become a Pro
speakerdeck
PRO
31
5.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
Transcript
ʙ1FSMόϦόϦॻ͚Δͬͯਧ͍ͯϖύϘʹೖࣾ͠·ͨ͠ʙ ࢁԼ(.01FQBCP *OD :"1$'VLVPLB)","5" ϨΨγʔ1FSMͱʮࠓʯΛΈ߹ Θͤɺ։ൃΛܧଓ͠ଓ͚Δํ๏
IUUQTUFOTOBQPODPN νʔϑςΫχΧϧϦʔυ ࢁԼ!QZBNB ϗεςΟϯάࣄۀ෦
IUUQTUOTKQ
None
࠷ॳʹ͓͑͠·͢ɺ όʔδϣϯΞοϓ͠ͳ͍ଆͷ ਓؒͰ͢
ϩϦϙοϓͷ؆қγεςϜߏਤ 1FSM ϩϦϙοϓͷίΞ"1*1FSM .Z42-4FSWFS 'SPOU"1* 3BJMT ;FOE ਃ͠ࠐΈαΠτ ίΞ"1*
ϑϩϯτ"1* ϗεςΟϯάαʔό܈ .BJM4FSWFS 8FC4FSWFS ܖใαʔόใΛ ίϯτϩʔϧ αʔόϓϩϏδϣχϯάͷ ࣮ߦࢦࣔ
None
wඇৗʹγϯϓϧͳ"1*Ͱ͋ΔͨΊɺੵۃతͳόʔδϣϯΞοϓͷಈػ ͕ͳ͔ͬͨ w෦"1*ͳͷͰɺϑϩϯτܥαʔόͱൺΔͱɺόʔδϣϯΞοϓͷ ༏ઌ͕Լ͕ͬͯ͠·͏ w$1"/ͱͷဃ͕େ͖͘ͳΓɺͲΜͲΜόʔδϣϯΞοϓ͕ࠔʹ ͳ͍͖ͬͯɺಈ͖͕औΕͳ͍ ϖύϘݻ༗ͷࣄ ͳͥ1FSM
wόʔδϣϯΞοϓίετΛ͏ʹͯ͠ɺ1FSMͷॻ͖खΛूΊΔ͜ͱ ͕ͦΕͳΓʹࠔͰ͋Δ w৽ن։ൃҊ݅Ͱ1FSM͕બࢶʹೖΓͮΒ͍͜ͱ͔Βࢢʹগͳ͍ wࣾʹ͓͍ͯϝϯςφ͕ඇৗʹݶΒΕ͖ͯͭͭ͋Γɺݹࢀϝϯόʔ ͔ଞݴޠͰͦΕͳΓʹ࿅͕͋ΔΤϯδχΞ 1FSMͷࣄ ͳͥ1FSM
ϩϦϙοϓʂ·ͩ·ͩաఔ αʔϏε͕ਐԽ͢ΔͳΒɺ "1*ܧଓత։ൃ͕ඞཁ
ܧଓత։ൃΛߦ͏ͨΊʹΓӽ͑ͨͷ wڞ༻αʔόΛར༻ͨ͠։ൃڥ wϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ wΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ
ڞ༻αʔόΛར༻ͨ͠։ൃڥ
ڞ༻αʔόΛར༻ͨ͠։ൃڥ %FW"1* .Z42-4FSWFS .BJM4FSWFS 8FC4FSWFS ैདྷ ։ൃڥΛίϯςφԽ͠ɺ ڞ༻ʹΑΔϦιʔεڝ߹Λແ͘͢ $POUBJOFS ݱࡏ
%FW"1* .Z42- 4FSWFS .PDL.BJM .PDL8FC
ڞ༻αʔόΛར༻ͨ͠։ൃڥ 1FSMͷڥ͔ΒUBSH[Ͱ ϞδϡʔϧΛશͯநग़͠ίϯςφԽ $ tar zcvf site_perl.tar.gz /usr/lib64/perl5/site_perl/5.8.8 # in
docker # tar zxvf site_perl.tar.gz # docker commit xxxxx private.pepabo.com/coreapi:latest
ϝϯςφϯε͞Ε͍ͯͳ͍ Ϣχοτςετ
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ ଞͷίϯϙʔωϯτͱີ݁߹ͳͷͰ ςετ͕ॻ͖ͮΒ͍ɺࣦഊ͍͢͠ %FW"1* 8FC4FSWFS XFCFYBNQMFKQ ਃ͠ࠐΈ 8FCαʔόʹFYBNQMFKQͷ σΟϨΫτϦΛ࡞ 8FCαʔόͷਃࠐΈςετ
FYBNQMFKQͷਃࠐใ͕%#ʹ͋Δͳ͍ 8FC4FSWFSͱଓ͞Ε͍ͯΔ͍ͳ͍ 8FC4FSWFSͷσΟϨΫτϦ͋Δͳ͍
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ .PDLԽ %#ͷঢ়ଶΛ࣋ͨͳ͍
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ 5FTU.PDL(VBSEΛར༻͠ɺ ֎෦ίϯϙʔωϯτશͯ.PDLԽ my $mock = mock_guard(‘Hosting::Server::API::Ext', +{ run =>
sub { my($self, $params) = @_; switch ($params->{'parameters'}) { case /—domain=example.com/ { return { key => $dummy_key, }; } } }, });
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ 5FTUNZTRMEΛར༻͠ɺ ςετσʔλͷিಥΛճආ͢Δ sub new { my %self; my $class
= shift; $self->{mysqld} = Test::mysqld->new(my_cnf => {'port' => '3306'}, copy_data_from => 't/data/mysql'); $self->{dbh} = DBI->connect($self->{mysqld}->dsn, '', '') or die 'cannot connect to db'; return bless $self, $class; } UEBUBNZTRM .Z42- UFTUDBTF" UFTUDBTF# .Z42- ϕʔεσʔλΛݩʹ ৽نΠϯελϯεىಈ ςετέʔε͝ͱʹ༻͢Δ %#͕ҟͳΔͨΊ ΫϦʔχϯά͕ෆཁ
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ 5FTU%#MPBE@pYUVSFΛར༻͠ɺ ςετϨίʔυͷ४උΛ༰қʹͨ͠ UEBUBNZTRM .Z42- UFTUDBTF" UFTUDBTF# .Z42- ϕʔεσʔλΛݩʹ ৽نΠϯελϯεىಈ
DBTF@BZNM EPNBJOFYBNQMFDPN VTFSVTFS@ QBUIIPNFVTFS@ ʜ
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ %SPOFJPͰࣗಈςετ࣮ߦ IUUQTXXXTMJEFTIBSFOFUVE[VSBESPOFJP PQFOTUBDL %PDLFS4XBSN 7. ESPOFJP 7. 7. 7.
7. 7. 7.
ΦϖϨʔγϣϯͷ ΦʔτϝʔγϣϯԽ
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ MJHIUIUUQEͷ੍͕͋Γɺ खಈͰσϓϩΠ͢Δӡ༻ σϓϩΠαʔόʹϩάΠϯ͠ɺHJUDMPOF EFQMPZTIΛ࣮ߦ͢Δ ରతϓϩϯϓτʹΑΓHJUQVMMͳͲΛ࣮ߦ STZODͰσϓϩΠઌʹ ػܥαʔόͷGBTUDHJɺMJHIUUQEΛ࠶ىಈ खಈͰಈ࡞֬ೝ ݱ༻ܥαʔόͷGBTUDHJɺMJHIUUQEΛ࠶ىಈ
σϓϩΠखॱ खॱ͕ଟ͘ɺ͕͔͔࣌ؒΔɺଋറ͞ΕΔ ಈ࡞֬ೝ͕ਓʹґଘ͍ͯ͠Δ ࠶ىಈ࿙ΕͳͲΛ͙͜ͱ͕ग़དྷͳ͍ ՝
$BQJTUSBOP
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ $BQJTUSBOPΛར༻͠ɺ σϓϩΠ͔Βಈ࡞֬ೝ·ͰΛࣗಈԽ CVOEMFFYFD TUBHJOHEFQMPZ KFOLJOKPC TMBDLOPUJGZ CVOEMFFYFD QSPEVDUJPOEFQMPZ εςʔδϯάσϓϩΠޙɺ
MJHIUUQEGBTUDHJͷ࠶ىಈ ࣗಈͰΠϯςάϨʔγϣϯςετΛ ࣮ߦ ςετͷ݁ՌΛ4MBDL௨ ਖ਼ৗͰ͋Εຊ൪ڥ σϓϩΠ
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ ͋ΒΏΔΦϖϨʔγϣϯΛ 3BLFͰ࣮ݱ ɾSBLFEFQMPZσϓϩΠͷҰ࿈ͷྲྀΕΛ࣮ߦ ɾSBLFEPDLFS։ൃڥͷEPDLFSΛىಈ ɾSBLFEC%#εΩʔϚͷߋ৽
͜Ε͘Β͍Δͱɺ ʮ͜ΕͳΜ͔։ൃग़དྷΔΜ͡ΌͶʁʯ ײ͕ৢ͞ΕΔ
ʑ։ൃӡ༻͢Δٕज़ΑΓྑ͍ͷΛબͼ͍ͨ ։ൃ͕ग़དྷΔঢ়ଶʹͳͬͨͱͯ͠ ָ؍తͳঢ়گͰͳ͍ w1FSMΛ͍ଓ͚Δ߹ɺ࠷৽ͷઃܭɺϞδϡʔϧΛར༻͢Δػձ ͳ͍ wϝϯςφ͕ݮΔͱ͍͏͜ͱɺকདྷతʹةػతঢ়گΛট͘Մೳੑ͕ ͋Δ
/FYU4UFQ (PMBOH
8IZ 3VTUͱൺͯใྔ͕ଟ͍͜ͱɺ ग़དྷΔ͜ͱͷࠩҟ͕গͳ͍ wੈքతʹීٴͨ͠എܠ͕͋Γɺຊޠͷใ๛Ͱ͋Δ wՄൖੑ͕ඇৗʹߴ͍ͨΊɺӡ༻4IFMMͷஔ͖͑ʹద͍ͯ͠Δ wϗεςΟϯάαʔό͕ࡐͳͷͰɺςετͷͳ͍πʔϧ͍ͨ͘ ͳ͍ wงғؾͰ͍͍ͩͨ ߴʹಈ͘
ϑϨʔϜϫʔΫͷબ طଘͷॲཧ͕ඇৗʹγϯϓϧͰ͋ΔͨΊ &DIPΛબͨ͠ wখ͞ͳϓϩδΣΫτͰ3FWFMͱ&DIPΛൺֱ։ൃͨ͠ w3FWFMόονॲཧͳͲαϙʔτ͓ͯ͠Γɺ3BJMTͬΆ͋ͬͨ͞ ͕ɺ֮͑Δ͜ͱଟ͍ w&DIP࣮͕ബ͘ɺϛυϧΣΞ͕ॻ͖͍͢ɺ͋ΔఔεΫϦϓ ςΟϯά͕ඞཁͳ͜ͱͰϝϯόʔͷ(PMBOHͷशಘʹͪΐ͏Ͳྑ͍ ϘϦϡʔϜʹࢥ͑ͨ
ࠔ͍ͬͯΔ͜ͱ (PMBOHͰ03.݁ߏͭΒ͍ w42-ΛͳΔ͘ॻ͖ͨ͘ͳ͔ͬͨͷͰɺHPSNΛબͨ͠ w"DUJWF3FDPSEͰҭͬͨͷͰɺϦϨʔγϣϯͷख͕ؒ݁ߏͭΒ͍ w3FMBUFE1SFMPBEͳͲϦϨʔγϣϯઌͷϨίʔυΛऔಘ͢Δํ๏͕ ෳ͋ͬͯɺ(PMBOHͬΆ͘ͳ͍ wϞσϧͷҾ͕੩తܕ͚ͳͨΊѻ͍ͮΒ͍͜ͱ͔Βɺ$POUSPMMFS͕ %#ʹؔ৺Λ࣮͕࣋ͭੈͷதʹଟ͍
CVU ͔͠͠
݁Ռͱͯ͠গͮͭ͠ΠϯϑϥνʔϜʹ (PMBOH͕͖ࠜॳΊɺ ςετΛॻ͘श׳͍͖ͭͯͨ
࠷ޙʹ wܧଓత։ൃ͕Մೳͳঢ়گ͕࡞ΕΔɺηΩϡϦςΟతͳ ཁ͕݅ͳ͚ΕແཧʹόʔδϣϯΛ্͛Δඞཁͳ͍ wࡢࠓͷݴޠͷݯྲྀ1FSMʹ͋Δͱײ͡Δ͘Β͍1FSMʹ Ϟδϡʔϧॆ࣮ͯ͠ΔͷͰࠓ෩ʹͳΕΔ w/FYU4UFQྲྀߦΓ͚ͩͰͳ͘ɺνʔϜϚονϯά ߟ͑ͨબΛ͠Α͏
܅ϖύϘͰಇ͔ͳ͍͔ʁ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU