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
2.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
レガシーPerlと「今」を組み合わせ、開発を継続し続ける方法
YAPC::Fukuoka 2017 HAKATAでロリポップのコアAPIについて話しました。
Kazuhiko Yamashita
July 01, 2017
More Decks by Kazuhiko Yamashita
See All by Kazuhiko Yamashita
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.9k
継続的な負荷検証を目指して
pyama86
3
1.6k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
610
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.3k
Managing Database Migrations in Go Backend Systems
pyama86
0
490
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
2.2k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
11k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
2k
Other Decks in Programming
See All in Programming
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
220
GitHub Copilot CLIのいいところ
htkym
2
1.3k
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
1.1k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
3Dシーンの圧縮
fadis
1
660
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
250
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
160
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
1.6k
New "Type" system on PicoRuby
pocke
1
480
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
150
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
110
Webフレームワークの ベンチマークについて
yusukebe
0
130
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Unsuck your backbone
ammeep
672
58k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
190
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
RailsConf 2023
tenderlove
30
1.5k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
WENDY [Excerpt]
tessaabrams
11
38k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Navigating Weather and Climate Data
rabernat
0
210
How to make the Groovebox
asonas
2
2.2k
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