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

こわくないSymfony2 - 業務で使って気づいた7つの良いところ

こわくないSymfony2 - 業務で使って気づいた7つの良いところ

10/03に開催されたPHPカンファレンス2015にて登壇した際に発表したものです。

動画: https://www.youtube.com/watch?v=CqMILKp3Ens&feature=youtu.be&t=23m50s

===

みなさんSymfony2使ってますか?

初めてのリリースから4年が経過し、2つ目のLTSバージョンとなるSymfony2.7も今年リリースされ、ますます注目が高まっています。

私はSymfony1系で稼働していたシステムの一部を切り出しSymfony2でゼロから構築したり、新規サービスをSymfony2で構築したりとそれなりに使っています。

このセッションでは実際に業務で使ってきて良いなと感じたところを、初心者の方でも「便利そうだな」と思ってもらえるように紹介していきたいと思います。

Go Nakanishi

October 03, 2015
Tweet

More Decks by Go Nakanishi

Other Decks in Programming

Transcript

  1. ͜Θ͘ͳ͍Symfony2
    - ۀ຿Ͱ࢖ͬͯؾ͍ͮͨ7ͭͷྑ͍ͱ͜Ζ
    2015/10/03 phpcon2015
    גࣜձࣾVOYAGE GROUP
    த੢ ߽

    View full-size slide

  2. ࣗݾ঺հ
    • ͳ͔ʹ͠͝͏ a.k.a gomachan46
    • גࣜձࣾVOYAGE GROUP ΤϯδχΞ
    • https://twitter.com/gomachan46
    • https://www.facebook.com/gomachan46
    • https://github.com/gomachan46

    View full-size slide

  3. ࠓ೔
    ࿩͍ͨ͜͠ͱ

    View full-size slide

  4. Symfony2ͷ
    ྑ͍ͱ͜ΖΛ
    ఻͑·͢ʂ

    View full-size slide

  5. Symfony2ͱ͍͏ͱ…
    • ϑϧελοΫϑϨʔϜϫʔΫ
    • ڪΖ͘͠ڊେ
    • ͘͢͝ੲ͔Β͋Δ

    View full-size slide

  6. ͜Θ͘ͳ͍Αʂ
    Symfony2

    View full-size slide

  7. ࠓ೔࿩͍ͨ͜͠ͱ
    • Symfony2ͷྑ͍ͱ͜ΖΛ఻͑·͢ʂ
    • ҙ֎ͱ͜Θ͘ͳ͍ͱͬͯ΋ྑౕ͍Ͱ͢
    • ଞϑϨʔϜϫʔΫͱͷൺֱ͸͠·ͤΜ
    • ͦͷଞٯʹϋϚͬͨͱ͜Ζ౳͸࠙਌ձͰ͆

    View full-size slide

  8. ۀ຿Ͱ͸
    ԿΛ΍͍͔ͬͯͨ

    View full-size slide

  9. γεςϜϑϧϦϓϨʔε

    View full-size slide

  10. γεςϜ
    • ங8೥
    • PHP 5.3ܥ
    • symfony 1ܥ
    • ଞαʔϏε͕ಉډ

    View full-size slide

  11. ଞαʔϏε͕ಉډ

    View full-size slide

  12. ڞଘ͍ͯ͠Δ͜ͱʹΑΔฐ֐
    • ผαʔϏεͳͷʹӨڹΛड͚Δ
    • ݖݶͷద੾ͳ੾Γ෼͚͕Ͱ͖ͳ͍
    • PeX
    • σδλϧΪϑτΦϯσϚϯυαʔϏε
    • Ϊϑτ݊ͷऔΓѻ͍

    View full-size slide

  13. γεςϜϑϧϦϓϨʔε

    View full-size slide

  14. ͱ͍͏Θ͚Ͱࠓ೔͸
    Symfony2ͷ
    ྑ͍ͱ͜ΖΛ
    ͓఻͑͠·͢

    View full-size slide

  15. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  16. Chapter.1
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    Chapter.1
    ͔ͬ͠Γͱͨ͠ϝϯςφϯε

    View full-size slide

  17. ͜Θ͍
    • ಥવͷαϙʔτऴྃ
    • ಥવͷ৽όʔδϣϯϦϦʔε
    • ಥવͷޙํޓ׵ੑͳ͠

    View full-size slide

  18. Symfony2ͳΒ
    ͜Θ͘ͳ͍Αʂ

    View full-size slide

  19. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  20. ྑ͍ͱ͜Ζᶃ
    ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ

    View full-size slide

  21. ϚΠφʔόʔδϣϯ͸
    6ϲ݄͓͖
    5݄ͱ11݄

    View full-size slide

  22. 6/3
    12/3
    6/1
    11/29
    5/30

    View full-size slide

  23. ৴པͱ࣮੷ͷ҆৺ײ
    εέδϡʔϧͷͨͯ΍͢͞

    View full-size slide

  24. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  25. ྑ͍ͱ͜Ζᶄ
    ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍

    View full-size slide

  26. ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • ηϚϯςΟοΫόʔδϣχϯάͷ࠾༻
    • ΞοϓσʔτͷϑΥϩʔ͕ॆ࣮
    • @deprecatedΞϊςʔγϣϯΛ༻͍ͨίʔυ্
    Ͱͷ௨஌
    • ඇਪ঑ػೳΛ࢖༻͍ͯ͠Δ৔߹ʹܯࠂΛߦͬͯ͘
    ΕΔ

    View full-size slide

  27. ΞοϓσʔτͷϑΥϩʔ͕ॆ࣮

    View full-size slide

  28. ΞοϓσʔτͷϑΥϩʔ͕ॆ࣮

    View full-size slide

  29. @deprecatedΞϊςʔγϣϯΛ༻͍ͨ
    ίʔυ্Ͱͷ௨஌

    View full-size slide

  30. ඇਪ঑ػೳΛ࢖༻͍ͯ͠Δ৔߹ʹ
    ܯࠂΛߦͬͯ͘ΕΔ

    View full-size slide

  31. ඇਪ঑ػೳΛ࢖༻͍ͯ͠Δ৔߹ʹ
    ܯࠂΛߦͬͯ͘ΕΔ

    View full-size slide

  32. Symfony2͸
    ԁ׈ͳΞοϓάϨʔυΛ
    ࠷ॏཁࢹ

    View full-size slide

  33. ͔ͬ͠Γͱϝϯςφϯε͞Ε͍ͯͯ
    ΞοϓσʔτͷϑΥϩʔ΋ॆ࣮
    ҆৺ͯ͠എதΛ༬͚ͯ
    ։ൃʹूதͰ͖Δ

    View full-size slide

  34. Chapter.2
    పఈͨ͠ૄ݁߹ઃܭ
    Chapter.2
    పఈͨ͠ૄ݁߹ઃܭ

    View full-size slide

  35. ͜Θ͍
    • ϑϨʔϜϫʔΫͷෑ͍ͨϨʔϧ͔Β୤ઢ͢Δ
    ͱ్୺ʹ͖ͭ͘ͳΔ
    • ϑϨʔϜϫʔΫ͔Βड͚ΔറΓ͕ڧ͘νʔϜ
    ʹ߹ͬͨํ޲ʹҭͯͯߦ͖ͮΒ͍
    • ґଘ͕ڧ͘ςετ࣌ʹ؆୯ʹࠩ͠ସ͑ΒΕͳ
    ͯ͘ࠔΔ

    View full-size slide

  36. Symfony2ͳΒ
    ͜Θ͘ͳ͍Αʂ

    View full-size slide

  37. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  38. ྑ͍ͱ͜Ζᶅ
    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖ͯ
    ͍Δ

    View full-size slide

  39. ୯ମར༻Մೳͳίϯϙʔωϯτ
    ͕ू·ͬͯͰ͖͍ͯΔ
    • Symfony2͸খ͞ͳίϯϙʔωϯτ܈͕૊Έ߹
    Θͬͯ͞ҰͭͷϑϨʔϜϫʔΫΛܗ੒͍ͯ͠
    Δ
    • ·͞ʹૄ݁߹
    • ॊೈ͞Λ΋ͬͯ։ൃͰ͖Δ

    View full-size slide

  40. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  41. ྑ͍ͱ͜Ζᶆ
    ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ

    View full-size slide

  42. ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ
    ੒͕૊ΊΔ
    • جຊతʹϨʔϧ͕ͳ͍
    • ࡞Δ΋ͷɾඞཁੑʹ߹Θͤͯࣗ༝ʹ֦ுͯ͠
    ͍͚Δ
    • ઃܭΛϑϨʔϜϫʔΫʹറΒΕΔ͜ͱ͕ͳ͍

    View full-size slide

  43. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  44. ྑ͍ͱ͜Ζᶇ
    DIίϯςφͷඪ४࠾༻

    View full-size slide

  45. DIίϯςφͷඪ४࠾༻
    • DI͕ϕʔεʹ͋Γࠩ͠ସ͑Մೳͳઃܭʹ͠΍
    ͍͢
    • DIίϯςφʹొ࿥͢Δʹ͸ઃఆϑΝΠϧʹه
    ड़͢Δ͚ͩ

    View full-size slide

  46. DIϕʔεͷૄ݁߹ઃܭͰॊೈ
    ઃܭͷࣗ༝͕͋͞Γ
    ϑϨʔϜϫʔΫʹৼΓճ͞Εͳ͍

    View full-size slide

  47. Chapter.3
    ศརͳߏ଄΍ػೳ

    View full-size slide

  48. ͭΒ͍
    • (ྫ͑͹)ෳ਺ίϯτϩʔϥʔͷ࣮ߦલʹڞ௨ॲ
    ཧΛߦ͍͍͔ͨΒͱ͍ͬͯίϐϖ
    • ޮ཰ͷྑ͍։ൃΛߦ͏ͨΊͷαϙʔτπʔϧ
    ͕ͳ͍

    View full-size slide

  49. Symfony2ͳΒ
    ͭΒ͘ͳ͍Αʂ

    View full-size slide

  50. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  51. ྑ͍ͱ͜Ζᶈ
    ௒ڧྗͰศརͳEventListener

    View full-size slide

  52. ௒ڧྗͰศརͳEventListener
    • ৭ʑͳΠϕϯτʹରͯ͠ॲཧΛڬΈࠐΊΔϑο
    ΫϙΠϯτ͕༻ҙ͞Ε͍ͯΔ
    • ڞ௨ॲཧ͸EventListenerʹ·͔ͤͯݟ௨͠ͷ
    ྑ͍ίʔυΛॻ͚Δ

    View full-size slide

  53. Πϕϯτ
    • kernel.request
    • kernel.controller
    • kernel.view
    • kernel.response
    • …etc

    View full-size slide

  54. ϦΫΤετ͞Εͨ࣌ͷ
    IPΞυϨεΛ
    ϩάʹམͱͯ͠ΈΔ

    View full-size slide

  55. ϩάݟͯΈΔ
    [2015-10-01 16:51:46]
    app.NOTICE: ࢼ͠ʹclientIpͰ΋ग़͠
    ͯΈΔ ip: 192.168.34.1 [] []

    View full-size slide

  56. Symfony2ͷྑ͍ͱ͜Ζ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  57. ྑ͍ͱ͜Ζᶉ
    ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔ

    View full-size slide

  58. ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔ
    • ࣮ߦ͞ΕͨSQLΛݟΕΔ
    • explain΋ݟΕΔ
    • ు͖ग़͞Εͨϩά΋ݟΕΔ
    • ૹ৴ͨ͠formͷ಺༰΋ݟΕΔ
    • …etc

    View full-size slide

  59. EventListenerΛ׆༻ͯ͠
    ៉ྷʹڞ௨ॲཧΛ
    ϓϩϑΝΠϥʔΛ׆༻ͯ͠
    ޮ཰ͷྑ͍։ൃΛ

    View full-size slide

  60. ·ͱΊ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • పఈͨ͠ૄ݁߹ઃܭ
    • ศརͳߏ଄΍ػೳ

    View full-size slide

  61. ·ͱΊ
    • ͔ͬ͠Γͱͨ͠ϝϯςφϯε
    • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ
    • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍
    • పఈͨ͠ૄ݁߹ઃܭ
    • ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ
    • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ
    • DIίϯςφͷඪ४࠾༻
    • ศརͳߏ଄΍ػೳͷఏڙ
    • ௒ڧྗͰศརͳEventListener૚
    • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ

    View full-size slide

  62. ͜Θ͘ͳ͍
    ྑ͍ͱ͜Ζͨ͘͞Μͷ
    Symfony2Ͱ
    շదͰࣗ༝ͳ։ൃΛ

    View full-size slide

  63. ͜Θ͘ͳ͍Αʂ
    Symfony2

    View full-size slide