Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レガシーPerlと「今」を組み合わせ、開発を継続し続ける方法

 レガシーPerlと「今」を組み合わせ、開発を継続し続ける方法

YAPC::Fukuoka 2017 HAKATAでロリポップのコアAPIについて話しました。

Kazuhiko Yamashita

July 01, 2017
Tweet

More Decks by Kazuhiko Yamashita

Other Decks in Programming

Transcript

  1. ʙ1FSMόϦόϦॻ͚Δͬͯਧ͍ͯϖύϘʹೖࣾ͠·ͨ͠ʙ
    ࢁԼ࿨඙(.01FQBCP *OD
    :"1$'VLVPLB)","5"
    ϨΨγʔ1FSMͱʮࠓʯΛ૊Έ߹
    Θͤɺ։ൃΛܧଓ͠ଓ͚Δํ๏

    View Slide

  2. IUUQTUFOTOBQPODPN
    νʔϑςΫχΧϧϦʔυ
    ࢁԼ࿨඙!QZBNB
    ϗεςΟϯάࣄۀ෦

    View Slide

  3. IUUQTUOTKQ

    View Slide

  4. View Slide

  5. ࠷ॳʹ͓఻͑͠·͢ɺ
    ๻͸όʔδϣϯΞοϓ͠ͳ͍ଆͷ
    ਓؒͰ͢

    View Slide

  6. ϩϦϙοϓͷ؆қγεςϜߏ੒ਤ
    1FSM
    ϩϦϙοϓͷίΞ"1*͸1FSM

    .Z42-4FSWFS
    'SPOU"1*
    3BJMT
    ;FOE
    ਃ͠ࠐΈαΠτ ίΞ"1*
    ϑϩϯτ"1* ϗεςΟϯάαʔό܈
    .BJM4FSWFS
    8FC4FSWFS
    ܖ໿৘ใ΍αʔό৘ใΛ
    ίϯτϩʔϧ
    αʔόϓϩϏδϣχϯάͷ
    ࣮ߦࢦࣔ

    View Slide

  7. View Slide


  8. View Slide

  9. wඇৗʹγϯϓϧͳ"1*Ͱ͋ΔͨΊɺੵۃతͳόʔδϣϯΞοϓͷಈػ
    ͕ͳ͔ͬͨ
    w಺෦"1*ͳͷͰɺϑϩϯτܥαʔόͱൺ΂ΔͱɺόʔδϣϯΞοϓͷ
    ༏ઌ౓͕Լ͕ͬͯ͠·͏
    w$1"/ͱͷဃ཭͕େ͖͘ͳΓɺͲΜͲΜόʔδϣϯΞοϓ͕ࠔ೉ʹ
    ͳ͍͖ͬͯɺ਎ಈ͖͕औΕͳ͍
    ϖύϘݻ༗ͷࣄ৘
    ͳͥ1FSM

    View Slide

  10. wόʔδϣϯΞοϓίετΛ෷͏ʹͯ͠΋ɺ1FSMͷॻ͖खΛूΊΔ͜ͱ
    ͕ͦΕͳΓʹࠔ೉Ͱ͋Δ
    w৽ن։ൃҊ݅Ͱ1FSM͕બ୒ࢶʹೖΓͮΒ͍͜ͱ͔Βࢢ৔ʹগͳ͍
    wࣾ಺ʹ͓͍ͯ΋ϝϯςφ͕ඇৗʹݶΒΕ͖ͯͭͭ͋Γɺݹࢀϝϯόʔ
    ͔ଞݴޠͰͦΕͳΓʹ࿅౓͕͋ΔΤϯδχΞ
    1FSMͷࣄ৘
    ͳͥ1FSM

    View Slide

  11. ϩϦϙοϓʂ͸·ͩ·ͩ੒௕աఔ
    αʔϏε͕ਐԽ͢ΔͳΒ͹ɺ
    "1*΋ܧଓత։ൃ͕ඞཁ

    View Slide

  12. ܧଓత։ൃΛߦ͏ͨΊʹ৐Γӽ͑ͨ΋ͷ
    wڞ༻αʔόΛར༻ͨ͠։ൃ؀ڥ
    wϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    wΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ

    View Slide

  13. ڞ༻αʔόΛར༻ͨ͠։ൃ؀ڥ

    View Slide

  14. ڞ༻αʔόΛར༻ͨ͠։ൃ؀ڥ
    %FW"1*
    .Z42-4FSWFS
    .BJM4FSWFS
    8FC4FSWFS
    ैདྷ
    ։ൃ؀ڥΛίϯςφԽ͠ɺ
    ڞ༻ʹΑΔϦιʔεڝ߹Λແ͘͢
    $POUBJOFS
    ݱࡏ
    %FW"1*
    .Z42-
    4FSWFS
    .PDL.BJM
    .PDL8FC

    View Slide

  15. ڞ༻αʔόΛར༻ͨ͠։ൃ؀ڥ
    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

    View Slide

  16. ϝϯςφϯε͞Ε͍ͯͳ͍
    Ϣχοτςετ

    View Slide

  17. ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    ଞͷίϯϙʔωϯτͱີ݁߹ͳͷͰ
    ςετ͕ॻ͖ͮΒ͍ɺࣦഊ͠΍͍͢
    %FW"1*
    8FC4FSWFS
    XFCFYBNQMFKQ
    ਃ͠ࠐΈ
    8FCαʔόʹFYBNQMFKQͷ
    σΟϨΫτϦΛ࡞੒
    8FCαʔόͷਃࠐΈςετ
    FYBNQMFKQͷਃࠐ৘ใ͕%#ʹ͋Δͳ͍
    8FC4FSWFSͱ઀ଓ͞Ε͍ͯΔ͍ͳ͍
    8FC4FSWFSͷσΟϨΫτϦ͸͋Δͳ͍

    View Slide

  18. ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    .PDLԽ
    %#ͷঢ়ଶΛ࣋ͨͳ͍

    View Slide

  19. ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    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,
    };
    }
    }
    },
    });

    View Slide

  20. ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    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-
    ϕʔεσʔλΛݩʹ
    ৽نΠϯελϯεىಈ
    ςετέʔε͝ͱʹ࢖༻͢Δ
    %#͕ҟͳΔͨΊ
    ΫϦʔχϯά͕ෆཁ

    View Slide

  21. ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    5FTU%#MPBE@pYUVSFΛར༻͠ɺ
    ςετϨίʔυͷ४උΛ༰қʹͨ͠
    UEBUBNZTRM
    .Z42-
    UFTUDBTF"
    UFTUDBTF#
    .Z42-
    ϕʔεσʔλΛݩʹ
    ৽نΠϯελϯεىಈ
    DBTF@BZNM
    EPNBJOFYBNQMFDPN
    VTFSVTFS@
    QBUIIPNFVTFS@
    ʜ

    View Slide

  22. ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
    %SPOFJPͰࣗಈςετ࣮ߦ
    IUUQTXXXTMJEFTIBSFOFUVE[VSBESPOFJP
    PQFOTUBDL
    %PDLFS4XBSN
    7.
    ESPOFJP
    7. 7. 7. 7. 7. 7.

    View Slide

  23. ΦϖϨʔγϣϯͷ
    ΦʔτϝʔγϣϯԽ

    View Slide

  24. ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ
    MJHIUIUUQEͷ੍໿͕͋Γɺ
    खಈͰσϓϩΠ͢Δӡ༻
    σϓϩΠαʔόʹϩάΠϯ͠ɺHJUDMPOF
    EFQMPZTIΛ࣮ߦ͢Δ
    ର࿩తϓϩϯϓτʹΑΓHJUQVMMͳͲΛ࣮ߦ
    STZODͰσϓϩΠઌʹ഑෍
    ଴ػܥαʔόͷGBTUDHJɺMJHIUUQEΛ࠶ىಈ
    खಈͰಈ࡞֬ೝ
    ݱ༻ܥαʔόͷGBTUDHJɺMJHIUUQEΛ࠶ىಈ
    σϓϩΠखॱ
    खॱ͕ଟ͘ɺ͕͔͔࣌ؒΔɺଋറ͞ΕΔ
    ಈ࡞֬ೝ͕ਓʹґଘ͍ͯ͠Δ
    ࠶ىಈ࿙ΕͳͲΛ๷͙͜ͱ͕ग़དྷͳ͍
    ՝୊

    View Slide

  25. $BQJTUSBOP

    View Slide

  26. ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ
    $BQJTUSBOPΛར༻͠ɺ
    σϓϩΠ͔Βಈ࡞֬ೝ·ͰΛࣗಈԽ
    CVOEMFFYFD
    TUBHJOHEFQMPZ
    KFOLJOKPC TMBDLOPUJGZ
    CVOEMFFYFD
    QSPEVDUJPOEFQMPZ
    εςʔδϯάσϓϩΠޙɺ
    MJHIUUQE΍GBTUDHJͷ࠶ىಈ
    ࣗಈͰΠϯςάϨʔγϣϯςετΛ
    ࣮ߦ
    ςετͷ݁ՌΛ4MBDL௨஌ ਖ਼ৗͰ͋Ε͹ຊ൪؀ڥ΁
    σϓϩΠ

    View Slide

  27. ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ
    ͋ΒΏΔΦϖϨʔγϣϯΛ
    3BLFͰ࣮ݱ
    ɾSBLFEFQMPZσϓϩΠͷҰ࿈ͷྲྀΕΛ࣮ߦ
    ɾSBLFEPDLFS։ൃ؀ڥͷEPDLFSΛىಈ
    ɾSBLFEC%#εΩʔϚͷߋ৽

    View Slide

  28. ͜Ε͘Β͍΍Δͱɺ
    ʮ͜ΕͳΜ͔։ൃग़དྷΔΜ͡ΌͶʁʯ
    ײ͕ৢ੒͞ΕΔ

    View Slide

  29. ೔ʑ։ൃӡ༻͢Δٕज़͸ΑΓྑ͍΋ͷΛબͼ͍ͨ
    ։ൃ͕ग़དྷΔঢ়ଶʹͳͬͨͱͯ͠΋
    ָ؍తͳঢ়گͰ͸ͳ͍
    w1FSMΛ࢖͍ଓ͚Δ৔߹ɺ࠷৽ͷઃܭ΍ɺϞδϡʔϧΛར༻͢Δػձ
    ͸ͳ͍
    wϝϯςφ͕ݮΔͱ͍͏͜ͱ͸ɺকདྷతʹ͸ةػతঢ়گΛট͘Մೳੑ͕
    ͋Δ

    View Slide

  30. /FYU4UFQ
    (PMBOH

    View Slide

  31. 8IZ
    3VTUͱൺ΂ͯ৘ใྔ͕ଟ͍͜ͱ΍ɺ
    ग़དྷΔ͜ͱͷࠩҟ͕গͳ͍
    wੈքతʹීٴͨ͠എܠ͕͋Γɺ೔ຊޠͷ৘ใ΋๛෋Ͱ͋Δ
    wՄൖੑ͕ඇৗʹߴ͍ͨΊɺӡ༻4IFMMͷஔ͖׵͑ʹద͍ͯ͠Δ
    wϗεςΟϯά͸αʔό͕঎ࡐͳͷͰɺςετͷͳ͍πʔϧ͸࢖͍ͨ͘
    ͳ͍
    wงғؾͰ͍͍ͩͨ
    ߴ଎ʹಈ͘

    View Slide

  32. ϑϨʔϜϫʔΫͷબ୒
    طଘͷॲཧ͕ඇৗʹγϯϓϧͰ͋ΔͨΊ
    &DIPΛબ୒ͨ͠
    wখ͞ͳϓϩδΣΫτͰ3FWFMͱ&DIPΛൺֱ։ൃͨ͠
    w3FWFM͸όονॲཧͳͲ΋αϙʔτ͓ͯ͠Γɺ3BJMTͬΆ͞͸͋ͬͨ
    ͕ɺ֮͑Δ͜ͱ΋ଟ͍
    w&DIP͸࣮૷͕ബ͘ɺϛυϧ΢ΣΞ͕ॻ͖΍͍͢ɺ͋Δఔ౓εΫϦϓ
    ςΟϯά͕ඞཁͳ͜ͱͰϝϯόʔͷ(PMBOHͷशಘʹ΋ͪΐ͏Ͳྑ͍
    ϘϦϡʔϜʹࢥ͑ͨ

    View Slide

  33. ࠔ͍ͬͯΔ͜ͱ
    (PMBOHͰ03.͸݁ߏͭΒ͍
    w42-ΛͳΔ΂͘ॻ͖ͨ͘ͳ͔ͬͨͷͰɺHPSNΛબ୒ͨ͠
    w"DUJWF3FDPSEͰҭͬͨͷͰɺϦϨʔγϣϯͷख͕ؒ݁ߏͭΒ͍
    w3FMBUFE΍1SFMPBEͳͲϦϨʔγϣϯઌͷϨίʔυΛऔಘ͢Δํ๏͕
    ෳ਺͋ͬͯɺ(PMBOHͬΆ͘ͳ͍
    wϞσϧͷҾ਺͕੩తܕ෇͚ͳͨΊѻ͍ͮΒ͍͜ͱ͔Βɺ$POUSPMMFS͕
    %#ʹؔ৺Λ࣮࣋ͭ૷͕ੈͷதʹଟ͍

    View Slide

  34. CVU
    ͔͠͠

    View Slide

  35. ݁Ռͱͯ͠গͮͭ͠ΠϯϑϥνʔϜʹ
    (PMBOH͕ࠜ෇͖ॳΊɺ
    ςετΛॻ͘श׳΋͍͖ͭͯͨ

    View Slide

  36. ࠷ޙʹ
    wܧଓత։ൃ͕Մೳͳঢ়گ͕࡞ΕΔɺηΩϡϦςΟతͳ
    ཁ͕݅ͳ͚Ε͹ແཧʹόʔδϣϯΛ্͛Δඞཁ͸ͳ͍
    wࡢࠓͷݴޠͷݯྲྀ͸1FSMʹ͋Δͱײ͡Δ͘Β͍1FSMʹ
    ͸Ϟδϡʔϧॆ࣮ͯ͠ΔͷͰࠓ෩ʹ΋ͳΕΔ
    w/FYU4UFQ͸ྲྀߦΓ͚ͩͰͳ͘ɺνʔϜϚονϯά΋
    ߟ͑ͨબ୒Λ͠Α͏

    View Slide

  37. ܅΋ϖύϘͰಇ͔ͳ͍͔ʁ
    ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU

    View Slide