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

レガシーPHPで require_once とかいう呪いを退治できるかもしれない

レガシーPHPで require_once とかいう呪いを退治できるかもしれない

第125回 PHP勉強会@東京の発表資料です
公開しているライブラリはコチラになります。
https://packagist.org/packages/nazonohito51/require-path-fixer

Satoshi Kawashima

April 25, 2018
Tweet

More Decks by Satoshi Kawashima

Other Decks in Technology

Transcript

  1. ઒ౡܛ(.01FQBCP *OD
    1)1ษڧձ
    ϨΨγʔ1)1Ͱ
    [email protected]ͱ͔͍͏ढ͍Λ
    ୀ࣏Ͱ͖Δ͔΋͠Εͳ͍

    View Slide

  2. ΤϯδχΞ
    ઒ౡܛ!OB[POPIJUP
    4)ࣄۀ෦+6(&.νʔϜ
    IUUQOB[POPIJUPKVHFNKQ

    View Slide

  3. [email protected]ͬͯʁ
    wଞͷϑΝΠϧΛ1)1ϑΝΠϧͱͯ͠ಡΈࠐΜͰධՁ͢Δݴޠߏ଄
    [email protected]@PODF͕͋Δ
    wίʔυΛෳ਺ϑΝΠϧʹ෼ׂ͢ΔͨΊͷखஈ
    wแׅతͳಡΈࠐΈϧʔϧ·ͰܾΊͯ͸͍ͳ͍ͷͰɺ࢖͍ख͕டংΛอ
    ͨͳ͚Ε͹͙͢ෳࡶԽ͢Δ

    View Slide

  4. டংʜʁ

    View Slide

  5. ॻ͖ͬ΀Γ͕όϥόϥ

    View Slide

  6. [email protected]ϕʔεͰॻ͖͍ͨ೿
    ΧϨϯτσΟϨΫτϦϕʔεͰॻ͖͍ͨ೿

    Ͱด͍ͨ͡೿
    ม਺ϕʔεͰॻ͖͍ͨ೿
    จࣈྻ࿈݁͸εϖʔεͳ͠Ͱܨ͍͛ͨ೿

    ͷखલʹεϖʔεೖΕ͍ͨ೿
    Α͘Θ͔ΒΜج४Ͱจࣈྻ෼͚͍ͨ೿
    Α͘Θ͔ΒΜج४Ͱվߦ͍ͨ͠೿
    จࣈྻ࿈݁͸υοτͷࠨଆ͚ͩεϖʔε೿
    ఆ਺ϕʔε೿
    @@%*[email protected]@೿
    EJSOBNF @@'*-&@@
    ೿
    ॻ͖ͬ΀Γ͕όϥόϥ
    EJSOBNF࿈ൃ೿

    View Slide

  7. டংͳΜͯແ͔ͬͨ
    w ಡΈࠐΈϧʔϧ͕ແ͍PSܧঝͰ͖ͯͳ͍
    w ͍͍ͩͨͦͷ࣌ͷਓͷ޷ΈͰॻ͔Ε͍ͯ
    Δ
    w γϯλοΫεతʹόϥόϥ
    w ϕʔεύε΋όϥόϥ
    w ΤϯτϦϙΠϯτʢΧϨϯτσΟϨΫτ
    Ϧʣ΍ΠϯΫϧʔυύε΋όϥόϥ
    w ࣮ߦ్தͰมߋ΋͞ΕΔ

    View Slide

  8. ໰୊ϑΝΠϧ͕Ҡಈͮ͠Β͍
    [email protected]
    IPHFQIQ
    GVHBQIQ
    JODMVEF1BUI%JS
    ͲͪΒͷϑΝΠϧΛಈ͔ͯ͠΋
    εςʔτϝϯτΛॻ͖׵͑Δ
    ඞཁ͕͋Δ

    View Slide

  9. ໰୊ಡΈࠐΈઌϑΝΠϧ͕෼͔Βͳ͍
    wಡΈࠐΈઌ͕੩తʹܾఆ͠ͳ͍
    wΧϨϯτσΟϨΫτϦ·ͨ͸ΠϯΫϧʔυύεʹґଘͨ͠΋ͷ͸࣮ߦ
    ࣌·Ͱ෼͔Βͳ͍
    w*%&ͷαϙʔτΛड͚ΒΕͳ͍
    w࣮ߦύε͕௥͑ͳ͍

    View Slide

  10. ໰୊मਖ਼ͷ࡞ۀɾ৺ཧίετ͕ߴ͍
    wγϯλοΫεతʹόϥόϥͳͷͰHSFQͳͲͰػցతʹஔ׵Ͱ͖ͳ͍
    wࣦഊͨ͠৔߹ͷϦεΫ΋େ͖͍
    wͦ΋ͦ΋਺͕ଟ͍

    View Slide

  11. ΋͸΍ढ͍

    View Slide

  12. ୀ࣏͢ΔϥΠϒϥϦΛ࡞ͬͨ

    View Slide

  13. ΍Γ͍ͨ͜ͱ
    wશͯͷεςʔτϝϯτʹடংΛ΋ͨΒ͢
    wύεղܾͷϕʔεύεΛ౷Ұ͢Δ
    wઈରύεԽ͢Δ
    wγϯλοΫεΛۉ࣭Խ͢Δ

    View Slide

  14. ղܾํ๏
    શͯͷεςʔτϝϯτΛั·͑Δ
    ύε෦෼Λղܾ͢Δ
    ಡΈࠐΈઌϑΝΠϧΛಛఆ͢Δ
    ৽͍͠ϕʔεύεج४Ͱஔ׵͢Δ

    View Slide

  15. શͯͷεςʔτϝϯτΛั·͑Δ

    View Slide

  16. શͯͷεςʔτϝϯτΛั·͑Δ
    wਖ਼نදݱͰั·͑Δͷ͸ා͍
    wίϝϯτ΍վߦ͕ࠞͬͯ͘͟Δ
    w1)1ͷγϯλοΫεΛߟྀͨ͠ಡΈࠐΈΛ͍ͨ͠
    1)1ͷ͜ͱ͸1)1ʹ೚ͤΔ

    View Slide

  17. τʔΫϯύʔαͰࣈ۟ղੳ
    [email protected]@BMM
    Ͱࣈ۟ղੳͰ͖Δ

    View Slide

  18. τʔΫϯύʔαͰࣈ۟ղੳ
    [email protected]@BMM
    Ͱࣈ۟ղੳͰ͖Δ
    [email protected]%*3
    [email protected]&26*3&@0/$&
    [email protected]$0/45"/5
    @&/$"14&%@453*/(
    [email protected]"3*"#-&
    [email protected]$0..&/5
    [email protected]*/(
    [email protected]&26*3&@0/$&
    [email protected]&26*3&@0/$&
    [email protected]&26*3&@0/$&
    [email protected]$0/45"/5
    @&/$"14&%@453*/(
    [email protected]$0/45"/5
    @&/$"14&%@453*/(
    [email protected]$0..&/5
    [email protected]$0/45"/5
    @&/$"14&%@453*/(

    View Slide

  19. ύε෦෼Λղܾ͢Δ

    View Slide

  20. ύε෦෼Λղܾ͢Δ
    w֤εςʔτϝϯτͷϑΝΠϧύεจࣈྻ෦෼ΛٻΊΔ
    wγϯλοΫεతʹόϥόϥ
    wఆ਺΍ؔ਺ݺͼग़͕͠࢖ΘΕ͍ͯͨΓ͢Δ
    1)1ͷ͜ͱ͸1)1ʹ೚ͤΔ

    View Slide

  21. ͜Μͳεςʔτϝϯτ͕͋Δͱͯ͠ɺ
    require_once (dirname(dirname(__FILE__)).COMMON_DIR.
    “{$util}/path/to/file.php”);

    View Slide

  22. [email protected]ΛSFUVSOʹॻ͖׵͑ͯɺ
    return (dirname(dirname(__FILE__)).COMMON_DIR.
    “{$util}/path/to/file.php”);

    View Slide

  23. ط஌ͷఆ਺ɾม਺Λఆٛͯ͠ɺ
    define(“KNOWN_CONSTANT”, __DIR__ . “/known”);
    define(“COMMON_DIR”, ”/common");
    $util = “/utility”;
    return (dirname(dirname(__FILE__)).COMMON_DIR.
    “{$util}/path/to/file.php”);

    View Slide

  24. FWBM
    ͰQIQίʔυͱ࣮ͯ͠ߦ͢Δͱɺ
    $path = eval(‘
    define(“KNOWN_CONSTANT”, __DIR__ . “/known”);
    define(“COMMON_DIR”, “/common”);
    $util = “/utility”;
    return (dirname(dirname(__FILE__)).COMMON_DIR.
    “{$util}/path/to/file.php”);
    ‘);

    View Slide

  25. ϑΝΠϧύεͬΆ͍จࣈྻ͕ฦͬͯ͘Δ
    $path = eval(‘
    define(“KNOWN_CONSTANT”, __DIR__ . “/known”);
    define(“COMMON_DIR”, ”/common”);
    $util = “/utility”;
    return (dirname(dirname(__FILE__)).COMMON_DIR.
    “{$util}/path/to/file.php”);
    ‘);
    QBUIUPBQQSPPUDPNNPOVUJMJUZQBUIUPpMFQIQ
    ˣ

    View Slide

  26. ಡΈࠐΈઌϑΝΠϧΛಛఆ͢Δ

    View Slide

  27. ύεͷछྨͱରԠํ๏
    छྨ ྫ ରԠํ๏
    ઈରύε BQQSPPUQBUIUPpMFQIQ मਖ਼͢Δ
    ΧϨϯτσΟϨΫτϦϕʔ
    ε
    QBUIUPpMFQIQ
    ಡΈࠐΈઌϑΝΠϧΛ
    ಛఆ͔ͯ͠Βमਖ਼
    ΠϯΫϧʔυύεϕʔε QBUIUPpMFQIQ
    ಡΈࠐΈઌϑΝΠϧΛ
    ಛఆ͔ͯ͠Βमਖ਼
    ύεղܾͰ͖ͳ͔ͬͨ
    6/,/08/@$0/45"/5bQBUIUPpMFQIQ`

    ·ͨ͸ύεղܾதʹΤϥʔ
    मਖ਼͠ͳ͍

    View Slide

  28. ಡΈࠐΈઌϑΝΠϧͷಛఆ
    wΧϨϯτσΟϨΫτϦ·ͨ͸ΠϯΫϧʔυύε͕ϥΠϒϥϦʹ౉͞Ε
    ͍ͯΔͳΒ͔ͦ͜Βղܾ
    w౉͞Ε͍ͯͳ͍৔߹͸ϦϙδτϦ಺෦͔ΒϚον͢ΔϑΝΠϧΛ୳͢
    wύεจࣈྻతʹϚον͢Δͷ͕͔ͭ͠ͳ͍৔߹͸ͦͷϑΝΠϧͩͱ
    ͢Δ
    w্هͷ͍ͣΕͰ΋ಛఆͰ͖ͳ͍৔߹͸मਖ਼͠ͳ͍

    View Slide

  29. ৽͍͠ϕʔεύεج४Ͱஔ׵͢Δ

    View Slide

  30. ৽͍͠ϕʔεύεج४Ͱஔ׵͢Δ
    wXFCNP[BSUQBUIVUJMͷ1BUINBLF3FMBUJWF
    ʹ͔͚Δ͚ͩ

    View Slide

  31. ࣮ߦ݁Ռ

    View Slide

  32. ࣮ߦ݁Ռʢͦͷ̍ʣ




    ઈରύε ΧϨϯτσΟϨΫτϦ
    ΠϯΫϧʔυύε ෆ໌



    ઈରύεݸ ઈରύεݸ
    ʢγϯλοΫεతʹ΋ۉ࣭ͳঢ়ଶʣ
    ˞૯਺͕มΘ͍ͬͯΔͷ͸ɺ్தͰෆཁϑΝΠϧҰ੾࡟আΛ࣮ࢪͨͨ͠Ί

    View Slide

  33. ࣮ߦ݁Ռʢͦͷ̎ʣ


    ઈରύε ΧϨϯτσΟϨΫτϦ
    ΠϯΫϧʔυύε ෆ໌



    ˞૯਺͕มΘ͍ͬͯΔͷ͸ɺϑΝΠϧΛҠಈͯ͠ΦʔτϩʔσΟϯάϔҠߦग़དྷͨͨΊ
    ઈରύεݸ ઈରύεݸ
    ʢγϯλοΫεతʹ΋ۉ࣭ͳঢ়ଶʣ

    View Slide

  34. ࣮ߦ݁Ռʢະ࣮ߦʣ































    View Slide

  35. ಘΒΕͨϝϦοτ
    wϑΝΠϧΛಈ͔͠΍͘͢ͳͬͨ
    w࣮ߦύε͕௥͍΍͘͢ͳͬͨ
    [email protected]ΛࣺͯΒΕͨ
    wQIQGQNͷSFBMQBUIDBDIF໰୊͕ղফͨ͠
    w҉໧஌ͷܗࣜԽ

    View Slide

  36. ϥΠϒϥϦެ։ͯ͠·͢
    IUUQTQBDLBHJTUPSHQBDLBHFTOB[POPIJUPSFRVJSFQBUIpYFS

    View Slide

  37. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide