Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Drupal モジュール開発入門講座 第8回 エンティティ
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
アクイアジャパン Acquia Japan
November 16, 2022
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Drupal モジュール開発入門講座 第8回 エンティティ
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol8
アクイアジャパン Acquia Japan
November 16, 2022
More Decks by アクイアジャパン Acquia Japan
See All by アクイアジャパン Acquia Japan
Auth0 by OktaとDrupalで実践!認証付きアプリケーションの新しいアプローチ
acquiajp
0
240
Drupal 10.3の新機能紹介ウェビナー
acquiajp
0
290
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
140
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
250
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
61
DrupalCon Lille 2023 総まとめウェビナー
acquiajp
0
120
コンテンツ設計手法で変更に強いアプリケーションを実現する〜ローコードによるWebアプリのバックエンド実装 #CNDF2023
acquiajp
0
410
DrupalCon Pittsburgh 2023 総まとめウェビナー
acquiajp
0
110
Acquia製品概要&Site Studioデモのご紹介
acquiajp
0
150
Other Decks in Programming
See All in Programming
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
360
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
180
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
330
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
620
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
340
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
910
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.3k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
250
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Automating Front-end Workflow
addyosmani
1369
210k
The SEO identity crisis: Don't let AI make you average
varn
0
580
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
450
How to train your dragon (web standard)
notwaldorf
96
6.8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
Site-Speed That Sticks
csswizardry
13
1.5k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
390
Transcript
ୈ8ճ ΤϯςΟςΟ Drupal Ϟδϡʔϧ ։ൃೖߨ࠲
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛߦ ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ͠· ͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞Ε ΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ͍ ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ·Γ ·͢ɻ
ΞδΣϯμ 1. ΤϯςΟςΟͱ 2. Entity APIͰΤϯςΟςΟΛૢ࡞͢Δ 3. طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔ 4. ಠࣗͷΤϯςΟςΟλΠϓΛ࡞͢Δ
5. ࿅श
ΤϯςΟςΟͱ
DrupalαΠτʹଘࡏ͢Δσʔλ DrupalαΠτʹ ͲͷΑ͏ͳछྨͷ σʔλ͕ଘࡏͯ͠ ͍ΔͩΖ͏͔ʁ
Drupalͷσʔλͷछྨ DrupalαΠτͰѻΘΕΔσʔλओʹ4छྨʹྨ – ContentɿαΠτ๚ऀʹදࣔ͢Δ͜ͱΛతͱͨ͠ςΩ ετɺը૾ͳͲͷใɻ – ConfigurationɿαΠτͷಈ࡞ɺදࣔํ๏ͳͲΛఆٛ͢Δ ใɻ௨ৗখ͞ͳςΩετͰදݱ͞ΕΔɻ – Stateɿcronδϣϒ͕࠷ޙʹ࣮ߦ͞Εͨ࣌ࠁͳͲɺαΠτ
ͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷใɻ – SessionɿϩάΠϯ͍ͯ͠Δ͔Ͳ͏͔CookieͳͲɺݸʑ ͷαΠτ๚ऀͷαΠτͱͷΓऔΓʹؔ͢Δใɻ https://api.drupal.org/api/drupal/core%21core.api.php/group/info_types/
Drupalͷσʔλͷछྨ DrupalαΠτͰѻΘΕΔσʔλओʹ4छྨʹྨ – ContentɿαΠτ๚ऀʹදࣔ͢Δ͜ͱΛతͱͨ͠ςΩ ετɺը૾ͳͲͷใɻ – ConfigurationɿαΠτͷಈ࡞ɺදࣔํ๏ͳͲΛఆٛ͢Δ ใɻ௨ৗখ͞ͳςΩετͰදݱ͞ΕΔɻ – Stateɿcronδϣϒ͕࠷ޙʹ࣮ߦ͞Εͨ࣌ࠁͳͲɺαΠτ
ͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷใɻ – SessionɿϩάΠϯ͍ͯ͠Δ͔Ͳ͏͔CookieͳͲɺݸʑ ͷαΠτ๚ऀͷαΠτͱͷΓऔΓʹؔ͢Δใɻ https://api.drupal.org/api/drupal/core%21core.api.php/group/info_types/ ΤϯςΟςΟ ※Configurationʹؔͯ͠ɺશͯ Ͱͳ͘Ұ෦ͷσʔλ͕ߏΤϯ ςΟςΟͱͯ͠ѻΘΕΔɻ
ΤϯςΟςΟͱ – ʮίϯςϯπʯ͘͠ʮߏʯͷɺӬଓతͳετϨʔδʹ ༻͞ΕΔΦϒδΣΫτͰ͢ɻ – DrupalͰσʔλΛѻ͏ํ๏ͷҰͭͰ͋Γɺσʔλίϯςϯπ ͷϞσϦϯάΛߦ͍·͢ɻ – ΤϯςΟςΟΛάϧʔϐϯά͢ΔΤϯςΟςΟλΠϓɺ DrupalͷϓϥάΠϯγεςϜʹΑͬͯఆٛ͞Ε·͢ɻ
ΤϯςΟςΟγεςϜʹొ͢Δ༻ޠ – ΤϯςΟςΟɿߏԽ͞Εͨ୯ҰͷΞΠςϜʢΠϯελϯεʣɻ ྫɿ1ͭͷهࣄɺ1ͭͷϢʔβʔ – ΤϯςΟςΟλΠϓɿΤϯςΟςΟΛάϧʔϐϯάͨ͠ͷɻΤϯςΟςΟλΠϓ EntityTypeManagerʹΑͬͯఆٛ͞ΕΔϓϥάΠϯλΠϓͷϓϥάΠϯɻ ྫɿίϯςϯπ(ϊʔυ)ɺλΫιϊϛʔ – όϯυϧɿαϒλΠϓͱݺΕΔɻΤϯςΟςΟλΠϓΛࡉԽͨ͠ͷɻόϯυ
ϧΛ༻ҙ͢Δ͔ҙɻ௨ৗɺόϯυϧߏΤϯςΟςΟʹΑͬͯఆٛ͞ΕΔɻ ྫɿهࣄίϯςϯπλΠϓɺλά
ΤϯςΟςΟͷ֊ ΤϯςΟςΟλΠϓ όϯυϧ ΤϯςΟςΟ ίϯςϯπʢϊʔυʣ هࣄίϯςϯπλΠϓ هࣄ1 هࣄ2 جຊϖʔδίϯςϯπ λΠϓ
جຊϖʔδ1 λΫιϊϛʔλʔϜ λά λά1 λά2 Ϣʔβʔ ʢແ͠ʣ ཧऀ1 ಗ໊Ϣʔβʔ1
– ߏΤϯςΟςΟɿαΠτͷߏՄೳͳઃఆͷใΛѻ͏Φϒ δΣΫτͰ͢ɻߏγεςϜͰ༻͞Ε·͢ɻ༁Λαϙʔτ͠ ͍ͯ·͢ɻϞδϡʔϧͷΠϯετʔϧ࣌ʹಠࣗͷσϑΥϧτઃఆ ΛఏڙͰ͖·͢ɻ – ίϯςϯπΤϯςΟςΟɿઃఆՄೳͳϑΟʔϧυͱجຊϑΟʔϧ υͰߏ͞Ε·͢ɻϦϏδϣϯ༁Λαϙʔτ͍ͯ͠·͢ɻ ߏΤϯςΟςΟͱίϯςϯπΤϯςΟςΟ
ߏΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷݟ͚ํ ΤϯςΟςΟλΠϓ ΤϯςΟςΟ ίϯςϯπʢϊʔυʣ هࣄ1 هࣄ2 جຊϖʔδ1 λΫιϊϛʔλʔϜ λά1 λά2
Ϣʔβʔ ཧऀ1 ಗ໊Ϣʔβʔ1 ίϯςϯπλΠϓ هࣄίϯςϯπλΠϓ جຊϖʔδίϯςϯπλΠϓ ϘΩϟϒϥϦ λά ͲΕ͕ߏΤϯ ςΟςΟͰɺͲΕ ͕ίϯςϯπΤϯ ςΟςΟʁ
ΤϯςΟςΟλΠϓ ΤϯςΟςΟ ίϯςϯπʢϊʔυʣ هࣄ1 هࣄ2 جຊϖʔδ1 λΫιϊϛʔλʔϜ λά1 λά2 Ϣʔβʔ
ཧऀ1 ಗ໊Ϣʔβʔ1 ίϯςϯπλΠϓ هࣄίϯςϯπλΠϓ جຊϖʔδίϯςϯπλΠϓ ϘΩϟϒϥϦ λά ߏΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷݟ͚ํ ߏ ΤϯςΟςΟ ۩ମతʹɺΤϯςΟςΟ λΠϓΛఆٛ͢ΔΫϥεͷ ΞϊςʔγϣϯΛݟͯผ Ͱ͖Δ @ContentEntityTyp e o r @ConfigEntityType ίϯςϯπ ΤϯςΟςΟ
ߏΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷҧ͍ ΤϯςΟςΟλΠϓͷఆٛ ΤϯςΟςΟͷྫ σʔλͷ֨ೲॴ(DB) ߏ ΤϯςΟςΟ ConfigEntityBaseΛ֦ுͨ͠ Ϋϥε • ը૾ελΠϧ
• Ϣʔβʔׂ • ίϯςϯπλΠϓ શͯ config ςʔϒϧʹߦͱ ͯ֨͠ೲ͞Ε·͢ɻ ίϯςϯπ ΤϯςΟςΟ ContentEntityBaseΛ֦ுͨ͠ Ϋϥε • ϊʔυ • λΫιϊϛʔλʔ Ϝ • ίϝϯτ • Ϣʔβʔ ίϯςϯπΤϯςΟςΟλ Πϓ͝ͱʹςʔϒϧ͕༻ҙ ͞Εɺ֤ΤϯςΟςΟߦ ͱͯ֨͠ೲ͞Ε·͢ɻ
ΤϯςΟςΟͱ ·ͱΊ – ΤϯςΟςΟɺʮίϯςϯπʯ͘͠ʮߏʯͷɺӬଓతͳε τϨʔδʹ༻͞ΕΔΦϒδΣΫτͰ͢ɻ – DrupalͰσʔλΛѻ͏ํ๏ͷҰͭͰ͋ΓɺσʔλίϯςϯπͷϞ σϦϯάΛߦ͍·͢ɻ – ΤϯςΟςΟΤϯςΟςΟλΠϓʹΑͬͯɺ߹ʹΑͬͯ͞Β
ʹόϯυϧʹΑͬͯࡉԽ͞Ε·͢ɻ – ΤϯςΟςΟʹߏΤϯςΟςΟͱίϯςϯπΤϯςΟςΟͷ2छ ྨ͕ଘࡏ͠·͢ɻ
Entity APIͰΤϯςΟςΟΛૢ࡞͢Δ
entity_type.managerαʔϏε – entity_type.managerαʔϏεΛհͯ͠ɺΤϯςΟςΟͷಡΈࠐΈɺ࡞ɺ আͳͲͷૢ࡞͕ߦ͑·͢ɻ – entity_type.managerαʔϏεɺΤϯςΟςΟλΠϓʹґଘ͢Δ͜ͱͳ͘ɺ શͯͷΤϯςΟςΟΛѻ͏͜ͱ͕Ͱ͖·͢ɻ
ΤϯςΟςΟͷओͳૢ࡞ – 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
– ΤϯςΟςΟͷ࡞ – ΤϯςΟςΟͷআ ΤϯςΟςΟͷओͳૢ࡞
$newNode = \Drupal::entityTypeManager()->getStorage('node')->create([ 'type' => 'article', 'title' => 'Entity APIͰ࡞ͨ͠هࣄ', ]); $newNode->save(); $newNode->delete();
ԋश entity_type.managerαʔϏεΛͬͯΤϯςΟςΟΛૢ࡞ͯ͠ΈΑ ͏ʂ 1. ΤϯςΟςΟͷಡΈࠐΈ 2. ΤϯςΟςΟ͕࣋ͭͷऔಘ 3. ΤϯςΟςΟͷ࡞ 4.
ΤϯςΟςΟͷআ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol8
طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔ
ΤϯςΟςΟλΠϓͲ͔͜Βఏڙ͞ΕΔʁ – ίΞ(αϒγεςϜ/ίΞϞδϡʔϧ ) – ίϯτϦϏϡʔτϞδϡʔϧ – ΧελϜϞδϡʔϧ
طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔํ๏ – ίʔυϕʔε͔Β@ContentEntityType @ConfigEntityTypeͰจࣈྻݕࡧ͢Δ – DevelϞδϡʔϧΛ༻͢Δ
– ΤϯςΟςΟλΠϓͷఆٛʹɺϓϥάΠϯγεςϜͷAnnotatedDiscoveryݕग़͕༻͍ΒΕ ͍ͯ·͢ɻ – ͳͷͰɺίʔυϕʔεͷPHPϑΝΠϧΛ @ContentEntityType @ConfigEntityType Ͱจ ࣈྻݕࡧ͢Δ͜ͱͰɺίʔυϕʔεʹଘࡏ͢ΔΤϯςΟςΟλΠϓΛݟ͚ͭΔ͜ͱ͕Ͱ͖·
͢ɻ ίʔυϕʔε͔Β@ContentEntityType@ConfigEntityTypeͰ จࣈྻݕࡧ͢Δ
– ίϯτϦϏϡʔτϞδϡʔϧͷʮDevelʯϞδϡʔϧΛΠϯετʔϧ/༗ޮԽͯ͠ɺ/devel/ entity/info ϖʔδʹΞΫηε͠·͢ɻ – αΠτʹଘࡏ͢ΔશͯͷΤϯςΟςΟλΠϓͷҰཡ͕֬ೝͰ͖·͢ɻʢίΞɺίϯτϦ ϏϡʔτϞδϡʔϧɺΧελϜϞδϡʔϧʣ DevelϞδϡʔϧΛ༻͢Δ
ಠࣗͷΤϯςΟςΟλΠϓΛ࡞͢Δ
ಠࣗͷΤϯςΟςΟλΠϓΛ࡞͢Δ – ΤϯςΟςΟλΠϓϓϥάΠϯγεςϜʹΑͬͯߏ͞Εͯ ͍·͢ɻ – ϓϥάΠϯλΠϓ͔ΒϓϥάΠϯΛ࡞͢ΔཁྖͰɺಠࣗͷΤ ϯςΟςΟλΠϓΛఆٛ͢Δ͜ͱ͕Ͱ͖·͢ɻ – ϓϥάΠϯͷݕग़ํ๏AnnotatedDiscovery͕༻͞Ε͍ͯ· ͢ɻܾΊΒΕͨσΟϨΫτϦߏͰPHPϑΝΠϧΛஔ͢Δ͜
ͱͰɺΤϯςΟςΟλΠϓΛఆٛͰ͖·͢ɻ
ΧελϜϞδϡʔϧͰಠࣗͷίϯςϯπΤϯςΟςΟλΠ ϓΛ࡞͢Δํ๏ ࠓճྫͱͯ͠ɺίϯςϯπΤϯςΟςΟλΠϓΛఆٛ͢Δํ๏Λհ͠·͢ɻ 1. ίϯςϯπΤϯςΟςΟλΠϓΛఆٛ͢ΔΫϥεΛ༻ҙ͠·͢ɻ a. src/EntityσΟϨΫτϦʹΫϥεϑΝΠϧΛ࡞͠·͢ɻ b. ContentEntityBaseΛ֦ுɺContentEntityInterfaceΛ࣮ͨ͠ΫϥεΛ ఆٛ͠·͢ɻ
c. ΞϊςʔγϣϯͰϝλσʔλΛهड़͠·͢ɻ d. baseFieldDefinitionsؔͰجຊϑΟʔϧυΛՃ͠·͢ɻ
ԋश ಠࣗͷίϯςϯπΤϯςΟςΟλΠϓΛఆٛͯ͠ɺར༻ͯ͠ΈΑ͏ʂ 1. ίϯςϯπΤϯςΟςΟλΠϓͷఆٛ 2. entity_type.managerαʔϏεΛ༻ͯ͠ɺ࡞ͨ͠ΤϯςΟςΟ λΠϓͷΤϯςΟςΟΛ࡞͢Δ 3. ΤϯςΟςΟ͕࡞͞Ε͍ͯΔ͔֬ೝ͢Δ ίʔυͪ͜Βˠ
https://github.com/hmaruyama/my-drupal9-module/compare/vol8
࿅श
࿅श1 DrupalͷʮΤϯςΟςΟʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. ʮίϯςϯπʯ͘͠ʮߏʯͷɺӬଓతͳετϨʔδʹ ༻͞ΕΔΦϒδΣΫτɻ 2. αΠτͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷใΛѻ͏σʔλɻ 3. Drupalͷಈ࡞Λมߋ͢ΔPHPؔɻ 4.
Doctrine ORMΛհͯ͠σʔλૢ࡞Ͱ͖Δɻ
࿅श1 DrupalͷʮΤϯςΟςΟʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. ʮίϯςϯπʯ͘͠ʮߏʯͷɺӬଓతͳετϨʔδʹ ༻͞ΕΔΦϒδΣΫτɻ 2. αΠτͷݱࡏͷঢ়ଶʹؔ͢ΔҰ࣌తͳੑ࣭ͷใΛѻ͏σʔλɻ 3. Drupalͷಈ࡞Λมߋ͢ΔPHPؔɻ 4.
Doctrine ORMΛհͯ͠σʔλૢ࡞Ͱ͖Δɻ
࿅श2 DrupalͷʮΤϯςΟςΟλΠϓʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Plugin APIͰߏ͞Ε͍ͯΔɻ 2. ϑοΫͰΤϯςΟςΟλΠϓΛఆٛͰ͖Δɻ 3. ΤϯςΟςΟλΠϓʹඞͣόϯυϧΛ༻ҙ͢Δඞཁ͕͋Δɻ 4.
ߏԽ͞Εͨ୯ҰͷΞΠςϜɻ
࿅श2 DrupalͷʮΤϯςΟςΟλΠϓʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Plugin APIͰߏ͞Ε͍ͯΔɻ 2. ϑοΫͰΤϯςΟςΟλΠϓΛఆٛͰ͖Δɻ 3. ΤϯςΟςΟλΠϓʹඞͣόϯυϧΛ༻ҙ͢Δඞཁ͕͋Δɻ 4.
ߏԽ͞Εͨ୯ҰͷΞΠςϜɻ
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. ΤϯςΟςΟͱ 2. Entity APIͰΤϯςΟςΟΛૢ࡞͢Δ 3. طଘͷΤϯςΟςΟλΠϓΛݟ͚ͭΔ 4. ಠࣗͷΤϯςΟςΟλΠϓΛ࡞͢Δ
5. ࿅श
None