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 モジュール開発入門講座 第7回 プラグイン
Search
アクイアジャパン Acquia Japan
November 02, 2022
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Drupal モジュール開発入門講座 第7回 プラグイン
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol7
アクイアジャパン Acquia Japan
November 02, 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
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
630
Intent as Code
shoppingjaws
6
860
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
160
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
140
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
130
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
新卒PdEのリアル
ryu1013
1
480
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
120
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
490
不幸な GC
chencmd
0
900
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
The Curse of the Amulet
leimatthew05
2
14k
A designer walks into a library…
pauljervisheath
211
25k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
The Cost Of JavaScript in 2023
addyosmani
55
10k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
Designing for humans not robots
tammielis
254
26k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Transcript
ୈ7ճ ϓϥάΠϯ Drupal Ϟδϡʔϧ ։ൃೖߨ࠲
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛ ߦ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ ͠·͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞ ΕΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ ͍ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ ·Γ·͢ɻ
ΞδΣϯμ 1. ϓϥάΠϯͱ 2. ϓϥάΠϯλΠϓΛར༻ͯ͠ϓϥάΠϯΛ࡞͢Δ 3. Drupal͕ϓϥάΠϯΛݕग़͢Δํ๏ 4. طଘͷϓϥάΠϯλΠϓΛݟ͚ͭΔ 5.
ಠࣗͷϓϥάΠϯλΠϓΛ࡞͢Δ 6. ࿅श
ϓϥάΠϯͱ
ϓϥάΠϯͷ֓ཁ – DrupalͷϓϥάΠϯγεςϜͱɺಛఆͷจ຺Ͱ܁Γฦ͠ൃੜ͢Δ ࣄฑʹରԠ͢ΔͨΊͷɺ࠶ར༻ՄೳͳΈͰ͢ɻ – Ϟδϡʔϧ/αϒγεςϜʹΑͬͯɺػೳͷܗ͕ఆٛ͞ΕɺଞͷϞ δϡʔϧͰɺಛఆͷಈ࡞Λ࣋ͭϓϥάΠϯΛ࡞Ͱ͖·͢ɻ – ࣅͨΑ͏ͳػೳΛ࣋ͭϓϥάΠϯɺಉ͡ϓϥάΠϯλΠϓʹଐ͠ ·͢ɻ
– DrupalͷϓϥάΠϯγεςϜɺDrupalݻ༗ͷσβΠϯύλʔϯͱݴ ͑·͢ɻ
– DrupalͷϒϩοΫɾɾɾ – ϒϩοΫϨΠΞτͷը໘ͰҙͷϦʔδϣ ϯʹஔՄೳ – ϖʔδ୯Ґɺϩʔϧ୯ҐͷӾཡ੍ޚ͕Մೳ – ༁͕Մೳ –
ͱ͍͏ɺڞ௨ͷΠϯλʔϑΣʔεΛ͍࣋ͬͯΔ – ϓϥάΠϯγεςϜʹΑͬͯɺ֤ϒϩοΫʹڞ௨ͷ ΠϯλʔϑΣʔεΛ࣋ͨͤͭͭɺܾΊΒΕͨൣғ ͰΧελϚΠζͰ͖Δ ϓϥάΠϯͷྫɿϒϩοΫ
ϓϥάΠϯγεςϜʹొ͢Δ༻ޠ – ϓϥάΠϯɿަՄೳͳখ͞ͳػೳɻΧελϜϞδϡʔϧͰ ҙͷϓϥάΠϯλΠϓͷϓϥάΠϯΛ࡞Ͱ͖ΔɻϓϥάΠϯ ɺDrupalίʔυͷҙͷॴͰݕग़ɺΠϯελϯεԽ͞Ε Δɻ – ϓϥάΠϯλΠϓɿϓϥάΠϯΛάϧʔϐϯάͨ͠ͷɻϓϥά ΠϯϚωʔδϟ(ޙड़)ʹΑͬͯϓϥάΠϯλΠϓ͕ఆٛ͞ΕΔɻ
ϓϥάΠϯλΠϓ ϓϥάΠϯ Πϯελϯε Block (ίΞͷBlock αϒεεςϜͰ ఆٛ) Search form (ίΞͷSearchϞδϡʔϧͰఆٛ)
Search form (narrow) Search form (wide) Language switche r (ίΞͷLanguageϞδϡʔϧͰఆٛ) Language switcher ϓϥάΠϯλΠϓͱϓϥάΠϯ
ଞʹ৭ʑɺϓϥάΠϯλΠϓͱϓϥάΠϯ ϓϥάΠϯλΠϓ ϓϥάΠϯ FieldFormatte r (ίΞͷFieldαϒγεςϜͰఆٛ) Plain text Trimmed ImageEffec
t (ίΞͷImageϞδϡʔϧͰఆٛ) Scale Crop Resize ViewsStyl e (ίΞͷViewsϞδϡʔϧͰఆٛ) Unformatted list HTML list
ϓϥάΠϯͱ ·ͱΊ – ϓϥάΠϯγεςϜͱɺಛఆͷจ຺Ͱ܁Γฦ͠ൃੜ͢Δࣄฑʹ ରԠ͢ΔͨΊͷɺ࠶ར༻ՄೳͳΈͰ͢ɻ – ϓϥάΠϯͱɺަՄೳͳখ͞ͳػೳͰ͢ɻ – ϓϥάΠϯλΠϓͱɺϓϥάΠϯΛάϧʔϐϯάͨ͠ͷͰ͢ɻ
ϓϥάΠϯλΠϓΛར༻ͯ͠ ϓϥάΠϯΛ࡞͢Δ
ϓϥάΠϯλΠϓΛར༻ͯ͠ϓϥάΠϯΛ࡞͢Δํ๏ ϓϥάΠϯλΠϓʹΑͬͯํ๏ଟগҟͳΓ·͕͢ɺ͜͜Ͱ AnnotatedClassDiscoveryͷݕग़ํ๏(ޙड़)͕ར༻͞Ε͍ͯΔྫΛհ͠· ͢ɻ 1. దͳσΟϨΫτϦʹphpϑΝΠϧΛஔͯ͠ɾɾɾ a. ඞཁͳϝιου͕ఆٛ͞ΕΔΑ͏ʹɺϓϥάΠϯΠϯλʔϑΣʔε Λ࣮͠·͢ɻجຊΫϥε͕ఏڙ͞Ε͍ͯΔ߹ͦΕΛextends ͠·͢ɻ
b. ΫϥεϑΝΠϧʹదͳΞϊςʔγϣϯΛهड़͠·͢ɻ c. ඞཁͳϝιουΛهड़͠·͢ɻ
ϒϩοΫϓϥάΠϯλΠϓͷϓϥάΠϯΛ࡞͢Δྫ <?php namespace Drupal\marucha\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provide a
custom block. * * @Block( * id = "marucha_block", * admin_label = @Translation("Marucha Block"), * ) */ class MaruchaBlock extends BlockBase { /** * {@inheritDoc} */ public function build() { return ['#markup' => $this->t('This is a Block!'),]; } } src/Plugin/Block/MaruchaBlock.php ΞϊςʔγϣϯͰ ϒϩοΫID ཧ༻ϥϕϧΛ ఆٛ͢Δ ࡞ͨ͠ϒϩοΫ ཧը໘ͷϒϩοΫϨΠΞτ ϖʔδͰαΠτʹஔͰ͖ΔΑ ͏ʹͳΔ build() ϝιουͰ ϨϯμϦϯάྻ Λฦ٫͢Δ
ԋश ϒϩοΫϓϥάΠϯλΠϓͷϓϥάΠϯΛ࡞ͯ͠ΈΑ͏ʂ 1. ϞδϡʔϧͷσΟϨΫτϦԼʹ src/Plugin/Block/MaruchaBlock.php ϑΝΠϧΛ࡞͢Δ 2. BlockBaseΛ֦ு͢Δ 3. ΞϊςʔγϣϯͰϒϩοΫͷϝλσʔλΛఆٛ͢Δ
4. ඞཁͳϝιουΛ࣮͢Δ 5. Drupalཧը໘͔Β ϒϩοΫϨΠΞτ ʹҠಈͯ͠ɺ ҙͷϦʔδϣϯʹ࡞ͨ͠ϒϩοΫϓϥάΠϯΛஔ͢Δ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol7
Drupal͕ϓϥάΠϯΛݕग़͢Δํ๏
ϓϥάΠϯσΟεΧόϦ ϓϥάΠϯσΟεΧόϦ(Plugin Discovery)ͱݺΕΔɺίʔυϕʔε্Ͱϓ ϥάΠϯΛݕग़͢Δํ๏͕4ͭଘࡏ͠·͢ɻ ୭͕ɺ͍ͭɺϓϥάΠϯσΟεΧόϦΛؾʹ͢Δඞཁ͕͋Δ͔ʁ – ಠࣗͷϓϥάΠϯλΠϓΛ࡞͢Δ໘ɿϓϥάΠϯϚωʔδϟΫϥε ͷఆٛͷࡍʹɺ͍ͣΕ͔ͷݕग़ํ๏Λબ͢Δඞཁ͕͋Γ·͢ɻ –
ϓϥάΠϯΛ࡞͢Δ໘ɿϓϥάΠϯλΠϓ͕ར༻͢Δݕग़ํ๏ʹ ଇ࣮ͬͯ͢Δඞཁ͕͋Γ·͢ɻ
ϓϥάΠϯσΟεΧόϦ 4ͭͷҟͳΔํ๏ – AnnotatedClassDiscoveryɿdocblockͰϝλσʔλΛಡΈࠐΉํ๏Ͱ͢ɻϓϥάΠϯΛ࡞ ͢ΔଆɺܾΊΒΕͨσΟϨΫτϦߏͰϓϥάΠϯΫϥεΛஔͯ͠ɺΞϊςʔ γϣϯͰϝλσʔλΛఆٛ͠·͢ɻ΄ͱΜͲͷϓϥάΠϯλΠϓ͕͜ͷݕग़ํ๏Λར༻ ͍ͯ͠·͢ɻ – YamlDiscoveryɿYMLϑΝΠϧͰϝλσʔλΛಡΈࠐΉํ๏Ͱ͢ɻϓϥάΠϯΛ࡞͢Δ ଆɺܾΊΒΕͨϑΝΠϧ໊ͰYMLϑΝΠϧΛஔͯ͠ɺYMLܗࣜͰϝλσʔλΛఆٛ
͠·͢ɻMenuLinkBreakpointsͳͲͷҰ෦ͷϓϥάΠϯλΠϓͰར༻͞Ε͍ͯ·͢ɻ – StaticDiscovery – HookDiscovery ΄ͱΜͲར༻͞Ε͍ͯͳ͍ʁ
طଘͷϓϥάΠϯλΠϓΛݟ͚ͭΔ
ϓϥάΠϯλΠϓͲ͔͜Βఏڙ͞ΕΔʁ – ίΞ(αϒγεςϜ/ίΞϞδϡʔϧ ) – ίϯτϦϏϡʔτϞδϡʔϧ – ΧελϜϞδϡʔϧ
طଘͷϓϥάΠϯλΠϓΛݟ͚ͭΔํ๏ – ΞϊςʔγϣϯΫϥεΛ୳͢ – *.services.yml͔Β୳͢
ΞϊςʔγϣϯΫϥεΛ୳͢ – ݱ࣌Ͱ΄ͱΜͲͷϓϥάΠϯλΠϓ͕ʮAnnotatedClassDiscoveryʯΛ༻ͯ͠ ϓϥάΠϯΛݕग़͠·͢ɻ – ͔ͭɺݱ࣌ͰΞϊςʔγϣϯϓϥάΠϯγεςϜͰͷΈ༻͞Ε͍ͯ·͢ɻ – ͭ·ΓΞϊςʔγϣϯΫϥεΛ୳͢͜ͱͰɺ΄ͱΜͲͷϓϥάΠϯλΠϓΛݟ͚ͭΔ ͜ͱ͕Ͱ͖·͢ɻ –
api.drupal.orgͰɺAnnotationsϖʔδ͔ΒDrupalίΞʹଘࡏ͢ΔΞϊςʔγϣϯΫ ϥεͷҰཡΛݟΔ͜ͱ͕Ͱ͖·͢ɻ – Drupalιʔείʔυ্͔ΒϑΝΠϧݕࡧͰݟ͚ͭΔ͜ͱ͕Ͱ͖·͢ɻ
*.services.yml͔Β୳͢ – ϓϥάΠϯλΠϓͷ֤ϓϥάΠϯɺϓϥάΠϯϚωʔδϟʢαʔϏεʣΛհ͠ ͯݺͼग़͞Ε·͢ɻ – *.services.ymlʹొ͞ΕͨϓϥάΠϯϚωʔδϟͷϚγϯ໊ plugin.manager.* ͱ͍͏໊લʹͳ͍ͬͯΔͷ͕ଟ͍Ͱ͢ɻ※શͯͰແ͍ – ࣮֬ͳํ๏Ͱແ͍Ͱ͕͢ɺ*services.ymlϑΝΠϧΛ
plugin.manager. Ͱจࣈ ྻݕࡧ͢Δ͜ͱͰҰ෦ͷϓϥάΠϯλΠϓΛݟ͚ͭΔ͜ͱ͕Ͱ͖·͢ɻ
ࢀߟ) ViewsϞδϡʔϧͷ߹ – ίΞͷViewsϞδϡʔϧ͔Βɺ͍͔ͭ͘ͷ ϓϥάΠϯλΠϓ͕ఏڙ͞Ε͍ͯ·͢ɻ – Viewsͷ߹ɺDrupalཧը໘ͷϨϙʔ τ > Views
ϓϥάΠϯ ͷϖʔδ͔Βɺ ViewsϞδϡʔϧͰఏڙ͞Ε͍ͯΔϓϥά ΠϯλΠϓҰཡΛݟΔ͜ͱ͕Ͱ͖·͢ɻ
ಠࣗͷϓϥάΠϯλΠϓΛ࡞͢Δ
ΧελϜϞδϡʔϧͰಠࣗͷϓϥάΠϯλΠϓΛ ࡞͢Δํ๏ AnnotatedClassDiscoveryͷݕग़ํ๏Λ༻͍ͨྫΛհ͠·͢ɻ 1. ϓϥάΠϯϚωʔδϟΫϥεΛ༻ҙ͠·͢ɻ a. ΫϥεͰϓϥάΠϯͷݕग़ํ๏ఆ͍͖ٛͯ͠·͢ɻ b. ࡞ͨ͠ΫϥεΛ*.services.ymlʹొ͠·͢ɻ 2.
ΞϊςʔγϣϯΫϥεΛ༻ҙ͠·͢ɻ a. ϓϥάΠϯͰར༻͍ͨ͠ϝλσʔλΛఆٛ͠·͢ɻ 3. ΠϯλʔϑΣʔεΛ༻ҙ͠·͢ɻ a. ϓϥάΠϯͰ࣮ͯ͠΄͍͠ϝιουΛఆٛ͠·͢ɻ 4. جຊΫϥεΛ༻ҙ͠·͢ɻʢΦϓγϣϯʣ a. ΠϯλʔϑΣʔεΛ࣮ͯ͠جຊΫϥεΛ༻ҙͯ͠ɺϝιουͷσϑΥϧτͷॲཧΛهड़ ͠·͢ɻ
ϓϥάΠϯϚωʔδϟͱ – ϓϥάΠϯϚωʔδϟɺ࣍ͷ͜ͱΛߦ͍·͢ɻ – ৽͍͠ϓϥάΠϯλΠϓͷఆٛ – ϓϥάΠϯͷݕग़ํ๏ͷఆٛ – ϓϥάΠϯͷݕग़ͱΠϯελϯεԽ –
ϓϥάΠϯϚωʔδϟαʔϏεͱͯ͠ఆٛ͞Ε·͢ɻ αʔϏεͷϚγϯ໊ʹɺplugin.manager.* ͷ໋໊نଇ͕Α͘ར ༻͞Ε·͢ɻ
ϓϥάΠϯϚωʔδϟΛ༻͢Δ ϓϥάΠϯϚωʔδϟαʔϏεΛݺͼग़ͯ͠ɾɾ – ར༻ՄೳͳϓϥάΠϯͷҰཡΛऔಘ͢Δ – ಛఆͷϓϥάΠϯΛऔಘ͢Δ –
ϓϥάΠϯͷߏࡁΈΠϯελϯεΛ࡞͢Δ $type = \Drupal::service('plugin.manager.tapioca'); $plugin_definitions = $type->getDefinitions(); $plugin_definition = $type->getDefinition('tapioca_milk_tea'); $plugin = $type->createInstance('tapioca_milk_tea', ['of' => 'configuration values']);
ԋश ಠࣗͷϓϥάΠϯλΠϓΛఆٛͯ͠ɺར༻ͯ͠ΈΑ͏ʂ 1. ϓϥάΠϯλΠϓͷఆٛ 2. ϓϥάΠϯϚωʔδϟΛ༻ͯ͠ɺ࡞ͨ͠ϓϥάΠϯλΠϓͷϓϥά ΠϯΛݺͼग़͢ 3. ࡞ͨ͠ϓϥάΠϯλΠϓͰϓϥάΠϯΛ࡞͢Δ ίʔυͪ͜Βˠ
https://github.com/hmaruyama/my-drupal9-module/compare/vol7
࿅श
࿅श1 DrupalͷʮϓϥάΠϯʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Drupalͷಈ࡞Λมߋ͢ΔPHPؔɻ 2. ʮϞδϡʔϧʯͷผ໊ɻ 3. ϓϥάΠϯλΠϓʹάϧʔϐϯά͞ΕΔɺަՄೳͳػೳɻ
࿅श1 DrupalͷʮϓϥάΠϯʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Drupalͷಈ࡞Λมߋ͢ΔPHPؔɻ 2. ʮϞδϡʔϧʯͷผ໊ɻ 3. ϓϥάΠϯλΠϓʹάϧʔϐϯά͞ΕΔɺަՄೳͳػೳɻ
࿅श2 ϓϥάΠϯσΟεΧόϦʹ͍ͭͯਖ਼͘͠ͳ͍هड़Λબ͍ͯͩ͘͠͞ɻ 1. DrupalίΞͰAnnotatedClassDiscoveryͱݺΕΔݕग़ํ๏ͷΈ ఏڙ͞Ε͍ͯΔɻ 2. ϓϥάΠϯϚωʔδϟͰɺϓϥάΠϯλΠϓ͕༻͢Δݕग़ํ๏Λ ఆٛ͢Δɻ 3. ಠࣗʹݕग़ํ๏Λఆٛ͢Δ͜ͱ͕Ͱ͖Δɻ
࿅श2 ϓϥάΠϯσΟεΧόϦʹ͍ͭͯਖ਼͘͠ͳ͍هड़Λબ͍ͯͩ͘͠͞ɻ 1. DrupalίΞͰAnnotatedClassDiscoveryͱݺΕΔݕग़ํ๏ͷΈ ఏڙ͞Ε͍ͯΔɻ 2. ϓϥάΠϯϚωʔδϟͰɺϓϥάΠϯλΠϓ͕༻͢Δݕग़ํ๏Λ ఆٛ͢Δɻ 3. ಠࣗʹݕग़ํ๏Λఆٛ͢Δ͜ͱ͕Ͱ͖Δɻ
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. ϓϥάΠϯͱ 2. ϓϥάΠϯλΠϓΛར༻ͯ͠ϓϥάΠϯΛ࡞͢Δ 3. Drupal͕ϓϥάΠϯΛݕग़͢Δํ๏ 4. طଘͷϓϥάΠϯλΠϓΛݟ͚ͭΔ 5.
ಠࣗͷϓϥάΠϯλΠϓΛ࡞͢Δ 6. ࿅श
None