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
280
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
140
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
240
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
57
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
AIの中の人になってみる
htkym
0
170
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
140
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
3.8k
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
630
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
470
Deep dive into the select statement (GopherCon UK)
jespino
0
170
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
160
信頼性の目標を誰も求めてない
shubox
0
500
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
A Tale of Four Properties
chriscoyier
163
24k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
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