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 モジュール開発入門講座 第5回 サービス
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
アクイアジャパン Acquia Japan
October 05, 2022
Programming
220
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
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
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
840
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
110
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.5k
仕様駆動開発の消費期限
watany
20
8.2k
数百円から始めるRuby電子工作
tarosay
0
140
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
400
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
210
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
110
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
330
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
RailsConf 2023
tenderlove
30
1.5k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
Practical Orchestrator
shlominoach
191
12k
Design in an AI World
tapps
1
280
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
640
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Prompt Engineering for Job Search
mfonobong
0
400
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