Slide 1

Slide 1 text

ୈ8ճ ΤϯςΟςΟ Drupal Ϟδϡʔϧ ։ൃೖ໳ߨ࠲

Slide 2

Slide 2 text

Drupal Ϟδϡʔϧ։ൃೖ໳ߨ࠲γϦʔζ – DrupalͰ͸ʮϞδϡʔϧʯͱݺ͹ΕΔɺখ͞ͳιϑτ΢ΣΞΛ࣮૷͢Δ͜ͱͰػೳ֦ுΛߦ ͍·͢ɻຊ΢ΣϏφʔγϦʔζͰ͸ɺDrupalͷϞδϡʔϧ։ൃʹؔ͢Δجૅ஌ࣝΛղઆ͠· ͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗ෼ͰΧελϜϞδϡʔϧΛ࡞Ε ΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛ໨ࢦ͢ํʹ͓͢͢ΊͰ͢ɻ – DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛର৅ͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ͍ ํ͸ɺॳ৺ऀ޲͚DrupalνϡʔτϦΞϧಈըʢ೔ຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ·Γ ·͢ɻ

Slide 3

Slide 3 text

ΞδΣϯμ 1. ΤϯςΟςΟͱ͸ 2. Entity APIͰΤϯςΟςΟΛૢ࡞͢Δ 3. طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔ 4. ಠࣗͷΤϯςΟςΟλΠϓΛ࡞੒͢Δ 5. ࿅श໰୊

Slide 4

Slide 4 text

ΤϯςΟςΟͱ͸

Slide 5

Slide 5 text

DrupalαΠτʹଘࡏ͢Δσʔλ DrupalαΠτʹ͸ ͲͷΑ͏ͳछྨͷ σʔλ͕ଘࡏͯ͠ ͍ΔͩΖ͏͔ʁ

Slide 6

Slide 6 text

Drupalͷσʔλͷछྨ DrupalαΠτͰѻΘΕΔσʔλ͸ओʹ4छྨʹ෼ྨ – ContentɿαΠτ๚໰ऀʹදࣔ͢Δ͜ͱΛ໨తͱͨ͠ςΩ ετɺը૾ͳͲͷ৘ใɻ – ConfigurationɿαΠτͷಈ࡞ɺදࣔํ๏ͳͲΛఆٛ͢Δ ৘ใɻ௨ৗ͸খ͞ͳςΩετͰදݱ͞ΕΔ܏޲ɻ – Stateɿcronδϣϒ͕࠷ޙʹ࣮ߦ͞Εͨ࣌ࠁͳͲɺαΠτ ͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷ৘ใɻ – SessionɿϩάΠϯ͍ͯ͠Δ͔Ͳ͏͔΍CookieͳͲɺݸʑ ͷαΠτ๚໰ऀͷαΠτͱͷ΍ΓऔΓʹؔ͢Δ৘ใɻ https://api.drupal.org/api/drupal/core%21core.api.php/group/info_types/

Slide 7

Slide 7 text

Drupalͷσʔλͷछྨ DrupalαΠτͰѻΘΕΔσʔλ͸ओʹ4छྨʹ෼ྨ – ContentɿαΠτ๚໰ऀʹදࣔ͢Δ͜ͱΛ໨తͱͨ͠ςΩ ετɺը૾ͳͲͷ৘ใɻ – ConfigurationɿαΠτͷಈ࡞ɺදࣔํ๏ͳͲΛఆٛ͢Δ ৘ใɻ௨ৗ͸খ͞ͳςΩετͰදݱ͞ΕΔ܏޲ɻ – Stateɿcronδϣϒ͕࠷ޙʹ࣮ߦ͞Εͨ࣌ࠁͳͲɺαΠτ ͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷ৘ใɻ – SessionɿϩάΠϯ͍ͯ͠Δ͔Ͳ͏͔΍CookieͳͲɺݸʑ ͷαΠτ๚໰ऀͷαΠτͱͷ΍ΓऔΓʹؔ͢Δ৘ใɻ https://api.drupal.org/api/drupal/core%21core.api.php/group/info_types/ ΤϯςΟςΟ ※Configurationʹؔͯ͠͸ɺશͯ Ͱ͸ͳ͘Ұ෦ͷσʔλ͕ߏ੒Τϯ ςΟςΟͱͯ͠ѻΘΕΔɻ

Slide 8

Slide 8 text

ΤϯςΟςΟͱ͸ – ʮίϯςϯπʯ΋͘͠͸ʮߏ੒ʯͷɺӬଓతͳετϨʔδʹ࢖ ༻͞ΕΔΦϒδΣΫτͰ͢ɻ – DrupalͰσʔλΛѻ͏ํ๏ͷҰͭͰ͋Γɺσʔλ΍ίϯςϯπ ͷϞσϦϯάΛߦ͍·͢ɻ – ΤϯςΟςΟΛάϧʔϐϯά͢ΔΤϯςΟςΟλΠϓ͸ɺ DrupalͷϓϥάΠϯγεςϜʹΑͬͯఆٛ͞Ε·͢ɻ

Slide 9

Slide 9 text

ΤϯςΟςΟγεςϜʹొ৔͢Δ༻ޠ – ΤϯςΟςΟɿߏ଄Խ͞Εͨ୯ҰͷΞΠςϜʢΠϯελϯεʣɻ
 ྫɿ1ͭͷهࣄɺ1ͭͷϢʔβʔ – ΤϯςΟςΟλΠϓɿΤϯςΟςΟΛάϧʔϐϯάͨ͠΋ͷɻΤϯςΟςΟλΠϓ͸ EntityTypeManagerʹΑͬͯఆٛ͞ΕΔϓϥάΠϯλΠϓͷϓϥάΠϯɻ
 ྫɿίϯςϯπ(ϊʔυ)ɺλΫιϊϛʔ – όϯυϧɿαϒλΠϓͱ΋ݺ͹ΕΔɻΤϯςΟςΟλΠϓΛࡉ෼Խͨ͠΋ͷɻόϯυ ϧΛ༻ҙ͢Δ͔͸೚ҙɻ௨ৗɺόϯυϧ͸ߏ੒ΤϯςΟςΟʹΑͬͯఆٛ͞ΕΔɻ
 ྫɿهࣄίϯςϯπλΠϓɺλά

Slide 10

Slide 10 text

ΤϯςΟςΟͷ֊૚ ΤϯςΟςΟλΠϓ όϯυϧ ΤϯςΟςΟ ίϯςϯπʢϊʔυʣ هࣄίϯςϯπλΠϓ هࣄ1 هࣄ2 جຊϖʔδίϯςϯπ λΠϓ جຊϖʔδ1 λΫιϊϛʔλʔϜ λά λά1 λά2 Ϣʔβʔ ʢແ͠ʣ ؅ཧऀ1 ಗ໊Ϣʔβʔ1

Slide 11

Slide 11 text

– ߏ੒ΤϯςΟςΟɿαΠτͷߏ੒Մೳͳઃఆͷ৘ใΛѻ͏Φϒ δΣΫτͰ͢ɻߏ੒γεςϜͰ࢖༻͞Ε·͢ɻ຋༁Λαϙʔτ͠ ͍ͯ·͢ɻϞδϡʔϧͷΠϯετʔϧ࣌ʹಠࣗͷσϑΥϧτઃఆ ΛఏڙͰ͖·͢ɻ – ίϯςϯπΤϯςΟςΟɿઃఆՄೳͳϑΟʔϧυͱجຊϑΟʔϧ υͰߏ੒͞Ε·͢ɻϦϏδϣϯ΍຋༁Λαϙʔτ͍ͯ͠·͢ɻ ߏ੒ΤϯςΟςΟͱίϯςϯπΤϯςΟςΟ

Slide 12

Slide 12 text

ߏ੒ΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷݟ෼͚ํ ΤϯςΟςΟλΠϓ ΤϯςΟςΟ ίϯςϯπʢϊʔυʣ هࣄ1 هࣄ2 جຊϖʔδ1 λΫιϊϛʔλʔϜ λά1 λά2 Ϣʔβʔ ؅ཧऀ1 ಗ໊Ϣʔβʔ1 ίϯςϯπλΠϓ هࣄίϯςϯπλΠϓ جຊϖʔδίϯςϯπλΠϓ ϘΩϟϒϥϦ λά ͲΕ͕ߏ੒Τϯ ςΟςΟͰɺͲΕ ͕ίϯςϯπΤϯ ςΟςΟʁ

Slide 13

Slide 13 text

ΤϯςΟςΟλΠϓ ΤϯςΟςΟ ίϯςϯπʢϊʔυʣ هࣄ1 هࣄ2 جຊϖʔδ1 λΫιϊϛʔλʔϜ λά1 λά2 Ϣʔβʔ ؅ཧऀ1 ಗ໊Ϣʔβʔ1 ίϯςϯπλΠϓ هࣄίϯςϯπλΠϓ جຊϖʔδίϯςϯπλΠϓ ϘΩϟϒϥϦ λά ߏ੒ΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷݟ෼͚ํ ߏ੒ ΤϯςΟςΟ ۩ମతʹ͸ɺΤϯςΟςΟ λΠϓΛఆٛ͢ΔΫϥεͷ ΞϊςʔγϣϯΛݟͯ൑ผ Ͱ͖Δ @ContentEntityTyp e o r @ConfigEntityType ίϯςϯπ ΤϯςΟςΟ

Slide 14

Slide 14 text

ߏ੒ΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷҧ͍ ΤϯςΟςΟλΠϓͷఆٛ ΤϯςΟςΟͷྫ σʔλͷ֨ೲ৔ॴ(DB) ߏ੒
 ΤϯςΟςΟ ConfigEntityBaseΛ֦ுͨ͠ Ϋϥε ● ը૾ελΠϧ ● Ϣʔβʔ໾ׂ ● ίϯςϯπλΠϓ શͯ config ςʔϒϧʹߦͱ ͯ֨͠ೲ͞Ε·͢ɻ ίϯςϯπ
 ΤϯςΟςΟ ContentEntityBaseΛ֦ுͨ͠ Ϋϥε ● ϊʔυ ● λΫιϊϛʔλʔ Ϝ ● ίϝϯτ ● Ϣʔβʔ ίϯςϯπΤϯςΟςΟλ Πϓ͝ͱʹςʔϒϧ͕༻ҙ ͞Εɺ֤ΤϯςΟςΟ͸ߦ ͱͯ֨͠ೲ͞Ε·͢ɻ

Slide 15

Slide 15 text

ΤϯςΟςΟͱ͸ ·ͱΊ – ΤϯςΟςΟ͸ɺʮίϯςϯπʯ΋͘͠͸ʮߏ੒ʯͷɺӬଓతͳε τϨʔδʹ࢖༻͞ΕΔΦϒδΣΫτͰ͢ɻ – DrupalͰσʔλΛѻ͏ํ๏ͷҰͭͰ͋Γɺσʔλ΍ίϯςϯπͷϞ σϦϯάΛߦ͍·͢ɻ – ΤϯςΟςΟ͸ΤϯςΟςΟλΠϓʹΑͬͯɺ৔߹ʹΑͬͯ͸͞Β ʹόϯυϧʹΑͬͯࡉ෼Խ͞Ε·͢ɻ – ΤϯςΟςΟʹ͸ߏ੒ΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷ2छ ྨ͕ଘࡏ͠·͢ɻ

Slide 16

Slide 16 text

Entity APIͰΤϯςΟςΟΛૢ࡞͢Δ

Slide 17

Slide 17 text

entity_type.managerαʔϏε – entity_type.managerαʔϏεΛհͯ͠ɺΤϯςΟςΟͷಡΈࠐΈɺ࡞੒ɺ࡟ আͳͲͷૢ࡞͕ߦ͑·͢ɻ – entity_type.managerαʔϏε͸ɺΤϯςΟςΟλΠϓʹґଘ͢Δ͜ͱͳ͘ɺ શͯͷΤϯςΟςΟΛѻ͏͜ͱ͕Ͱ͖·͢ɻ

Slide 18

Slide 18 text

ΤϯςΟςΟͷओͳૢ࡞ – 1ͭͷΤϯςΟςΟΛಡΈࠐΉ
 
 – ΤϯςΟςΟIDͷऔಘ
 
 – ΤϯςΟςΟͷόϯυϧͷऔಘ
 – ΤϯςΟςΟͷ֤ϑΟʔϧυ஋ͷऔಘ $node = \Drupal::entityTypeManager()->getStorage('node')->load(1); $node->id(); // "1" $node->bundle(); // "article" $node->get('title')->value; // "Test Article" https://www.drupal.org/docs/drupal-apis/entity-api/working-with-the-entity-api https://www.metaltoad.com/blog/drupal-8-entity-api-cheat-sheet

Slide 19

Slide 19 text

– ΤϯςΟςΟͷ࡞੒
 
 
 
 
 
 – ΤϯςΟςΟͷ࡟আ ΤϯςΟςΟͷओͳૢ࡞ $newNode = \Drupal::entityTypeManager()->getStorage('node')->create([ 'type' => 'article', 'title' => 'Entity APIͰ࡞੒ͨ͠هࣄ', ]); $newNode->save(); $newNode->delete();

Slide 20

Slide 20 text

ԋश entity_type.managerαʔϏεΛ࢖ͬͯΤϯςΟςΟΛૢ࡞ͯ͠ΈΑ ͏ʂ 1. ΤϯςΟςΟͷಡΈࠐΈ 2. ΤϯςΟςΟ͕࣋ͭ஋ͷऔಘ 3. ΤϯςΟςΟͷ࡞੒ 4. ΤϯςΟςΟͷ࡟আ ίʔυ͸ͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol8

Slide 21

Slide 21 text

طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔ

Slide 22

Slide 22 text

ΤϯςΟςΟλΠϓ͸Ͳ͔͜Βఏڙ͞ΕΔʁ – ίΞ(αϒγεςϜ/ίΞϞδϡʔϧ ) – ίϯτϦϏϡʔτϞδϡʔϧ – ΧελϜϞδϡʔϧ

Slide 23

Slide 23 text

طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔํ๏ – ίʔυϕʔε͔Β@ContentEntityType΍ @ConfigEntityTypeͰจࣈྻݕࡧ͢Δ – DevelϞδϡʔϧΛ࢖༻͢Δ

Slide 24

Slide 24 text

– ΤϯςΟςΟλΠϓͷఆٛʹ͸ɺϓϥάΠϯγεςϜͷAnnotatedDiscoveryݕग़͕༻͍ΒΕ ͍ͯ·͢ɻ – ͳͷͰɺίʔυϕʔε಺ͷPHPϑΝΠϧΛ @ContentEntityType ΍ @ConfigEntityType Ͱจ ࣈྻݕࡧ͢Δ͜ͱͰɺίʔυϕʔεʹଘࡏ͢ΔΤϯςΟςΟλΠϓΛݟ͚ͭΔ͜ͱ͕Ͱ͖· ͢ɻ ίʔυϕʔε͔Β@ContentEntityType΍@ConfigEntityTypeͰ จࣈྻݕࡧ͢Δ

Slide 25

Slide 25 text

– ίϯτϦϏϡʔτϞδϡʔϧͷʮDevelʯϞδϡʔϧΛΠϯετʔϧ/༗ޮԽͯ͠ɺ/devel/ entity/info ϖʔδʹΞΫηε͠·͢ɻ – αΠτʹଘࡏ͢ΔશͯͷΤϯςΟςΟλΠϓͷҰཡ͕֬ೝͰ͖·͢ɻʢίΞɺίϯτϦ ϏϡʔτϞδϡʔϧɺΧελϜϞδϡʔϧʣ DevelϞδϡʔϧΛ࢖༻͢Δ

Slide 26

Slide 26 text

ಠࣗͷΤϯςΟςΟλΠϓΛ࡞੒͢Δ

Slide 27

Slide 27 text

ಠࣗͷΤϯςΟςΟλΠϓΛ࡞੒͢Δ – ΤϯςΟςΟλΠϓ͸ϓϥάΠϯγεςϜʹΑͬͯߏ੒͞Εͯ ͍·͢ɻ – ϓϥάΠϯλΠϓ͔ΒϓϥάΠϯΛ࡞੒͢ΔཁྖͰɺಠࣗͷΤ ϯςΟςΟλΠϓΛఆٛ͢Δ͜ͱ͕Ͱ͖·͢ɻ – ϓϥάΠϯͷݕग़ํ๏͸AnnotatedDiscovery͕࢖༻͞Ε͍ͯ· ͢ɻܾΊΒΕͨσΟϨΫτϦߏ੒ͰPHPϑΝΠϧΛ഑ஔ͢Δ͜ ͱͰɺΤϯςΟςΟλΠϓΛఆٛͰ͖·͢ɻ

Slide 28

Slide 28 text

ΧελϜϞδϡʔϧͰಠࣗͷίϯςϯπΤϯςΟςΟλΠ ϓΛ࡞੒͢Δํ๏ ࠓճ͸ྫͱͯ͠ɺίϯςϯπΤϯςΟςΟλΠϓΛఆٛ͢Δํ๏Λ঺հ͠·͢ɻ 1. ίϯςϯπΤϯςΟςΟλΠϓΛఆٛ͢ΔΫϥεΛ༻ҙ͠·͢ɻ a. src/EntityσΟϨΫτϦ಺ʹΫϥεϑΝΠϧΛ࡞੒͠·͢ɻ b. ContentEntityBaseΛ֦ுɺContentEntityInterfaceΛ࣮૷ͨ͠ΫϥεΛ ఆٛ͠·͢ɻ c. ΞϊςʔγϣϯͰϝλσʔλΛهड़͠·͢ɻ d. baseFieldDefinitionsؔ਺ͰجຊϑΟʔϧυΛ௥Ճ͠·͢ɻ

Slide 29

Slide 29 text

ԋश ಠࣗͷίϯςϯπΤϯςΟςΟλΠϓΛఆٛͯ͠ɺར༻ͯ͠ΈΑ͏ʂ 1. ίϯςϯπΤϯςΟςΟλΠϓͷఆٛ 2. entity_type.managerαʔϏεΛ࢖༻ͯ͠ɺ࡞੒ͨ͠ΤϯςΟςΟ λΠϓͷΤϯςΟςΟΛ࡞੒͢Δ 3. ΤϯςΟςΟ͕࡞੒͞Ε͍ͯΔ͔֬ೝ͢Δ ίʔυ͸ͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol8

Slide 30

Slide 30 text

࿅श໰୊

Slide 31

Slide 31 text

࿅श໰୊1 DrupalͷʮΤϯςΟςΟʯʹ͍ͭͯਖ਼͍͠هड़Λબ୒͍ͯͩ͘͠͞ɻ 1. ʮίϯςϯπʯ΋͘͠͸ʮߏ੒ʯͷɺӬଓతͳετϨʔδʹ࢖ ༻͞ΕΔΦϒδΣΫτɻ 2. αΠτͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷ৘ใΛѻ͏σʔλɻ 3. Drupalͷಈ࡞Λมߋ͢ΔPHPؔ਺ɻ 4. Doctrine ORMΛհͯ͠σʔλૢ࡞Ͱ͖Δɻ

Slide 32

Slide 32 text

࿅श໰୊1 DrupalͷʮΤϯςΟςΟʯʹ͍ͭͯਖ਼͍͠هड़Λબ୒͍ͯͩ͘͠͞ɻ 1. ʮίϯςϯπʯ΋͘͠͸ʮߏ੒ʯͷɺӬଓతͳετϨʔδʹ࢖ ༻͞ΕΔΦϒδΣΫτɻ 2. αΠτͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷ৘ใΛѻ͏σʔλɻ 3. Drupalͷಈ࡞Λมߋ͢ΔPHPؔ਺ɻ 4. Doctrine ORMΛհͯ͠σʔλૢ࡞Ͱ͖Δɻ

Slide 33

Slide 33 text

࿅श໰୊2 DrupalͷʮΤϯςΟςΟλΠϓʯʹ͍ͭͯਖ਼͍͠هड़Λબ୒͍ͯͩ͘͠͞ɻ 1. Plugin APIͰߏ੒͞Ε͍ͯΔɻ 2. ϑοΫͰΤϯςΟςΟλΠϓΛఆٛͰ͖Δɻ 3. ΤϯςΟςΟλΠϓʹ͸ඞͣόϯυϧΛ༻ҙ͢Δඞཁ͕͋Δɻ 4. ߏ଄Խ͞Εͨ୯ҰͷΞΠςϜɻ

Slide 34

Slide 34 text

࿅श໰୊2 DrupalͷʮΤϯςΟςΟλΠϓʯʹ͍ͭͯਖ਼͍͠هड़Λબ୒͍ͯͩ͘͠͞ɻ 1. Plugin APIͰߏ੒͞Ε͍ͯΔɻ 2. ϑοΫͰΤϯςΟςΟλΠϓΛఆٛͰ͖Δɻ 3. ΤϯςΟςΟλΠϓʹ͸ඞͣόϯυϧΛ༻ҙ͢Δඞཁ͕͋Δɻ 4. ߏ଄Խ͞Εͨ୯ҰͷΞΠςϜɻ

Slide 35

Slide 35 text

ຊ೔ͷΞδΣϯμ͸ऴྃ

Slide 36

Slide 36 text

ΞδΣϯμ 1. ΤϯςΟςΟͱ͸ 2. Entity APIͰΤϯςΟςΟΛૢ࡞͢Δ 3. طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔ 4. ಠࣗͷΤϯςΟςΟλΠϓΛ࡞੒͢Δ 5. ࿅श໰୊

Slide 37

Slide 37 text

No content