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

25分で理解する!Symfonyの魅力とその実践的活用法

 25分で理解する!Symfonyの魅力とその実践的活用法

PHP Conference Japan 2023でお話ししたスライドです。 #phpcon #phpcon2023

Ippei Sumida

October 08, 2023
Tweet

More Decks by Ippei Sumida

Other Decks in Programming

Transcript

  1. 25෼Ͱཧղ͢Δʂ
    Symfonyͷັྗͱͦͷ࣮ફత׆༻๏
    PHP Conference Japan 2023

    View Slide

  2. • ֯ాɹҰฏ
    • גࣜձࣾDROBE
    • Kansai Symfony Meetup
    • CoderDojo ຕํ
    ࣗݾ঺հ

    View Slide

  3. DROBEͷ঺հ

    View Slide

  4. ελΠϦετ͕ͭ͘ωοτγϣοϐϯά
    1. Ξϯέʔτʹ౴͑Δʂ
    2. ࣗ୐ʹελΠϦετ with AI ͕બΜͩ঎඼͕ಧ͘ʂ
    3. ؾʹೖͬͨ΋ͷΛߪೖʂଞ͸ฦ٫

    View Slide

  5. DROBEͰͷAI׆༻
    χοτ ΢ʔϧ λʔτϧωοΫ
    Ϩίϝϯσʔγϣϯ ίʔσΟωʔτఏҊ αΠζϚον λά෇͚
    ͳͲͳͲ

    View Slide

  6. DROBEͰͷAI׆༻
    χοτ ΢ʔϧ λʔτϧωοΫ
    Ϩίϝϯσʔγϣϯ ίʔσΟωʔτఏҊ αΠζϚον λά෇͚
    ͳͲͳͲ
    Made ofɹɹ

    View Slide

  7. View Slide

  8. AGENDA
    1. Symfonyͷಛ௃
    2. SymfonyͰͷޮ཰తͳ։ൃ
    3. Symfonyͷ׆༻γʔϯ

    View Slide

  9. λʔήοτͱΰʔϧ
    SymfonyͷՄೳੑͱ׆༻ʹ͍ͭͯ஌Δ
    ଞͷϑϨʔϜϫʔΫར༻ऀ

    View Slide

  10. Symfonyͷಛ௃

    View Slide

  11. Simple

    View Slide

  12. Symfony: 4ͭͷ֓೦
    1. Components
    2. Framework
    3. Community
    4. Philosophy
    200Ҏ্ͷίϯϙʔωϯτ܈
    ίϯϙʔωϯτΛར༻ͨ͠ϑϨʔϜϫʔΫ
    ͦΕΒΛࢧ͑ΔίϛϡχςΟ
    SymfonyΛଅਐ͢ΔϚΠϯυ

    View Slide

  13. ϑϨʔϜϫʔΫ͸”ίϯϙʔωϯτ”ͷ͋ͭ·Γ
    composer create-project symfony/skeleton hoge
    symfony/console
    symfony/dotenv
    symfony/framework-bundle
    symfony/runtime
    symfony/yaml
    symfony/cache
    symfony/con
    fi
    g
    symfony/dependency-injection
    symfony/error-handler
    symfony/event-dispatcher
    symfony/http-foundation
    symfony/http-kernel
    symfony/poly
    fi
    ll-mbstring
    symfony/
    fi
    lesystem
    symfony/
    fi
    nder
    symfony/routing

    View Slide

  14. ϑϨʔϜϫʔΫ͸”ίϯϙʔωϯτ”ͷ͋ͭ·Γ
    ίϯιʔϧ
    .env
    ϑϨʔϜϫʔΫ
    ϥϯλΠϜ
    YAMLύʔα
    Ωϟογϡ੍ޚ
    ίϯϑΟά
    DI
    Τϥʔ੍ޚ
    Πϕϯτ
    HTTP੍ޚ
    HTTPΧʔωϧ
    mbstring֦ு
    ϑΝΠϧ੍ޚ
    σΟϨΫτϦ੍ޚ
    ϧʔςΟϯά
    composer create-project symfony/skeleton hoge

    View Slide

  15. Πϯετʔϧ௚ޙʹͰ͖Δ͜ͱ͸࠷খݶ
    -BSBWFM $BLF1)1 4ZNGPOZ
    $PNNBOE ˓ ˓ ˓
    3PVUJOH ˓ ˓ ˓
    +40/ ˓ ˓ ˓
    5FNQMBUF ˓ ˓ º
    %# ˓ ˓ º
    7BMJEBUJPO ˓ ˓ º
    .BJM ˓ ˓ º
    "VUI ˓ ˓ º
    &WFOU ˓ ˓ ˓
    +PC ˓ ˓ º
    5FTU ˓ ˓ º

    View Slide

  16. ඞཁͳ࣌ʹඞཁͳ͚ͩ

    View Slide

  17. ඞཁͳͱ͖ʹඞཁͳίϯϙʔωϯτΛΠϯετʔϧ
    composer require orm
    DB͕࢖͍͍ͨͳΒ
    ೝূ͍ͨ͠ͳΒ composer require security
    HTMLςϯϓϨʔτ࢖͍͍ͨ composer require twig
    ςετ͍ͨ͠ composer require test —dev

    View Slide

  18. composer require orm

    View Slide

  19. Symfony Flex: ίϯϙʔωϯτͷΠϯετʔϧϔϧύ
    Symfony͕༻ҙͨ͠ɺίϯϙʔωϯτʹ
    - ඞཁͳϥΠϒϥϦ
    - ઃఆϑΝΠϧͷ࡞੒
    - Πϯετʔϧͷޙॲཧ
    Λ·ͱΊͨϨγϐΛݩʹΠϯετʔϧΛߦ͏
    composerϓϥάΠϯ

    View Slide

  20. ඞཁͳ࣌ʹඞཁͳ͚ͩ
    ίʔυ΋

    View Slide

  21. View Slide

  22. View Slide

  23. Autowiring: ґଘΦϒδΣΫτͷࣗಈ஫ೖ
    ಛఆͷσΟϨΫτϦͷΫϥεΛࣗಈೝࣝ͠
    - ίϯετϥΫλ
    - ControllerͷΞΫγϣϯϝιου
    - Setter
    ͷҾ਺ʹࢦఆͨ͠ɺ
    ΫϥεɾΠϯλʔϑΣΠεΛܕʹ࣋ͭ
    ΦϒδΣΫτΛࣗಈͰ஫ೖ͢Δ
    ※૊ΈࠐΈܕ΋Ұ෦ՄೳʹͳΓ·ͨ͠

    View Slide

  24. ΠϯλʔϑΣΠεࣗಈ஫ೖ̍
    InterfaceΛ࣮૷ͨ͠ΫϥεΛࣗಈ஫ೖ

    View Slide

  25. ΠϯλʔϑΣΠεࣗಈ஫ೖ̎
    1ͭΫϥεͰ2ͭͷΠϯλʔϑΣΠεΛ࣮૷

    View Slide

  26. ΠϯλʔϑΣΠεࣗಈ஫ೖ̎
    ͦΕͧΕʹࣗಈ஫ೖ

    View Slide

  27. Symfonyͷಛ௃
    1. ඞཁͳ࣌ʹඞཁͳ΋ͷ͚ͩΛ࢖͏γϯϓϧͳߏ଄
    2. ඞཁͳ΋ͷΛ·ͱΊͯΠϯετʔϧɾઃఆͰ͖Δ؀ڥ
    3. ґଘΛ੾ΓऔΓɾ஫ೖͰ͖Δखܰ͞
    ඞཁ࠷௿ݶͳ΋ͷΛखܰʹѻ͑Δ

    View Slide

  28. SymfonyͰͷޮ཰తͳ։ൃ

    View Slide

  29. Loose

    View Slide

  30. Symfony CLI: ։ൃʙσϓϩΠ·ͰΛॿ͚ΔCLI
    Go੡ͷCLIͰ
    - SymfonyϓϩδΣΫτͷ࡞੒
    - ։ൃ؀ڥͷ੔උ
    - Platform.sh΁ͷσϓϩΠ
    ػೳΛ࣋ͬͨSymfonyҎ֎Ͱ΋࢖͑Δπʔϧ
    brew install symfony-cli/tap/symfony-cli

    View Slide

  31. Α͘࢖͏ίϚϯυ
    symfony new project-name
    ϓϩδΣΫτ࡞੒
    composer symfony composer ίϚϯυ
    ϩʔΧϧαʔόىಈ symfony {server:start -d | server:stop}
    PHP࣮ߦ symfony php ϓϩάϥϜ໊

    View Slide

  32. PHPͷόʔδϣϯࢦఆ͕Մೳ
    ˞ར༻͍ͨ͠όʔδϣϯͷ1)1ΛΠϯετʔϧ͍ͯ͠Δඞཁ͕͋Γ·͢

    View Slide

  33. ࣮ߦதDocker͔Β؀ڥม਺Λ௥Ճ
    DATABASE_URL=“postgresql://app:sampl[email protected]:85432/app?serverVersion=15&charset=utf8

    View Slide

  34. Attributes: PHPʹຒΊࠐΉઃఆ৘ใ
    ίʔυએݴ࣌ʹຒΊࠐΉ͜ͱͰ
    ΞϓϦέʔγϣϯʹઃఆ৘ใΛ
    ࣋ͨͤΔ͜ͱ͕Ͱ͖ΔɺPHPͷػೳ
    ϑϨʔϜϫʔΫͰར༻͍ͯ͠Δ΋ͷ͸
    Symfony, Spiral Framework

    View Slide

  35. ϧʔςΟϯά
    ϦΫΤετͷϚοϐϯά

    View Slide

  36. όϦσʔγϣϯ
    σʔλϚοϐϯά

    View Slide

  37. View Slide

  38. ࣮૷ίʔυ੹຿֎

    View Slide

  39. Doctrine: DBΛѻ͏ORM
    DBΛѻ͏ORMͰ
    - POPOͳEntity
    - ࢀরΛओͱͨ͠Repository
    - DB΁ͷಉظΛ୲͏EntityManager
    Λ΋ͭɺDataMapperܕͷORM
    symfony composer require orm

    View Slide

  40. DataMapperͱActiveRecordͷҧ͍
    id=1
    id=4
    id=1
    id=4
    id=4
    id=1
    id=1
    id=1
    id=4
    ࢀর
    ίϐʔ
    ૢ࡞
    ૢ࡞
    ϏδωεϩδοΫ
    ->save()
    ->
    f
    lush()
    ஗Ԇ
    ϑΣον
    Entity Manager
    ಉظ
    ->save()
    ->save()
    ίϯτϩʔϥʔ
    ΫΤϦ͝ͱʹҟͳΔΠϯελϯεੜ੒ɻ
    ΠϯελϯεʹҰҙੑ͕ͳ͍ɻ != Entity
    DB ࣮ମ͕ͳ͍ͱ੔߹ੑ͕੒Γཱͨͳ͍ɻ
    ϏδωεϩδοΫ͕ʮDBอଘʯ੹຿Λ࣋ͭɻ
    ͢΂ͯͷ Entity ͸Ծ૝తʹΦϯϝϞϦͰ
    ଍Γͳ͍΋ͷ͚ͩΛ஗ԆϑΣονɻ
    Repository ͸ࢀরΛఏڙ͢Δ͚ͩɻ
    ϏδωεϩδοΫ͸OOP͚ͩͰ׬݁͢Δɻ
    ࠩ෼SQLੜ੒

    View Slide

  41. ར༻Repository
    ϑΟʔϧυఆٛ
    Getter/Setter
    AttributesΛղऍͯ͠ϚΠάϨʔγϣϯʢdiffʣ࡞੒

    View Slide

  42. ϑΟʔϧυఆٛΛ΋ͱʹͨ͠ϚΠάϨʔγϣϯ

    View Slide

  43. EntityManagerΛDI
    EntityManager΁ొ࿥ɾಉظ

    View Slide

  44. EntityManager͕DI͞ΕͯΔՕॴ
    =
    DBಉظ͋Γ

    View Slide

  45. ঎඼࡞੒
    DBಉظ
    ࡏݿ࡞੒ มߋཤྺ࡞੒
    ϦΫΤετडऔ
    $POUSPMMFS 6TF$BTF &WFOU-JTUFOFS

    View Slide

  46. ঎඼࡞੒
    DBಉظ
    ࡏݿ࡞੒ มߋཤྺ࡞੒
    ϦΫΤετडऔ
    $POUSPMMFS 6TF$BTF &WFOU-JTUFOFS
    DBอଘͷ͜ͱΛߟ͑ͳͯ͘Α͍ྖҬ

    View Slide

  47. ΦϒδΣΫτΛฦ͚ͩ͢ͷγϯϓϧͳΫϥεʹ

    View Slide

  48. Test: ֤छςετΛαϙʔτ
    SymfonyͰ͸
    - Unit Test
    - Integration Test
    - Application Test
    Λߦ͏؀ڥΛ༻ҙɻ·ͨɺSymfony PantherͰ
    E2Eςετ΋࣮ࢪՄೳɻ

    View Slide

  49. DI෦෼ΛϞοΫ

    View Slide

  50. zenstruck/foundry: ඞཁͳྔͷσʔλΛొ࿥
    ςετΛߦ͏ࡍʹ
    - ඞཁͳྔͷσʔλͷొ࿥
    - ϚΠάϨʔγϣϯʹґଘ͠ͳ͍ςʔϒϧ࡞੒
    - ࢖͍ํ͸LaravelͷFactoryνοΫ
    Λ࣮ݱ͢Δɺσʔλొ࿥ϥΠϒϥϦ
    symfony composer require zenstruck/foundry

    View Slide

  51. Ͱ͖Δςʔϒϧ͸’item’͚ͩ

    View Slide

  52. Symfonyͷޮ཰తͳ։ൃ
    1. ϩʔΧϧ + DockerͰͷ։ൃΛڧྗʹαϙʔτ
    2. AttributesΛར༻ͨ͠ɺඞཁͳϩδοΫͷΈͷ։ൃ͕Մೳ
    3. DIΛ༗ޮʹར༻ͨ͠ɺඞཁͳՕॴɾσʔλͷΈͷςετ
    ແҙࣝʹૄ݁߹ʹۙͮ͘։ൃମݧ

    View Slide

  53. Symfonyͷ׆༻γʔϯ

    View Slide

  54. Flexible

    View Slide

  55. ϓϩτλΠϓɾMVP
    CLI, API, HTMLͳͲ৭ʑͳܗʹ༰қʹมߋ
    Ͱ͖ΔͨΊɺεςʔΫϗϧμʔͱ͢͹΍͘
    ҙࢥૄ௨͕Մೳɻ
    ·ͨɺॳظஈ֊͔Βૄ݁߹Λอͪ΍͍͢ɻ

    View Slide

  56. CRUD
    Router, Voter, ValueResolverͳͲͷ
    AttributesΛۦ࢖͢Δ͜ͱͰ༰қʹ
    CRUD͕࡞੒Ͱ͖Δ

    View Slide

  57. ValueResolver
    ControllerͷΞΫγϣϯϝιουͰҾ਺ʹ
    ResolverΛࢦఆ͢Δ͜ͱͰɺ
    ඞཁͳσʔλͷϩδοΫΛController͔Β
    ഉআͰ͖Δ

    View Slide

  58. View Slide

  59. ؅ཧը໘
    Role, VoterͳͲͷೝূػೳΛ࢖ͬͨ
    ϑϨΩγϒϧͳΞΫηε੍ޚ͕Մೳɻ
    Ճ͑ͯɺWork
    fl
    owʹΑΔεςʔλε؅ཧͷ
    ಋೖ͕͠΍͍͢ɻ
    ·ͨɺ؆୯ͳ؅ཧը໘Ͱ͋Ε͹
    EasyAdmin Bundle΋͓͢͢Ί

    View Slide

  60. Workflow
    ΦϒδΣΫτʹεςʔλεΛ༩͑ɺ
    εςʔλεͷ੾Γସ͑ɺঢ়ଶͷνΣοΫΛ
    ߦ͏ɻ
    symfony composer require work
    fl
    ow

    View Slide

  61. εςʔλεछྨ
    τϥϯδογϣϯʢભҠʣ

    View Slide

  62. τϥϯδογϣϯʢ֬ೝˍભҠʣ
    Work
    fl
    owΛDI

    View Slide

  63. API
    ڧྗͳSerializerΛར༻͠ɺ
    ༰қʹAPIͷ։ൃ͕Մೳɻ
    ·ͨɺ؆୯ͳ΋ͷͰ͋Ε͹
    API PlatformΛ࢖͑͹AttributesΛ଍͚ͩ͢Ͱ
    APIͷ࡞੒͕Մೳ

    View Slide

  64. Serializer
    ΦϒδΣΫτ΍഑ྻɺJSONͳͲΛͦΕͧΕͷ
    ϑΥʔϚοτʹม׵͢Δ
    symfony composer require serializer

    View Slide

  65. ࢦఆͨ͠άϧʔϓͷΈදࣔ
    ඇදࣔ

    View Slide

  66. /api/itemsͷCRUDͳAPI͕ࣗಈੜ੒

    View Slide

  67. ϞδϡϥϞϊϦε
    σΟϨΫτϦߏ଄ʹେ͖ͳറΓ͸
    ͳ͍ͷͰɺυϝΠϯຖʹ੾Γग़ͯ͠
    ϞδϡϥϞϊϦεՄೳɻଞͷखஈ΋͋Γɻ
    ৄ͘͠͸…

    View Slide

  68. 14:50ʙ τϥοΫ1

    View Slide

  69. Symfonyͷ׆༻γʔϯ
    1. ϓϩτλΠϓ͔ΒΤϯλʔϓϥΠζ·Ͱͦͭͳ͘͜ͳ͢
    2. ෳࡶͳॲཧΛ௥͍ग़͢͜ͱͰಘΔɺߴ͍ϝϯςφϏϦςΟ
    3. (࣌ؒͷ౎߹Ͱઆ໌Ͱ͖ͳ͍) ࠷৽όʔδϣϯ௥ैͷ͠΍͢͞
    ॊೈͰڧਟͳαʔϏεͷߏங͕Մೳ

    View Slide

  70. We are hiring!!
    ΧδϡΞϧ໘ஊਵ࣌ड෇தͰ͢ʂ
    DROBE͸͍͍ͧ
    ࠓͳΒ৭ʑͳτϥΠΛମݧͰ͖·͢

    View Slide

  71. View Slide