Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Drupal モジュール開発入門講座 第5回 サービス
アクイアジャパン Acquia Japan
October 05, 2022
Programming
0
38
Drupal モジュール開発入門講座 第5回 サービス
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol5
アクイアジャパン Acquia Japan
October 05, 2022
Tweet
Share
More Decks by アクイアジャパン Acquia Japan
See All by アクイアジャパン Acquia Japan
Drupal モジュール開発入門講座 第9回 構成
acquiajp1
0
15
DrupalCamp DEN 2023 Iwakuniの魅力を一挙ご紹介! #DrupalCampDEN
acquiajp1
0
26
直近のプロダクトアップデート総まとめ
acquiajp1
0
25
リリース直前!Drupal 10に備えるためのキャッチアップウェビナー
acquiajp1
0
29
【オンラインハンズオン】Docker+LandoでCMS環境を構築してみよう #Drupal #CNDT2022
acquiajp1
0
18
Drupal モジュール開発入門講座 第8回 エンティティ
acquiajp1
0
21
Drupal モジュール開発入門講座 第7回 プラグイン
acquiajp1
0
25
Drupal モジュール開発入門講座 第6回 イベント
acquiajp1
0
32
Drupal モジュール開発入門講座 第4回 フォーム
acquiajp1
0
32
Other Decks in Programming
See All in Programming
Unity+C#で学ぶ! メモリレイアウトとvtableのすゝめ 〜動的ポリモーフィズムを実現する仕組み〜
rossam
1
240
社会人 20 年目エンジニア、発信で技術学びなおしてる話
e99h2121
1
140
OSC大阪 パスワード認証は人類には早すぎる ~ IDaaSを使ったソーシャルログインのすすめ ~
authyasan
7
1.5k
Excelの助けを借りて楽にシナリオを作ろう
rpa_niiyama
0
310
TokyoR#103_DataProcessing
kilometer
0
540
TSX First な Zero-Runtime SSG potato4d/dodai とその仕組み / owned static site generator #kyotojs
potato4d
0
340
量子コンピュータ時代のプログラミングセミナー / 20221222_Amplify_seminar _route_optimization
fixstars
0
250
[2023년 1월 세미나] 데이터 분석가 되면 어떤 일을 하나요?
datarian
0
600
Functional Data Engineering - A Blueprint for adopting functional principles in data pipeline
vananth22
0
190
良質な技術記事を量産する秘訣 / #MeetsPro
jnchito
11
3.7k
Hono v3 - Do Everything, Run Anywhere, But Small, And Faster
yusukebe
4
130
What's new in Shopware 6.5
shyim
0
110
Featured
See All Featured
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
101
6.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
24
4.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
500
130k
Visualization
eitanlees
128
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
318
19k
The Mythical Team-Month
searls
210
40k
Design by the Numbers
sachag
271
18k
Embracing the Ebb and Flow
colly
75
3.6k
The Invisible Customer
myddelton
113
12k
Why Our Code Smells
bkeepers
PRO
326
55k
Agile that works and the tools we love
rasmusluckow
320
20k
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
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