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 モジュール開発入門講座 第7回 プラグイン
Search
アクイアジャパン Acquia Japan
November 02, 2022
Programming
180
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
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
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
190
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
500
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
170
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
550
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.6k
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
780
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
570
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
320
VibeCodingからAgenticWorkflowへ
starfish719
0
430
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
280
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
620
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
A designer walks into a library…
pauljervisheath
211
24k
Deep Space Network (abreviated)
tonyrice
0
250
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
900
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
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