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
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
Domain-Driven Transformation
hschwentner
2
2.3k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
150
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
680
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
340
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
550
Agents on Rails - Rails at Scale 2026
irinanazarova
0
330
残高管理から台帳サービスへの進化
artoy
0
140
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
450
Workers Cache を知る
syumai
0
330
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.6k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
The agentic SEO stack - context over prompts
schlessera
0
960
The untapped power of vector embeddings
frankvandijk
2
1.9k
Code Review Best Practice
trishagee
74
20k
Mobile First: as difficult as doing things right
swwweet
225
10k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
Fireside Chat
paigeccino
43
4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Between Models and Reality
mayunak
4
480
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
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