Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Drupal モジュール開発入門講座 第6回 イベント
Search
アクイアジャパン Acquia Japan
October 19, 2022
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Drupal モジュール開発入門講座 第6回 イベント
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol6
アクイアジャパン Acquia Japan
October 19, 2022
More Decks by アクイアジャパン Acquia Japan
See All by アクイアジャパン Acquia Japan
Auth0 by OktaとDrupalで実践!認証付きアプリケーションの新しいアプローチ
acquiajp
0
230
Drupal 10.3の新機能紹介ウェビナー
acquiajp
0
270
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
130
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
230
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
56
DrupalCon Lille 2023 総まとめウェビナー
acquiajp
0
100
コンテンツ設計手法で変更に強いアプリケーションを実現する〜ローコードによるWebアプリのバックエンド実装 #CNDF2023
acquiajp
0
410
DrupalCon Pittsburgh 2023 総まとめウェビナー
acquiajp
0
110
Acquia製品概要&Site Studioデモのご紹介
acquiajp
0
140
Other Decks in Programming
See All in Programming
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
440
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
820
源内ハンズオン概要編
hideg
0
170
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
180
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
510
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
560
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
180
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
400
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
220
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
690
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
320
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
640
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Transcript
ୈ6ճ Πϕϯτ Drupal Ϟδϡʔϧ ։ൃೖߨ࠲
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛ ߦ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ ͠·͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞ ΕΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ ͍ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ ·Γ·͢ɻ
ΞδΣϯμ 1. Πϕϯτͱ 2. ΠϕϯτΛαϒεΫϥΠϒ͢Δ 3. ར༻ՄೳͳΠϕϯτΛݟ͚ͭΔ 4. ಠࣗͷΠϕϯτΛ࡞ͯ͠σΟεύον͢Δ 5.
࿅श
Πϕϯτͱ
Πϕϯτͷ֓ཁ – DrupalͷΠϕϯτγεςϜͱɺDrupalͷಈ࡞ΛมߋͰ͖ΔΑ ͏ʹ͢ΔΈͰ͢ɻ – ΠϕϯτΛ༻͢Δ͜ͱͰɺίΞଞϞδϡʔϧͷίʔυΛม ߋ͢Δ͜ͱͳ͘ॲཧΛ্ॻ͖Ͱ͖·͢ɻ – DrupalͷΠϕϯτγεςϜɺSymfonyͷEventDispatcherίϯ ϙʔωϯτΛϕʔεʹ࣮͞Ε͍ͯ·͢ɻ
Πϕϯτͷ֓ཁ – DrupalͷΠϕϯτγεςϜͱɺDrupalͷಈ࡞ΛมߋͰ͖ΔΑ ͏ʹ͢ΔΈͰ͢ɻ – ΠϕϯτΛ༻͢Δ͜ͱͰɺίΞଞϞδϡʔϧͷίʔυΛม ߋ͢Δ͜ͱͳ͘ॲཧΛ্ॻ͖Ͱ͖·͢ɻ – DrupalͷΠϕϯτγεςϜɺSymfonyͷEventDispacherίϯ ϙʔωϯτΛϕʔεʹ࣮͞Ε͍ͯ·͢ɻ
Ͳ͔͜Ͱฉ͍ͨ Α͏ͳɾɾɾ
Drupal Ϟδϡʔϧ։ൃೖߨ࠲ ୈ3ճ ϑοΫ ΑΓ DrupalͷΠϕϯτγ εςϜɺϑοΫͱ ࣅ͍ͯΔʁʂ
ϑοΫͱΠϕϯτ Drupal 7 Drupal 8 Drupal 9 ɾɾɾ ɾɾɾ ϑοΫɺDrupal
Xͷ͔࣌Βݱࡏʹ͔͚ͯଘࡏ͢Δ Drupal 8Ҏ߱ʹΠϕϯτγεςϜొ Πϕϯτͷํ͕ޙൃɻͰ ͳͥΠϕϯτγεςϜ͕ಋ ೖ͞ΕͨͷͩΖ͏ʁ
ϑοΫͷܽ – ΠϕϯτΛొ͢Δͷ Ωϟογϡͷ࠶ߏஙதͷΈ – ֤ΠϕϯτʹԠͰ͖Δͷ Ϟδϡʔϧ͝ͱʹ1ճͷΈ – ΠϕϯτͷॱংΛ؆୯ʹஅͰ͖ͳ͍ ͔ͭࢦఆͰ͖ͳ͍
ΠϕϯτγεςϜ ͜ΕΒͷܽΛ Χόʔͨ͠Ϟμϯͳ ΈͰ͢ɻ
ΠϕϯτͷΈ config.save ModuleA::onConfigSave ModuleB::onSave ModuleC::notify DrupalίʔυͷͲ͔͜ʹΠ ϕϯτΛݺͼग़͢(ʹσΟε ύον͢Δ)هड़͕ଘࡏ͢Δ ίʔυͰΠϕϯτ͕ݺ ͼग़͞ΕͨΒɺΠϕϯτ
ʹඥ͍͍ͮͯΔαϒεΫ ϥΠό(PHPؔ)͕࣮ߦ ͞ΕΔ … ༏ઌɿ ̍ ༏ઌɿ ̍̌ ༏ઌɿ ̑̌ ModuleC::onSave ༏ઌɿ ̍̌̌ Πϕϯτ ࣮ߦॱংͷࢦఆՄೳʂ ಉϞδϡʔϧͰෳͷ αϒεΫϥΠόΛొ Մೳʂ ΠϕϯταϒεΫϥΠό ΠϕϯταϒεΫϥΠό ΠϕϯταϒεΫϥΠό ΠϕϯταϒεΫϥΠό
ΠϕϯτγεςϜʹొ͢Δ༻ޠ – ΠϕϯτɿࣄΛ໊ࣔ͢લɻPHPΫϥεͷఆͰఆٛ͞ΕΔɻ ྫɿConfigEvents::SAVEɺRoutingEvents::ALTER – ΠϕϯτσΟεύονϟɿγεςϜશମͰΠϕϯτΛݺͼग़͢ʢʹσΟεύο νʣΈɻevent_dispatcherαʔϏεΛར༻ͯ͠ΠϕϯτΛݺͼग़͢ɻ – ΠϕϯταϒεΫϥΠόɿϦεφʔͱݺΕΔɻΠϕϯτ͕ݺͼग़͞Εͨ࣌ʹ ࣮ߦ͍ͨ͠ॲཧͷ༰ɻEventSubscriberInterfaceΛ࣮͢ΔPHPΫϥεͰఆٛ
͞ΕΔɻ – ΠϕϯτϨδετϦɿΠϕϯταϒεΫϥΠόʔ͕ऩू͞Εɺฒସ͑ΒΕΔ ॴɻ
ϑοΫγεςϜ ΠϕϯτγεςϜ Πϕϯτ໊ hook_ Ͱ࢝·Δ໋໊نଇ͕͋Δɻ ྫɿhook_form_alter PHPΫϥεͷఆͱͯ͠ఆٛɻ ྫɿConfigEvents::SAVE ΠϕϯτΛσΟεύον͢ Δ
module_handlerαʔϏεΛར༻ͯ͠Π ϕϯτΛݺͼग़͢ɻ ྫɿ\Drupal::moduleHandler() ->invokeAll() event_dispatcherαʔϏεΛར༻ͯ͠Πϕ ϯτΛݺͼग़͢ɻ ྫɿ$event_dispatcher->dispatch($event, ConfigEvents::SAVE) ΠϕϯταϒεΫϥΠό *.moduleϑΝΠϧʹؔΛ࡞͢Δɻ ྫɿmarucha_form_alter() EventSubscriberInterfaceΛ࣮ͨ͠PHP ΫϥεʹؔΛ࡞͢Δɻ ྫɿMarucha::onConfigSave() ΠϕϯτΛαϒεΫϥΠϒ ͢Δ ಛఆͷ໊લͰؔ(ΠϕϯταϒεΫϥ Πό)Λఆٛ͢Δ͜ͱʹΑͬͯࣗಈతʹ γεςϜʹొ͞ΕΔɻ ΠϕϯταϒεΫϥΠόΫϥεͷ getSubscribedEvents()ؔͰɺαϒεΫ ϥΠϒ͍ͨ͠ΠϕϯτΛࢦఆ͢Δɻ͜ͷ ࡍʹ༏ઌΛࢦఆՄೳɻ ࢀߟ) ϑοΫͱΠϕϯτͷରԠද
ΠϕϯτͰͰ͖Δ͜ͱ – ߏΦϒδΣΫτͷมߋΛτϦΨʔͰ͖Δ – ΤϯςΟςΟλΠϓͷมߋΛτϦΨʔͰ͖Δ – ϧʔςΟϯάͷมߋ – ɾɾɾ ※࣮ɺ·ͩ·ͩϑοΫͰͰ͖Δ͜ͱͷํ͕ଟ͍ɻ
Πϕϯτͱ ·ͱΊ – ΠϕϯτͱɺDrupalͷಈ࡞ΛมߋͰ͖ΔΑ͏ʹ͢ΔΈͰ ͢ɻ – ΠϕϯτϑοΫͱࣅ͍ͯ·͕͢ɺϑοΫͷܽΛ১ͨ͠ ʮϑοΫͷΦϒδΣΫτࢦόʔδϣϯʯͱݴ͑·͢ɻ – কདྷతʹϑοΫ͕Πϕϯτʹஔ͖Θ͍ͬͯ͘ͱࢥΘΕ·͢
͕ɺݱ࣌ͰΠϕϯτͰͰ͖Δ͜ͱΑΓϑοΫͰͰ͖Δ͜ ͱͷํ͕ଟ͍Ͱ͢ɻ
ΠϕϯτΛαϒεΫϥΠϒ͢Δ
ΠϕϯτΛαϒεΫϥΠϒ͢Δํ๏ 1. ར༻͍ͨ͠ΠϕϯτΛ୳͠·͢ɻ 2. *.services.ymlϑΝΠϧΛ࡞ͯ͠ɺαϒεΫϥΠόΛDrupalʹొ ͠·͢ɻ 3. EventSubscriberInterfaceΛ࣮ͨ͠ΠϕϯταϒεΫϥΠόΫϥ εΛ࡞͠·͢ɻ 4.
αϒεΫϥΠόΫϥεͰɾɾɾ a. getSubscribedEvents()ؔΛ࣮ͯ͠ɺ Πϕϯτ໊ => ໊ؔ ͷྻΛฦ٫͠·͢ɻ b. getSubscribedEvents()ؔͰࢦఆͨؔ͠Λ࣮͠·͢ɻ
ԋश ConfigEvents::SAVEΠϕϯτΛαϒεΫϥΠϒͯ͠ΈΑ͏ʂ 1. ϞδϡʔϧσΟϨΫτϦʹmarucha.service.ymlϑΝΠϧΛ࡞ͯ͠ɺ ΠϕϯταϒεΫϥΠόΛొ͢Δ 2. ΠϕϯταϒεΫϥΠόΫϥεΛ࡞͢Δ a. getSubscribedEvents()ؔΛ࣮͢Δ b.
Πϕϯτ͕ݺͼग़͞Εͨ࣌ʹ࣮ߦ͍ͨ͠ॲཧΛؔͱ࣮ͯ͢͠ Δ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol6
ར༻ՄೳͳΠϕϯτΛݟ͚ͭΔ
ΠϕϯτͲ͔͜Βఏڙ͞ΕΔʁ – Symfon y – ίΞ – ίϯτϦϏϡʔτϞδϡʔϧ – ΧελϜϞδϡʔϧ
ར༻ՄೳͳΠϕϯτΛݟ͚ͭΔํ๏ – api.drupal.org Λࢀর͢Δ – ίʔυϕʔε͔Β @Event Ͱจࣈྻݕࡧ͢ Δ –
Devel/Web ProfilerϞδϡʔϧΛ༻͢Δ
api.drupal.org Λࢀর͢Δ – api.drupal.orgͰɺEventsϖʔδ͔ΒDrupalίΞͷશͯͷΠϕϯτͷҰཡΛݟΔ ͜ͱ͕Ͱ͖·͢ɻ – ͜͜ͰίΞͰఆٛ͞Ε͍ͯΔΠϕϯτͷΈͰ͢ɻSymfonyɺίϯτϦϏϡʔτϞ δϡʔϧɺΧελϜϞδϡʔϧͰఆٛ͞ΕͨΠϕϯτ͔͜͜ΒࢀরͰ͖·ͤΜɻ
ίʔυϕʔε͔Β @Event Ͱจࣈྻݕࡧ͢Δ – ΠϕϯτPHPΫϥεͷఆͱͯ͠ఆٛ͞Ε͍ͯ·͢ɻ – ΠϕϯτͰ͋Δ͜ͱΛࣔͨ͢ΊʹɺఆͷDocCommentʹ @Event λάΛهड़͢Δ͜ͱ͕DrupalίʔσΟϯάنͰఆΊ ΒΕ͍ͯ·͢ɻ
– Drupalιʔείʔυ͔Β @Event Ͱจࣈྻݕࡧ͢Δ͜ͱͰɺ DrupalαΠτͰར༻ՄೳͳΠϕϯτΛݟ͚ͭΔ͜ͱ͕Ͱ͖· ͢ɻ
– ίϯτϦϏϡʔτϞδϡʔϧͷʮDevelʯϞδϡʔϧΛΠϯετʔϧ/༗ޮԽͯ͠ɺ/ devel/events ϖʔδʹΞΫηε͠·͢ɻ – αΠτͰར༻ՄೳͳશͯͷΠϕϯτҰཡͱΠϕϯτʹඥͮ͘αϒεΫϥΠόҰཡ͕֬ ೝͰ͖·͢ɻʢSymfonyɺίΞɺίϯτϦϏϡʔτϞδϡʔϧɺΧελϜϞδϡʔϧʣ DevelϞδϡʔϧΛ༻͢Δ
– ίϯτϦϏϡʔτϞδϡʔϧͷʮWeb ProfilerʯϞδϡʔϧΛΠϯετʔ ϧ/༗ޮԽͯ͠ɺWeb ProfilerͷઃఆϖʔδͰEvents߲Λ༗ޮʹ͠·͢ɻ – Web ProfilerͰɺϦΫΤετຖͷݺͼग़͞ΕͨΠϕϯτҰཡͱɺ࣮ߦ͞ ΕͨΠϕϯταϒεΫϥΠόҰཡ͕֬ೝͰ͖·͢ɻ Web
ProfilerϞδϡʔϧΛ༻͢Δ
ར༻ՄೳͳΠϕϯτΛݟ͚ͭΔํ๏ ·ͱΊ ࢀরઌ ίΞ Symfony/ίϯτϦϏϡʔ τϞδϡʔϧ/ΧελϜϞ δϡʔϧ api.drupal.org ֎෦WebαΠτ ̋
ʔ @EventͰͷจࣈྻݕࡧ ίʔυϕʔε ̋ ̋ DevelϞδϡʔϧ ରͷDrupalαΠτͷཧը໘ ̋ ̋ Web ProfilerϞδϡʔ ϧ ରͷDrupalαΠτͷཧը໘ ̋ ※ ̋ ※ ※ ϦΫΤετຖʹݺͼग़͞Εͨ/͞Εͳ͔ͬͨΠϕϯτҰཡ͕֬ೝ Ͱ͖Δ
ಠࣗͷΠϕϯτΛ࡞ͯ͠ σΟεύον͢Δ
ΧελϜϞδϡʔϧͰಠࣗͷΠϕϯτΛ࡞͢Δํ๏ 1. ΠϕϯτʹҰҙͷ໊લΛ͚·͢ɻ 2. Drupal\Component\EventDispatcher\EventΛ֦ு͢ΔΠϕϯτ ΫϥεΛ࡞͠·͢ɻ 3. event_dispatcherαʔϏεΛ༻ͯ͠ΠϕϯτΛσΟεύον ͠·͢ɻ
ԋश ಠࣗͷΠϕϯτΛఆٛͯ͠ɺར༻ͯ͠ΈΑ͏ʂ 1. ϞδϡʔϧσΟϨΫτϦʹ src/Event/MaruchaEvents.php ϑΝ ΠϧΛ࡞ͯ͠ɺΠϕϯτ໊ΛఆͰ༻ҙ͢Δ 2. src/Event/MaruchaFirstEvent.phpϑΝΠϧΛ࡞ͯ͠ɺΠϕϯτ ΫϥεΛ࣮͢Δ
3. ΠϕϯτΛσΟεύον͢Δ 4. ఆٛͨ͠ΠϕϯτΛαϒεΫϥΠϒ͢Δ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol6
࿅श
࿅श1 DrupalͷʮΠϕϯτʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Drupal 9Ҏ߱ɺϑοΫશͯΠϕϯτʹஔ͖Θͬͨɻ 2. Drupal 7͔ΒίΞʹಋೖ͞Εͨɻ 3. ʮϑοΫʯͷผ໊ɻ
4. SymfonyͷEventDispacherίϯϙʔωϯτΛϕʔεʹ࣮͞Ε͓ͯΓɺΦϒ δΣΫτࢦͷίʔυͰهड़Ͱ͖Δɻ
࿅श1 DrupalͷʮΠϕϯτʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Drupal 9Ҏ߱ɺϑοΫશͯΠϕϯτʹஔ͖Θͬͨɻ 2. Drupal 7͔ΒίΞʹಋೖ͞Εͨɻ 3. ʮϑοΫʯͷผ໊ɻ
4. SymfonyͷEventDispacherίϯϙʔωϯτΛϕʔεʹ࣮͞Ε͓ͯΓɺΦϒ δΣΫτࢦͷίʔυͰهड़Ͱ͖Δɻ
࿅श2 DrupalͷʮΠϕϯτʯʹ͍ͭͯਖ਼͘͠ͳ͍هड़Λબ͍ͯͩ͘͠͞ɻ 1. ΠϕϯταϒεΫϥΠόʹɺΦϓγϣϯͰ༏ઌॱҐΛ͚Δ͜ͱ͕Ͱ͖Δɻ 2. ಉϞδϡʔϧͰෳͷαϒεΫϥΠόΛొ͢Δ͜ͱ͕Ͱ͖Δɻ 3. module_handlerαʔϏεΛར༻ͯ͠ΠϕϯτΛσΟεύον͢Δɻ 4. ΠϕϯτΛαϒεΫϥΠϒ͢Δࡍʹɺ
Symfony\Component\EventDispatcher\EventSubscriberInterfaceΛ࣮ͨ͠Πϕ ϯταϒεΫϥΠόΫϥεΛ༻ҙ͢Δɻ
࿅श2 DrupalͷʮΠϕϯτʯʹ͍ͭͯਖ਼͘͠ͳ͍هड़Λબ͍ͯͩ͘͠͞ɻ 1. ΠϕϯταϒεΫϥΠόʹɺΦϓγϣϯͰ༏ઌॱҐΛ͚Δ͜ͱ͕Ͱ͖Δɻ 2. ಉϞδϡʔϧͰෳͷαϒεΫϥΠόΛొ͢Δ͜ͱ͕Ͱ͖Δɻ 3. module_handlerαʔϏεΛར༻ͯ͠ΠϕϯτΛσΟεύον͢Δɻ 4. ΠϕϯτΛαϒεΫϥΠϒ͢Δࡍʹɺ
Symfony\Component\EventDispatcher\EventSubscriberInterfaceΛ࣮ͨ͠Πϕ ϯταϒεΫϥΠόΫϥεΛ༻ҙ͢Δɻ
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. Πϕϯτͱ 2. ΠϕϯτΛαϒεΫϥΠϒ͢Δ 3. ར༻ՄೳͳΠϕϯτΛݟ͚ͭΔ 4. ಠࣗͷΠϕϯτΛ࡞ͯ͠σΟεύον͢Δ 5.
࿅श
None