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
事業を差別化する技術を生み出す技術
pyama86
4
1.6k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
8k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.7k
Tuning GraphQL on Rails
pyama86
2
1.9k
ttlcacheのここがスゴい
pyama86
1
150
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
610
実践ARMアーキテクチャ移行
pyama86
2
2.5k
リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術
pyama86
3
1.3k
実践DevSecOps~クラウドネイティブとオンプレミスの間から~
pyama86
1
140
Other Decks in Programming
See All in Programming
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
430
GoのWebAssembly活用パターン紹介
syumai
2
950
推論された型の移植性エラーTS2742に挑む
teamlab
PRO
0
170
ts-morph実践:型を利用するcodemodのテクニック
ypresto
1
580
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
180
CSC307 Lecture 17
javiergs
PRO
0
110
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
18
5.5k
TypeScript製IaCツールのAWS CDKが様々な言語で実装できる理由 ~他言語変換の仕組み~ / cdk-language-transformation
gotok365
7
400
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
250
從零到一:搭建你的第一個 Observability 平台
blueswen
0
300
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
7
6.2k
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
The Cost Of JavaScript in 2023
addyosmani
49
8.3k
Code Review Best Practice
trishagee
68
18k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.8k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
25
2.8k
The Cult of Friendly URLs
andyhume
78
6.4k
Designing for humans not robots
tammielis
253
25k
Adopting Sorbet at Scale
ufuk
77
9.4k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
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