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
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
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.8k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
340
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
350
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
310
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
340
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
390
カツオ、ご期待ください
suneo3476
0
150
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
FreeBSDでZabbixを動かす
kenkino
0
360
setup-vp GitLab対応の裏側
naokihaba
0
150
速習iPhone Duo対応
yuukiw00w
2
960
Domain-Driven Transformation
hschwentner
2
2.3k
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
The Curious Case for Waylosing
cassininazir
1
550
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Code Reviewing Like a Champion
maltzj
528
40k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Designing Experiences People Love
moore
143
24k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.2k
Site-Speed That Sticks
csswizardry
13
1.5k
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