Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Drupal モジュール開発入門講座 第2回 シンプルなカスタムモジュールを作ってみよう
アクイアジャパン Acquia Japan
August 25, 2022
Programming
0
40
Drupal モジュール開発入門講座 第2回 シンプルなカスタムモジュールを作ってみよう
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol2
アクイアジャパン Acquia Japan
August 25, 2022
Tweet
Share
More Decks by アクイアジャパン Acquia Japan
See All by アクイアジャパン Acquia Japan
【最終回】Drupal モジュール開発入門講座 第10回 自動テスト
acquiajp1
0
5
Drupal モジュール開発入門講座 第9回 構成
acquiajp1
0
16
DrupalCamp DEN 2023 Iwakuniの魅力を一挙ご紹介! #DrupalCampDEN
acquiajp1
0
26
直近のプロダクトアップデート総まとめ
acquiajp1
0
25
リリース直前!Drupal 10に備えるためのキャッチアップウェビナー
acquiajp1
0
30
【オンラインハンズオン】Docker+LandoでCMS環境を構築してみよう #Drupal #CNDT2022
acquiajp1
0
18
Drupal モジュール開発入門講座 第8回 エンティティ
acquiajp1
0
21
Drupal モジュール開発入門講座 第7回 プラグイン
acquiajp1
0
27
Drupal モジュール開発入門講座 第6回 イベント
acquiajp1
0
34
Other Decks in Programming
See All in Programming
xarray-Datatree: Hierarchical Data Structures for Multi-Model Science
tomnicholas
0
240
Qiita Night PHP 2023
fuwasegu
0
11k
Enumを自動で網羅的にテストしてみた
estie
0
1.4k
Excelの助けを借りて楽にシナリオを作ろう
rpa_niiyama
0
340
エンジニア向け会社紹介資料/engineer-recruiting-pitch
xmile
PRO
0
120
PHP でガチの電卓を作る
memory1994
PRO
2
170
Why Money Forward contributes to Ruby and RubyKaigi?
luccafort
0
240
Remix + Cloudflare Pages + D1 で ポケモン SV のレンタルチームを検索できるアプリを作ってみた
kuroppe1819
4
1.4k
AWS re:Invent recap: SA が選ぶ 『スタートアップに嬉しい新サービス・新機能』 #AWSStartupfm
track3jyo
PRO
1
130
子育てとEMと転職と
_atsushisakai
1
430
監視せなあかんし、五大紙だけにオオカミってな🐺🐺🐺🐺🐺
sadnessojisan
3
1.6k
Swift Expression Macros: a practical introduction
kishikawakatsumi
2
740
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
120
29k
BBQ
matthewcrist
75
8.1k
WebSockets: Embracing the real-time Web
robhawkes
58
6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
217
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
22
1.4k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
Web development in the modern age
philhawksworth
197
9.6k
The Cult of Friendly URLs
andyhume
69
5.1k
Mobile First: as difficult as doing things right
swwweet
213
7.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
109
16k
GraphQLの誤解/rethinking-graphql
sonatard
39
7.8k
Unsuck your backbone
ammeep
659
56k
Transcript
Drupal Ϟδϡʔϧ ։ൃೖߨ࠲ ୈ2ճ γϯϓϧͳΧελϜ ϞδϡʔϧΛ࡞ͬͯΈΑ͏
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛ ߦ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ͠ ·͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞ ΕΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ ͍ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ ·Γ·͢ɻ
ΞδΣϯμ 1. ΧελϜϞδϡʔϧΛ࡞Ζ͏ 2. *.info.ymlϑΝΠϧͷ࡞ 3. ϑοΫΛ࣮ 4. ϧʔςΟϯάͱίϯτϩʔϥʔΛՃ 5.
ϑΥʔϜΛ࡞ 6. ϒϩοΫΛ࡞ 7. ࿅श
ΧελϜϞδϡʔϧΛ࡞Ζ͏
DrupalΛ֦ு͢Δํ๏ ϞδϡʔϧʹΑͬͯDrupalΛมߋɾ֦ு͢Δ͢Δํ๏༷ʑ༻ҙ͞Ε͓ͯ ΓɺΓ͍ͨ͜ͱʹΑͬͯΞϓϩʔν͕ҟͳΓ·͢ɻ – ϑοΫ – ϓϥάΠϯ – ΤϯςΟςΟ –
αʔϏε – ϧʔςΟϯά – Πϕϯτ
खॱ 1. *.info.ymlͷ࡞ 2. ϑοΫΛ࣮ 3. ϧʔςΟϯάͱίϯτϩʔϥʔΛՃ 4. ϑΥʔϜΛ࡞ 5.
ϒϩοΫΛ࡞ ΧελϜϞδϡʔϧͷ࡞εςοϓ Drupal͕ϞδϡʔϧΛͲͷΑ͏ʹѻ͏͔Λֶश͢ΔͨΊʹɺΧελϜϞδϡʔϧΛ࡞͢ΔҰͭͷྫΛ հ͠·͢ɻ υΩϡϝϯτϧʔτԼʹɺmodules/custom/marucha/ ͱ͍͏σΟϨΫτϦΛ࡞͠ɺ͜͜ͰΧελϜϞ δϡʔϧͷ࡞Λߦ͍ͬͯ͘͜ͱͱ͠·͢ɻ ιʔείʔυͪ͜Β→ https://github.com/hmaruyama/my-drupal9-module/compare/master...vol2
*.info.ymlϑΝΠϧͷ࡞
– Ϟδϡʔϧͷ໊લઆ໌ͳͲɺϞδϡʔϧʹؔ͢ΔϝλใΛهड़͢ΔͨΊͷϑΝΠϧͰ ͢ɻ – Ϟδϡʔϧ࡞ʹ͓͍ͯɺ།ҰͷඞਢϑΝΠϧͰ͢ɻ – ͜ͷϑΝΠϧ͑͋͞ΕɺDrupalΧελϜϞδϡʔϧΛదͳϞδϡʔϧͱͯ͠ೝࣝͰ ͖·͢ɻ – YMLܗࣜͷϑΝΠϧͳͷͰɺΠϯσϯτλϒͰͳ͘εϖʔε2ͭͰߦ͏ඞཁ͕͋Γ·͢ɻ
*.info.ymlϑΝΠϧͱ your Drupal project root └── web (document root) └── modules └── custom └── marucha └── marucha.info.yml
marucha.info.ymlΛ࡞͠Α͏ name: Marucha type: module description: 'This is the first
custom module.' core_version_requirement: ^8 || ^9 ඞਢ Ϟδϡʔϧͷϥϕϧ໊ ඞਢ ֦ுػೳͷछผΛࣔ͢ ҙ Ϟδϡʔϧͷઆ໌Λࣔ͢ ඞਢ ରԠ͢ΔίΞόʔδϣϯ
ࢀߟ) *.info.ymlϑΝΠϧͰఆٛՄೳͳKey-ValueϖΞ https://www.drupal.org/docs/creating- modules/let-drupal-know-about-your- module-with-an-infoyml-file
ΧελϜϞδϡʔϧΛ༗ޮԽ͢Δ – *.info.ymlϑΝΠϧΛదʹ༻ҙ͢Δ͚ͩͰɺDrupalϞδϡʔϧΛೝࣝͯ͘͠Ε·͢ɻ – Drupalཧϝχϡʔ > ػೳ֦ு ͷϞδϡʔϧҰཡͷதʹʮMarucha Moduleʯ͕දࣔ͞Ε͍ͯΔ͔֬ೝ͠ ·͢ɻ
– νΣοΫϘοΫεʹνΣοΫΛೖΕͯɺʮΠϯετʔϧʯϘλϯΛΫϦοΫ͠·͢ɻ *.info.ymlϑΝΠϧͷΈͷঢ়ଶͩ ͕ɺσΟϨΫτϦͱϑΝΠϧΛ ਖ਼͘͠ஔ͢Δ͜ͱͰϞδϡʔ ϧͱͯ͠ೝࣝ͞ΕΔʂ
ԋश *.info.ymlϑΝΠϧΛ࡞ͯ͠ɺϞδϡʔϧΛ༗ޮԽ͠Α͏ʂ 1. ΧελϜϞδϡʔϧͷσΟϨΫτϦԼʹ marucha.info.ymlϑΝΠϧΛ࡞͢Δ 2. Drupalͷཧը໘ͷ ػೳ֦ு ϖʔδʹҠಈͯ͠
ΧελϜϞδϡʔϧΛ༗ޮԽ͢Δ
ϑοΫΛ࣮
ϑοΫͰطଘͷϑΥʔϜΛॻ͖͑Α͏
ϑοΫͱʁ – ϑοΫ(Hooks)ͱɺDrupalͷಈ࡞Λมߋ͢ΔؔͰ͢ɻ – ϑοΫΛ༻͢Δ͜ͱͰɺطଘͷίʔυΛॻ͖͑Δ͜ͱͳ͘ɺDrupalίΞଞϞ δϡʔϧͷಈ࡞Λมߋɾ֦ுͰ͖·͢ɻ – ֤ϑοΫ hook_batch_alter() ͷΑ͏ʹ
hook_ Ͱ࢝·Δ໊લ͕͚ͭΒΕ͍ͯ·͢ɻ – ֤ϑοΫʹɺఆٛࡁΈͷҰ࿈ͷύϥϝʔλʔͱɺఆٛࡁΈͷΓ͕༻ҙ͞Εͯ ͍·͢ɻ – جຊతʹɺΧελϜϞδϡʔϧͷ *.moduleϑΝΠϧͰϑοΫΛ࣮͠·͢ɻ – ΧελϜϞδϡʔϧͰΦϦδφϧͷϑοΫΛఏڙ͢Δ͜ͱՄೳͰ͢ɻ https://www.drupal.org/docs/creating-custom- modules/understanding-hooks
DrupalίΞͰ༻ҙ͞Ε͍ͯΔϑοΫؔҰཡ ૯ɿ286ݸ ʢDrupal 9.4.x࣌ʣ https://api.drupal.org/api/ drupal/core%21core.api.php/ group/hooks/9.4.x
ԋश ϑοΫΛ࣮ͯ͠ɺطଘͷϑΥʔϜΛॻ͖͑Α͏ʂ 1. ΧελϜϞδϡʔϧͷσΟϨΫτϦԼʹ marucha.moduleϑΝΠϧΛ࡞͢Δ 2. ར༻(࣮)͍ͨ͠ϑοΫΛυΩϡϝϯτ͔Β୳ͯ͠ɺϑοΫͷίʔυΛ ίϐʔͯ͠marucha.moduleϑΝΠϧʹϖʔετ͢Δ 3.
໊ؔͷ hook_ ෦Λ marucha_ (ϞδϡʔϧͷϚγϯ໊)ʹॻ͖͑Δ 4. ؔͰ࣮ߦ͢ΔॲཧΛهड़͢Δ
ϧʔςΟϯάͱίϯτϩʔϥʔΛՃ
ಠࣗͷϖʔδΛՃ͠Α͏
Drupalͷϖʔδίʔϧϓϩηε https://www.drupal.org/docs/drupal-apis/ routing-system/routing-system-overview ᶃ શͯͷϦΫΤετ index.php(ϑϩϯτί ϯτϩʔϥʔ)Λ௨Δ ᶄ index.phpͰɺSymfonyͷ HTTPKernelΛجͱͨ͠
DrupalKernel͕࣮ߦ͞ΕΔ ᶅ ϦΫΤετͷϧʔτΛಛ ఆ͠ɺίϯτϩʔϥʔΛ࣮ ߦɺςϯϓϨʔτͷϨϯμϦ ϯά͕ߦΘΕΔ ᶆ ίϯτϩʔϥʔͷॲཧ݁ ՌΛHTTPϨεϙϯεͱͯ͠ ฦ٫͢Δ
DrupalͷϧʔςΟϯάγεςϜ – ϧʔςΟϯάɺDrupal͕ड͚औͬͨϦΫΤετʹରͯ͠ɺͲͷίϯ τϩʔϥʔʗΞΫγϣϯΛ࣮ߦ͢Δ͔ΛϚοϐϯά͢ΔͷͰ͢ɻ – Ϟδϡʔϧͷ *.routing.yml ϑΝΠϧͰϧʔςΟϯάΛఆٛͰ͖·͢ɻ ͜Ε͕ϧʔςΟϯάΛఆٛ͢Δ࠷؆୯ͳํ๏Ͱ͢ɻ –
ଞʹɺPHPίʔυͰطଘϧʔτΛมߋ͢Δ͜ͱͰ͖·͢ɻ
DevelϞδϡʔϧͰɺαΠτʹొ ͞Ε͍ͯΔશͯͷϧʔτҰཡΛऔಘ Ͱ͖·͢ɻ /devel/routes DrupalαΠτͷϧʔτҰཡ
ϧʔςΟϯάͷએݴ Ϟδϡʔϧͷ *.routing.yml ϑΝΠϧͰϧʔςΟϯάΛఆٛͰ͖·͢ɻ marucha.page: path: '/marucha' defaults: _controller: '\Drupal\marucha\Controller\MaruchaController::index'
_title: 'Marucha First Page' requirements: _permission: 'access content' https://www.drupal.org/docs/drupal-apis/routing-system/introductory-drupal-routes- and-controllers-example#s-routing-in-routingyml-files
ίϯτϩʔϥʔͷՃ *.routing.yml ϑΝΠϧͷ _controller Ωʔ ʹɺ࣍ͷΛࢦఆ͍ͯ͠·ͨ͠ɻ '\Drupal\marucha\Controller\MaruchaCon troller::index'
ϧʔςΟϯάͰએݴ໊ͨ͠લͱҰக͢Δ Α͏ʹɺίϯτϩʔϥʔΫϥεΛ༻ҙ͠ ͯΞΫγϣϯϝιουΛ࣮͠·͢ɻ <?php namespace Drupal\marucha\Controller; use Drupal\Core\Controller\ControllerBase; /** * Provides route responses for marucha module. */ class MaruchaController extends ControllerBase { /** * Returns a simple page. * * @return array * A simple renderable array. */ public function index() { return ['#markup' => 'Hello world!']; } } src/Controller/MaruchaController.php https://www.drupal.org/docs/drupal-apis/routing-system/introductory-drupal- routes-and-controllers-example#s-building-a-page-controller
ԋश ϧʔςΟϯάͱίϯτϩʔϥʔΛՃͯ͠ɺಠࣗͷϖʔδΛ࡞͠Α͏ʂ 1. ϞδϡʔϧͷσΟϨΫτϦԼʹ marucha.routing.yml ϑΝΠϧΛ࡞͢Δ 2. ϑΝΠϧʹϧʔςΟϯάΛઃఆ͢Δ 3.
ϞδϡʔϧσΟϨΫτϦԼʹ src/Controller/MaruchaController.php ϑΝΠϧΛ࡞͢Δ 4. ΞΫγϣϯϝιουΛ࣮͢Δ
ϑΥʔϜΛ࡞
Form APIͰϑΥʔϜΛ࡞͠Α͏
DrupalͷForm API – DrupalͷForm APIɺHTMLϑΥʔϜΛૢ࡞͢ΔͨΊͷநԽϨΠϠͰ͢ɻ – ϑΥʔϜͷఆٛɺදࣔɺݕূɺૹ৴ɺͱ͍͏ϥΠϑαΠΫϧΛ੍ޚ͠·͢ɻ – \Drupal\Core\Form\FormInterfaceΛ࣮ͯ͠ϑΥʔϜΫϥεΛ࡞͢Δ͜ͱͰɺΧελ ϜϞδϡʔϧͰϑΥʔϜΛ੍ޚͰ͖·͢ɻ
– ϑΥʔϜ͕ཁٻ͞ΕΔͱɺϑΥʔϜϨϯμϦϯάՄೳͳ$formྻͱͯ͠ఆٛ͞Ε· ͢ɻ – $formྻϨϯμϦϯάͷաఔͰHTMLʹม͞ΕɺΤϯυϢʔβʔʹදࣔ͞Ε·͢ɻ https://www.drupal.org/docs/drupal-apis/form- api/introduction-to-form-api
– Form APIɺ\Drupal\Core\Form\FormInterfaceΛ࣮ͨ͠جఈΫϥεΛ ఏڙ͍ͯ͠·͢ɻ͜ΕϑΥʔϜͷ։࢝ͱ֦ͯ͠ுͰ͖·͢ɻ – FormBaseɿ࠷ҰൠతͳϑΥʔϜ – ConfigFormBaseɿཧऀ͕ϞδϡʔϧͷઃఆΛߋ৽Ͱ͖Δઃఆ ϑΥʔϜ –
ConfirmFormBaseɿ֬ೝखॱΛఏڙ͢Δɺίϯςϯπ·ͨઃఆ Λআ͢ΔͨΊͷϑΥʔϜ ϑΥʔϜͷछྨ
ϑΥʔϜΫϥεΛ࡞͢Δ <?php namespace Drupal\marucha\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; class MaruchaForm
extends FormBase { public function getFormId() { /** ϑΥʔϜΛࣝผ͢ΔͨΊͷIDΛฦ٫͢Δ */ } public function buildForm(array $form, FormStateInterface $form_state) { /** ϑΥʔϜΛߏ͢Δ֤ཁૉΛఆٛ͢Δ$formྻΛฦ٫͢Δ */ } public function submitForm(array &$form, FormStateInterface $form_state) { /** ϑΥʔϜͷૹ৴ϑΥʔϜσʔλͷॲཧΛߦ͏ */ } } ϑΥʔϜΫϥε • getFormID() • buildForm() • submitForm() ͷ3ͭͷϝιου͕ඞཁ src/Form/MaruchaForm.php ࡞ͨ͠ϑΥʔϜ • ϧʔςΟϯάʹొͯ͠ϖʔδ ͱͯ͠දࣔͨ͠Γ • FormBuilderαʔϏεΛར༻ͯ͠ ϒϩοΫͰදࣔͨ͠Γ ͢Δ͜ͱ͕Ͱ͖Δ
ԋश Form APIΛར༻ͯ͠ಠࣗͷϑΥʔϜΛ࡞͠Α͏ʂ 1. ϞδϡʔϧͷσΟϨΫτϦԼʹ src/Form/MaruchaForm.php ϑΝΠϧΛ࡞͢Δ 2. ඞཁͳϝιουΛ࣮͢Δ
3. marucha.routing.ymlϑΝΠϧʹϧʔςΟϯάΛઃఆ͢Δ
ϒϩοΫΛ࡞
Block APIͰϒϩοΫΛ࡞͠Α͏
– Block APIɺ࣮ࡍʹ2ͭͷAPIͰߏ͞Ε͍ͯ·͢ɻ – Plugin APIɿϒϩοΫͷίϯςϯπΛϨϯμϦϯά – Entity APIɿϒϩοΫͷஔใϒϩοΫݻ༗ͷߏΛอଘ –
\Drupal\Core\Block\BlockPluginInterfaceΛ࣮͢ΔϒϩοΫΫϥεΛ࡞ͯ͠ɺϒϩοΫΛఆٛ Ͱ͖·͢ɻ – Ͱ͕͢ɺ௨ৗBlockPluginInterfaceͰͳ͘\Drupal\Core\Block\BlockBaseΫϥεΛ֦ுͯ͠Ϋ ϥεΛ࡞͠·͢ɻ – ͜ΕɺϒϩοΫߏΤϯςΟςΟͰߏΛऔಘɾઃఆ͢ΔͨΊͷڞ௨ͷߏϑΥʔϜͱ ϢʔςΟϦςΟϝιουΛఏڙ͢ΔΫϥεͰ͢ɻ Block APIͱ
ϒϩοΫΫϥεΛ࡞͢Δ <?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() ϝιουͰ ϨϯμϦϯάྻ Λฦ٫͢Δ
ԋश Block APIΛར༻ͯ͠ಠࣗͷϒϩοΫΛ࡞͠Α͏ʂ 1. ϞδϡʔϧͷσΟϨΫτϦԼʹ src/Plugin/Block/MaruchaBlock.php ϑΝΠϧΛ࡞͢Δ 2. ΞϊςʔγϣϯͰϒϩοΫΛఆٛ͢Δ
3. ඞཁͳϝιουΛ࣮͢Δ 4. Drupalཧը໘͔Β ϒϩοΫϨΠΞτ ʹҠಈͯ͠ ҙͷϦʔδϣϯʹ࡞ͨ͠ϒϩοΫΛஔ͢Δ
࿅श
࿅श1 *.info.ymlͰඞͣࢦఆ͢Δඞཁͷ͋ΔΛ͔࣍Β2ͭબ͍ͯͩ͘͠͞ɻ 1. name 2. description 3. package 4. type
5. configure
࿅श1 *.info.ymlͰඞͣࢦఆ͢Δඞཁͷ͋ΔΛ͔࣍Β2ͭબ͍ͯͩ͘͠͞ɻ 1. name 2. description 3. package 4. type
5. configure
࿅श2 FormBaseΫϥεΛ֦ு͢ΔϑΥʔϜΫϥεʹඞཁͳϝιου࣍ͷ͏ͪͲ ΕͰ͔͢ʁ͔࣍Β3ͭબ͍ͯͩ͘͠͞ɻ 1. getFormID() 2. buildForm() 3. validateForm() 4.
saveForm() 5. submitForm()
࿅श2 FormBaseΫϥεΛ֦ு͢ΔϑΥʔϜΫϥεʹඞཁͳϝιου࣍ͷ͏ͪͲ ΕͰ͔͢ʁ͔࣍Β3ͭબ͍ͯͩ͘͠͞ɻ 1. getFormID() 2. buildForm() 3. validateForm() 4.
saveForm() 5. submitForm()
࿅श3 ϧʔςΟϯάͷఆٛͲ͜Ͱߦ͏͜ͱ͕Ͱ͖·͔͢ʁ 1. routes.xml Ͱߦ͏ɻ 2. routes.yml Ͱߦ͏ɻ 3. *.routing.yml
Ͱߦ͏ɻ 4. ίϯτϩʔϥʔΫϥεͷΞϊςʔγϣϯͰߦ͏ɻ
࿅श3 ϧʔςΟϯάͷఆٛͲ͜Ͱߦ͏͜ͱ͕Ͱ͖·͔͢ʁ 1. routes.xml Ͱߦ͏ɻ 2. routes.yml Ͱߦ͏ɻ 3. *.routing.yml
Ͱߦ͏ɻ 4. ίϯτϩʔϥʔΫϥεͷΞϊςʔγϣϯͰߦ͏ɻ
࿅श4 ϧʔςΟϯάͷઃఆʹ͓͍ͯɺඞਢͷΩʔ࣍ͷ͏ͪͲΕͰ͔͢ʁ͔࣍Β3 ͭબ͍ͯͩ͘͠͞ɻ 1. defaults 2. path 3. methods 4.
requirements 5. options
࿅श4 ϧʔςΟϯάͷઃఆʹ͓͍ͯɺඞਢͷΩʔ࣍ͷ͏ͪͲΕͰ͔͢ʁ͔࣍ Β3ͭબ͍ͯͩ͘͠͞ɻ 1. defaults 2. path 3. methods 4.
requirements 5. options
࿅श5 ΧελϜϞδϡʔϧ࡞ʹ͓͍ͯɺ࠷ݶඞཁͳϑΝΠϧͲΕͰ͢ ͔ʁ 1. *.info.yml 2. *.module 3. *.services.yml 4.
src/Controller/*.php 5. README.md
࿅श5 ΧελϜϞδϡʔϧ࡞ʹ͓͍ͯɺ࠷ݶඞཁͳϑΝΠϧͲΕͰ͢ ͔ʁ 1. *.info.yml 2. *.module 3. *.services.yml 4.
src/Controller/*.php 5. README.md
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. ΧελϜϞδϡʔϧΛ࡞Ζ͏ 2. *.info.ymlϑΝΠϧͷ࡞ 3. ϑοΫΛ࣮ 4. ϧʔςΟϯάͱίϯτϩʔϥʔΛՃ 5.
ϑΥʔϜΛ࡞ 6. ϒϩοΫΛ࡞ 7. ࿅श
None