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 モジュール開発入門講座 第5回 サービス
Search
アクイアジャパン Acquia Japan
October 05, 2022
Programming
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Drupal モジュール開発入門講座 第5回 サービス
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol5
アクイアジャパン Acquia Japan
October 05, 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
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
1.9k
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
110
Deep dive into the select statement (GopherCon UK)
jespino
0
170
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
6k
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
290
ALB ログから Trace を気合で繋げる技術
fohte
7
880
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
230
App Intentsのビルドプロセスを支える技術
kntkymt
0
230
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
ソフトウェアラスタライザ
fadis
1
800
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
380
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
Typedesign – Prime Four
hannesfritz
42
3.2k
Fireside Chat
paigeccino
43
4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
Transcript
ୈ5ճ αʔϏε Drupal Ϟδϡʔϧ ։ൃೖߨ࠲
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛ ߦ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ ͠·͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞ ΕΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ ͍ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ ·Γ·͢ɻ
ΞδΣϯμ 1. DrupalͷαʔϏεͱDI(Dependency Injection ) 2. αʔϏεΛ༻͢Δ 3. ར༻ՄೳͳαʔϏεΛݟ͚ͭΔ 4.
ಠࣗͷαʔϏεΛ࡞͢Δ 5. ࿅श
DrupalͷαʔϏεͱ DI(Dependency Injection)
ΧελϜϞδϡʔϧͰ࣍ͷಈ࡞Λߦ͏ʹɺͲ͏͢Εྑ͍Ͱ͠ΐ͏ ͔ʁ – Կ͔Λ࣮ߦͨ࣌͠ʹɺαΠτʹεςʔλεϝοηʔδΛද͍ࣔͨ͠ – ݱࡏͷϩάΠϯϢʔβʔΛऔಘ͍ͨ͠ – Drupalͷσʔλϕʔεʹଓͯ͠Λऔಘ͍ͨ͠ – watchdogϩάʹॻ͖ࠐΈ͍ͨ
– ༁͍ͨ͠ DrupalͰ͜ΕΒΛߦ͏ʹͲ͏͢Δʁ
DrupalͷαʔϏεͱ – DrupalͷϞδϡʔϧ։ൃͰग़ͯ͘ΔʮαʔϏεʯͱ͍͏༻ޠ ɺαʔϏείϯςφʹΑͬͯཧ͞ΕΔศརͳΦϒδΣΫτ Ͱ͢ɻ – ͜ͷΈ͕ఏڙ͞ΕΔ͜ͱͰDI(Dependency Injection)Λߦ ͏͜ͱ͕Ͱ͖ɺϓϩάϥϜΛૄ݁߹ʹ͢Δ͜ͱ͕Ͱ͖·͢ɻ
DI(Dependency Injection)ͱʁ – ΦϒδΣΫτؒͷ݁߹ΛԼ͛ͯɺಠཱੑΛߴΊΔςΫχοΫ ͷҰͭͰ͢ɻ – ຊޠͰΑ͘ʮґଘੑͷೖʯͱ༁͞Ε·͢ɻ – ΦϒδΣΫτࢦιϑτΣΞΞʔΩςΫνϟͰҰൠతʹ༻ ͞ΕΔઃܭύλʔϯͱͯ͠Α͘ΒΕ͍ͯ·͢ɻ
ͳͥDI͕ඞཁͳͷ͔ DIͷجຊతͳϝϦοτɺΫϥεͱͦͷґଘ͕ؔૄ݁߹ʹͳΔ͜ ͱͰ͢ɻDIΛ࣮ݱ͢Δ͜ͱͰɺґଘ͕ؔͲͷΑ͏ʹ࣮͞Ε͍ͯ Δ͔ΛΔඞཁ͕ͳ͘ͳΓɺϓϩάϥϜʹ࣍ͷϝϦοτ͕ੜ·Ε· ͢ɻ – ϓϩάϥϜͷ࠶ར༻ੑ – ୯ମςετ(PHPUnit )
– อकੑ
DIΛߦ͏ʹʁ – DIಛஈπʔϧΛΘͳ࣮ͯ͘ݱͰ͖·͕͢ɺΞϓϦέʔγϣϯ͕େ ͖͘ͳΔͱେมʹͳΓ·͢ɻ – ҰൠతʹDIίϯςφͱݺΕΔπʔϧ/ιϑτΣΞΛ༻͍ͯDIΛ࣮ݱ ͠·͢ɻ
DIίϯςφͱ – DIίϯςφͱɺDIΛ࣮ݱ͢ΔͨΊͷπʔϧ/ιϑτΣΞͰ͢ɻ – DIίϯςφΛ͏͜ͱͰɺґଘੑͷཧΛίʔυʹهड़͢Δ͜ͱ ͳࣗ͘ಈతʹߦͬͯ͘Ε·͢ɻ – ֤ݴޠɺWebϑϨʔϜϫʔΫͰ༷ʑͳDIίϯςφ͕ଘࡏ͠·͢ɻ – PHPͰɺPSR-11ͰDIίϯςφ͕ඪ४Խ͞Ε͍ͯ·͢ɻ
– DrupalͰαʔϏείϯςφͰDIΛ࣮ݱͰ͖·͢ɻ
αʔϏείϯςφͱ – αʔϏείϯςφͱɺDrupalͰఏڙ͞ΕΔDIίϯςφͰ͢ɻ – SymfonyͷDependency InjectionίϯϙʔωϯτΛϕʔεʹ࣮͞Ε͍ͯ ·͢ɻ
αʔϏεͱ – αʔϏεͱɺศརͳػೳ͕ఏڙ͞Ε ΔҙͷΦϒδΣΫτͰ͢ɻʢ㲈PHP Ϋϥεʣ – ֤αʔϏε*.services.ymlͰఆٛ͞Ε ·͢ɻ – αʔϏεαʔϏείϯςφΛհͯ͠
ΞΫηεͰ͖·͢ɻ services: cache_context.ip: class: Drupal\Core\Cache\Context\IpCacheContext arguments: ['@request_stack'] tags: - { name: cache.context } cache_context.protocol_version: class: Drupal\Core\Cache\Context\ProtocolVersionCacheContext arguments: ['@request_stack'] tags: - { name: cache.context } cache_context.headers: class: Drupal\Core\Cache\Context\HeadersCacheContext arguments: ['@request_stack'] tags: - { name: cache.context } ...লུ... core.services.yml
༻ޠͷཧ – DI(Dependency Injection)ɺΦϒδΣΫτؒΛૄ݁߹ʹ͢ ΔςΫχοΫͰ͢ɻ – DIίϯςφɺDIΛ࣮ݱ͢ΔͨΊͷπʔϧͰ͢ɻ – αʔϏείϯςφɺDrupalͰఏڙ͞ΕΔDIίϯςφͰ͢ɻ –
αʔϏεɺศརͳػೳΛؚΉҙͷΫϥε/ΦϒδΣΫτ Ͱ͢ɻ
αʔϏεΛ༻͢Δ
αʔϏεΛ͏ํ๏ DrupalͷศརͳαʔϏεʹΞΫηε͢Δʹɺ࣍ͷ2ͭͷํ ๏͕༻ҙ͞Ε͍ͯ·͢ɻ 1. άϩʔόϧؔͰ੩తʹݺͼग़͢ 2. DIΛར༻͢Δ
άϩʔόϧؔͰ੩తʹݺͼग़͢ άϩʔόϧͳ\DrupalΫϥεΛ༻ͯ͠ɺ؆୯ʹαʔϏεͷΠϯελϯεΛऔಘͰ͖·͢ɻ ओʹखଓ͖తͳίʔυͰར༻Ͱ͖·͢ɻ \Drupal::service()ؔ – ίϯςφ͔ΒαʔϏεΛऔಘ͢Δ͕ؔ༻ҙ͞Ε͍ͯ·͢ɻ – ྫɿ\Drupal::service(‘messenger’) ; ઐ༻ͷαʔϏε
– සൟʹར༻͞ΕΔαʔϏεɺ\Drupal͔Βಠࣗͷ੩తϝιου͕༻ҙ͞Ε͍ͯ·͢ɻ – ྫɿDrupal::messenger() ; – DrupalίΞʹɺઐ༻ͷ੩తϝιου͕50ݸଘࡏ͠·͢ɻ
DIΛར༻͢Δ DIΛ༻ͯ͠αʔϏεΛೖͰ͖·͢ɻ create()ϝιου – ίϯτϩʔϥʔɺϑΥʔϜɺϒϩοΫͳͲͷΫϥεͰɺcreate()ϝιουΛ࣮ ͯ͠తͷαʔϏεΛೖͰ͖·͢ɻ αʔϏεҾ – ίϯετϥΫλͱ *.services.ymlϑΝΠϧʹɺར༻͍ͨ͠αʔϏεΛࢦఆ͢Δ͜
ͱͰೖͰ͖·͢ɻ ࠓճɺcreate()ϝιου Λར༻͢Δํ๏ͰDI͢Δํ ๏Λ͝հ͠·͢ɻ
– ՄೳͰ͋ΕɺৗʹDIΛ༻ͯ͠αʔϏεΛΠϯελϯε Խ͢Δ͜ͱ͕ਪ͞Ε·͢ɻ – ྫɿίϯτϩʔϥʔΫϥεɺϑΥʔϜΫϥεͳͲɾɾ – ϑοΫؔͳͲखଓ͖తͳίʔυͷҰ෦Ͱɺάϩʔόϧ ؔΛ༻͢Δଞɺબͷ༨͕͋Γ·ͤΜɻ – ྫɿ*.moduleϑΝΠϧͳͲɾɾ
͍͚
ԋश ϑΥʔϜΫϥεͰαʔϏεΛར༻ͯ͠ΈΑ͏ʂ 1. άϩʔόϧؔͰ੩తʹݺͼग़ͯ͠ΈΑ͏ 2. DIΛར༻ͯ͠ݺͼग़ͯ͠ΈΑ͏ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol5
ར༻ՄೳͳαʔϏεΛݟ͚ͭΔ
αʔϏεͲ͔͜Βఏڙ͞ΕΔʁ – ίΞ – ίϯτϦϏϡʔτϞδϡʔϧ – ΧελϜϞδϡʔϧ
ར༻ՄೳͳαʔϏεΛݟ͚ͭΔํ๏ – api.drupal.org Λࢀর͢Δ – ίʔυϕʔε͔Β *.services.yml ϑΝΠϧΛ ୳͢ –
DevelϞδϡʔϧΛ༻͢Δ
api.drupal.org Λࢀর͢Δ – api.drupal.orgͰɺServicesϖʔδ͔ΒDrupalίΞͷશͯͷαʔϏεͷҰཡΛݟΔ͜ͱ͕Ͱ͖ ·͢ɻ – ͜͜ͰίΞͰఆٛ͞Ε͍ͯΔαʔϏεͷΈͰ͢ɻίϯτϦϏϡʔτϞδϡʔϧΧελϜϞ δϡʔϧͰఆٛ͞ΕͨαʔϏε͔͜͜ΒࢀরͰ͖·ͤΜɻ
ίʔυϕʔε͔Β *.services.yml ϑΝΠϧΛ୳͢ – αʔϏε*.services.ymlϑΝΠϧͰఆٛ͞Ε͍ͯ·͢ɻ – ίΞͰɺcore.services.yml֤ίΞϞδϡʔϧͷ *.services.ymlϑΝΠϧΛݟΔ͜ͱͰαʔϏεΛ֬ೝͰ͖·͢ɻ – Drupalιʔείʔυ͔Β
*.services.yml ϑΝΠϧΛ୳͢͜ͱ ͰɺDrupalαΠτͰར༻ՄೳͳαʔϏεΛݟ͚ͭΔ͜ͱ͕Ͱ͖ ·͢ɻ
– ίϯτϦϏϡʔτϞδϡʔϧͷʮDevelʯϞδϡʔϧΛΠϯετʔϧ/༗ޮԽͯ͠ɺ/ devel/container/service ϖʔδʹΞΫηε͠·͢ɻ – αΠτͰར༻ՄೳͳશͯͷαʔϏεҰཡ͕֬ೝͰ͖·͢ɻʢίΞɺίϯτϦϏϡʔτ ϞδϡʔϧɺΧελϜϞδϡʔϧʣ DevelϞδϡʔϧΛ༻͢Δ
ར༻ՄೳͳαʔϏεΛݟ͚ͭΔํ๏ ·ͱΊ ࢀরઌ ίΞ ίϯτϦϏϡʔτ/ ΧελϜϞδϡʔϧ api.drupal.org ֎෦WebαΠτ ̋ ʔ
*.services.yml ίʔυϕʔε ̋ ̋ DevelϞδϡʔϧ ରͷDrupalαΠτͷཧը໘ ̋ ̋
ಠࣗͷαʔϏεΛ࡞͢Δ
ΧελϜϞδϡʔϧͰಠࣗͷαʔϏεΛ࡞͢Δํ๏ ࠶ར༻Ͱ͖ͦ͏ͳػೳɺಠࣗͷαʔϏεͱͯ͠Γग़͠ɺ ଞͷαʔϏεͱಉ༷ʹར༻͢Δ͜ͱ͕Ͱ͖·͢ɻ 1. srcσΟϨΫτϦʹɺҙͷPHPΫϥεΛ࡞ͯ͠αʔ ϏεΛ࣮͠·͢ɻ 2. *.sevices.ymlϑΝΠϧΛ࡞ͯ͠ɺ࡞ͨ͠αʔϏεΛ ఆٛ͠·͢ɻ
ԋश ಠࣗͷαʔϏεΛఆٛͯ͠ɺར༻ͯ͠ΈΑ͏ʂ 1. ϞδϡʔϧσΟϨΫτϦʹ src/Service/MaruchaService.php ϑΝΠϧΛ࡞͢Δ 2. αʔϏεΫϥεΛ࣮͢Δ 3. ϞδϡʔϧσΟϨΫτϦԼʹ
marucha.services.ymlϑΝΠϧ Λ࡞͠ɺαʔϏεΛఆٛ͢Δ 4. ఆٛͨ͠αʔϏεΛར༻͢Δ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol5
࿅श
࿅श1 DrupalͷʮαʔϏεʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. ศརͳػೳΛؚΜͩҙͷPHPΦϒδΣΫτɻ 2. Drupalͷಈ࡞Λมߋ͢ΔPHPؔɻ 3. ʮίϯςϯπʯ͘͠ʮߏʯͷɺӬଓతͳετϨʔδʹ༻͞ΕΔΦ ϒδΣΫτɻ
࿅श1 DrupalͷʮαʔϏεʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. ศརͳػೳΛؚΜͩҙͷPHPΦϒδΣΫτɻ 2. Drupalͷಈ࡞Λมߋ͢ΔPHPؔɻ 3. ʮίϯςϯπʯ͘͠ʮߏʯͷɺӬଓతͳετϨʔδʹ༻͞ΕΔΦ ϒδΣΫτɻ
࿅श2 DrupalͷʮαʔϏείϯςφʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Drupalݻ༗ͷσβΠϯύλʔϯΛ࣮ݱ͢ΔͨΊͷπʔϧɻ 2. ґଘੑͷೖΛߦ͏ͨΊͷπʔϧɻ 3. Drupal͕ड͚औͬͨϦΫΤετʹରͯ͠ɺͲͷίϯτϩʔϥʔʗΞΫ γϣϯΛ࣮ߦ͢Δ͔ΛϚοϐϯά͢ΔΈɻ
࿅श2 DrupalͷʮαʔϏείϯςφʯʹ͍ͭͯਖ਼͍͠هड़Λબ͍ͯͩ͘͠͞ɻ 1. Drupalݻ༗ͷσβΠϯύλʔϯΛ࣮ݱ͢ΔͨΊͷπʔϧɻ 2. ґଘੑͷೖΛߦ͏ͨΊͷπʔϧɻ 3. Drupal͕ड͚औͬͨϦΫΤετʹରͯ͠ɺͲͷίϯτϩʔϥʔʗΞΫ γϣϯΛ࣮ߦ͢Δ͔ΛϚοϐϯά͢ΔΈɻ
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. DrupalͷαʔϏεͱDI(Dependency Injection ) 2. αʔϏεΛ༻͢Δ 3. ར༻ՄೳͳαʔϏεΛݟ͚ͭΔ 4.
ಠࣗͷαʔϏεΛ࡞͢Δ 5. ࿅श
None