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 モジュール開発入門講座 第6回 イベント
Search
アクイアジャパン Acquia Japan
October 19, 2022
Programming
190
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
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
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
13
6.6k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
180
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
440
すこし踏み込む CancellationToken
htkym
2
1.6k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
120
Jetpack Compose Mechanisms
skydoves
2
370
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
340
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.4k
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
620
The Rails Doctrine Decade
koic
2
490
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
550
Featured
See All Featured
Believing is Seeing
oripsolob
1
240
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
610
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
260
Building Adaptive Systems
keathley
44
3.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
310
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Mind Mapping
helmedeiros
1
390
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
BBQ
matthewcrist
89
10k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
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