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
Druapl テーマ開発入門講座 第6回 アセットライブラリ
Search
アクイアジャパン Acquia Japan
June 15, 2022
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Druapl テーマ開発入門講座 第6回 アセットライブラリ
https://www.acquia.com/jp/events/webinars/drupal-theming-development-vol6
アクイアジャパン Acquia Japan
June 15, 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
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
470
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
2
760
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
Heart of Swift Concurrency
koher
0
180
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
190
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
150
Security issues being discussed on Web Platforms
petamoriken
0
690
XHTMLが残したもの
yosuke_furukawa
PRO
2
680
Building an Out-of-Order CPU
latte72
1
750
不幸な GC
chencmd
0
900
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
520
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
660
A designer walks into a library…
pauljervisheath
211
25k
Google's AI Overviews - The New Search
badams
0
1.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Chasing Engaging Ingredients in Design
codingconduct
0
310
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Transcript
ୈ6ճ ΞηοτϥΠϒϥϦ Drupal ςʔϚ ։ൃೖߨ࠲
Drupal ςʔϚ։ൃೖߨ࠲γϦʔζ – Drupalʹ͓͚ΔʮςʔϚʯͱɺWebαΠτͷݟͨΛ୲͏ػೳͰ͢ɻຊΣϏφʔγϦʔ ζͰɺDrupalͷςʔϚ։ൃʹؔ͢ΔجૅࣝΛղઆ͠·͢ɻ – DrupalͷϑϩϯτΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜςʔϚΛ࡞Ε ΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ – DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ
͍ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ ·Γ·͢ɻ
1. ΞηοτϥΠϒϥϦͱ 2. ΞηοτϥΠϒϥϦΛఆٛ͢Δ 3. ͞·͟·ͳఆٛํ๏ 4. ΞηοτϥΠϒϥϦΛಡΈࠐΉ 5. ϥΠϒϥϦͷΦʔόʔϥΠυͱ֦ு
6. PHPͷΛJavaScriptͰ༻͢Δ 7. ࿅श ΞδΣϯμ
ΞηοτϥΠϒϥϦͱ
ΞηοτϥΠϒϥϦͱ – ΞηοτϥΠϒϥϦͱɺCSSϑΝΠϧJavaScriptϑΝΠϧΛͻͱ·ͱΊ ʹͨ͠ͷͰ͢ɻ – DrupalͰςϯϓϨʔτʹCSSJSͷURLΛຒΊࠐΉͷͰͳ͘ɺΞηοτ ϥΠϒϥϦΛհͯ͠Drupalʹ͑·͢ɻ – ͜ΕʹΑΓɺγεςϜ෦ͰDrupal͕CSSͱJSͷѹॖΩϟογϡɺϩʔυ ͢Δॱ൪ͷࢦఆɺಛఆͷϖʔδͷΈͰಡΈࠐΉͳͲͷॲཧΛߦ͏͜ͱ͕Ͱ͖
·͢ɻ – ΞηοτϥΠϒϥϦ֤ςʔϚͷ *.libraries.yml ϑΝΠϧͰఆٛͰ͖·͢ɻ
ΞηοτϥΠϒϥϦΛಡΈࠐΉͨΊͷखॱ 1. ಡΈࠐΈ͍ͨCSS/JSϑΝΠϧΛ४උ͠·͢ɻ 2. *.libraries.yml ͰΞηοτϥΠϒϥϦΛఆٛ͠·͢ɻ 3. ΞηοτϥΠϒϥϦΛಡΈࠐΈ·͢ɻ a. શͯͷϖʔδͰݺͼग़͢
- *.info.ymlʹఆٛ b. ಛఆͷTwigςϯϓϨʔτ - *.html.twigʹఆٛ c. ಛఆͷϒϩοΫɺϊʔυ - *.themeʹఆٛ https://www.drupal.org/docs/theming-drupal/adding- stylesheets-css-and-javascript-js-to-a-drupal-theme
ΞηοτϥΠϒϥϦΛఆٛ͢Δ
γϯϓϧͳྫ global-styling: version: 1.x css: theme: css/styles.css: {} global-scripts: version:
1.x js: js/script.js: {} ςʔϚσΟϨΫτϦԼʹ*.libraries.yml ϑΝΠϧΛ࡞͠ɺΞηοτϥΠϒϥϦΛఆٛ͠·͢ɻ͜ ͷྫͰزͭͷϥΠϒϥϦ͕ఆٛ͞Ε͍ͯΔͰ͠ΐ͏ʁ
γϯϓϧͳྫ global-styling: version: 1.x css: theme: css/styles.css: {} global-scripts: version:
1.x js: js/script.js: {} Aɿglobal-styling ͱ global-scripts ͷ2ͭͷϥΠϒϥϦ͕ఆٛ͞Ε͍ͯΔ͜ͱ͕Θ͔Γ·͢ɻ͜ͷఆٛ͞Εͨϥ ΠϒϥϦΛ༻ͯ͠ɺαΠτͷ͞·͟·ͳॴͰಡΈࠐΉ͜ͱ͕Ͱ͖·͢ɻ
ࢀߟ) SMACSSͱ – Scalable and Modular Architecture for CSS –
CSSઃܭख๏ͷҰͭɻCSSΛ5ͭͷΧςΰϦʹྨͯ͠هड़͍ͯ͘͜͠ͱͰɺίʔυͷϝϯςφϯεੑΛ্ͤ͞· ͢ɻCSSઃܭख๏ଞʹBEMOOCSS͕༗໊Ͱ͢ɻ – 5ͭͷྨ – Base — HTMLཁૉͷελΠϦϯά – Layout — άϦουγεςϜΛؚΉϖʔδϨΠΞτͷελΠϦϯά – Component — ࠶ར༻ՄೳͳUIཁૉͷελΠϦϯά ※ SMACSSͰModuleͱݺΕΔ – State — ϚεΦʔόʔͳͲͷΫϥΠΞϯτଆͷίϯϙʔωϯτมߋͷελΠϦϯά – Theme — ίϯϙʔωϯτͷࢹ֮తͳελΠϦϯά – DrupalͰSMACSSΛ༻͍ͯCSSΛྨ͠·͢ɻ – Base, Layout, Component, State, Themeͷॱ൪ͰಡΈࠐΉΑ͏ʹͳ͍ͬͯ·͢ɻ
ԋश ίΞͷ *.libraries.yml Λ͍ͯΈΑ͏ – ͲΜͳׅΓͰϥΠϒϥϦ͕ఆٛ͞Ε͍ͯΔ͔ – ͲΜͳΦϓγϣϯ͕༻͞Ε͍ͯΔ͔
͞·͟·ͳఆٛํ๏
CSS/JSΛఆٛ͢Δࡍʹར༻ՄೳͳΦϓγϣϯʢ̍ʣ ྫɿΞηοτ͕طʹॖখ͞Ε͍ͯΔ͔ʢσϑΥϧτfalseʣ ྫɿΞηοτͷιʔεΛࢦఆ͢ΔʢσϑΥϧτfileʣ assets/vendor/ckeditor5/alignment/alignment.js: { minified: true } http://example.com/script.js: {
type: external }
CSS/JSΛఆٛ͢Δࡍʹར༻ՄೳͳΦϓγϣϯʢ̎ʣ ྫɿଐੑΛՃ͢Δ ྫɿଞͷΞηοτͱ૬ରతͳॱংΛௐ͢Δ js/editor.formattedTextEditor.js: { attributes: { defer: true }
} css/components/user.css: { weight: -10 } <script src="/js/editor.formattedTextEditor.js?v=9.3.8" defer></script>
CSS/JSΛఆٛ͢Δࡍʹར༻ՄೳͳΦϓγϣϯʢ̏ʣ ྫɿϝσΟΞλΠϓΛࢦఆ͢ΔʢCSSͷΈࢦఆՄೳʣ ྫɿΞηοτΛू͢Δඞཁ͕͋Δ͔Ͳ͏͔ʢσϑΥϧτtrueʣ css/print.css: { media: print } css/components/messages.css: {
preprocess: false }
CSSͱJSϑΝΠϧͷू [ڥઃఆ]ʼ[ύϑΥʔϚϯε]ʼ[ଳҬ෯࠷దԽ] ͷνΣοΫϘοΫεʹνΣο ΫΛೖΕɺߏΛอଘ ҙ CSSͱJSϑΝΠϧΛूͷରͱ͢ΔͨΊʹɺϑΝΠϧΛςʔϚ·ͨϞ δϡʔϧͷ *.libraries.yml Ͱఆٛ͠ɺಡΈࠐ·ͤΔඞཁ͕͋Γ·͢ɻςϯϓ
ϨʔτʹϑΝΠϧͷϦϯΫΛهड़͢ΔͷόουϓϥΫςΟεͰ͢ɻ ࢀߟ) CSSͱJSͷूʹ͍ͭͯ DrupalͰଟͷCSSϑΝΠϧͱJSϑΝΠϧΛऔΓѻ͍·͢ɻ ͜ΕΒू͢Δ͜ͱͰ1ͭͷʢ·ͨগͷʣϑΝΠϧͱͳΓɺϦΫΤετճΛݮͰ͖·͢ɻ ूલ 100ϑΝΠϧ ूޙ 3ϑΝΠϧ
ґଘؔͷએݴ ϥΠϒϥϦʹґଘؔΛએݴͰ͖·͢ɻdependenciesΩʔͰґଘ͢Δϥ ΠϒϥϦͷΩʔͷϦετΛࢦఆ͠·͢ɻ maintenance_page: version: VERSION css: theme: css/maintenance-page.css: {}
dependencies: - system/maintenance - bartik/global-styling
DrupalίΞͰ༻ҙ͞Ε͍ͯΔΞηοτ jQuerynormalize.cssͳͲɺίΞଆͰ༻ҙ͞Ε͍ͯΔΞηοτ͕͋Γ ·͢ɻcore/assets/vendor σΟϨΫτϦʹશͯͷҰཡ͕͋Γ·͢ɻඞཁ ʹԠͯ͡ґଘؔΛએݴ͠·͢ɻ tour: version: VERSION js: js/tour.js:
{} dependencies: - core/jquery
JavaScript͕ಡΈࠐ·ΕΔॴ σϑΥϧτͰɺͯ͢ͷJSΞηοτϑολͰಡΈࠐ·Ε·͢ɻheaderϓϩύςΟΛ༻͍ͯϔομͰಡΈࠐ ·ͤΔ͜ͱ͕Ͱ͖·͢ɻʢ͜ͷํ๏Ͱએݴ͞ΕͨϥΠϒϥϦͷ·ͨؒతͳґଘؔɺࣗಈతʹϔο μ͔Βϩʔυ͞Ε·͢ɻʣ js-header: header: true js: header.js: {}
js-footer: js: footer.js: {} <html> <head> <js-placeholder token="{{ placeholder_token }}"> </head> <body> {{ page_top }} {{ page }} {{ page_bottom }} <js-bottom-placeholder token="{{ placeholder_token }}"> </body> </html> html.html.twig marucha.libraries.yml
֎෦ΞηοτͷಡΈࠐΈ type: external Ͱ֎෦ϥΠϒϥϦͰ͋Δ͜ͱΛએݴͰ͖·͢ɻఆٛʹ֎෦ϥΠ ϒϥϦʹؔ͢ΔใΛؚΊΔ͜ͱ͓קΊ͠·͢ɻ angular.angularjs: remote: https://github.com/angular version: 1.4.4
license: name: MIT url: https://github.com/angular/angular.js/blob/master/LICENSE gpl-compatible: true js: https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js: { type: external, minified: true }
ΞηοτϥΠϒϥϦΛಡΈࠐΉ
ϥΠϒϥϦͷಡΈࠐΈํ৭ʑ *.libraries.ymlͰΞηοτϥΠϒϥϦΛఆ͚ٛͨͩ͠ͰɺͦΕΒͷϥΠ ϒϥϦDrupalαΠτͰಡΈࠐ·Ε·ͤΜɻDrupalͰ࣍ͷ3ͭͷํ๏ ͰϥΠϒϥϦΛಡΈࠐΉ͜ͱ͕Ͱ͖·͢ɻ – શͯͷϖʔδͰಡΈࠐΉ - *.info.ymlʹهड़ – ಛఆͷTwigςϯϓϨʔτͰಡΈࠐΉ
- *.html.twigʹهड़ – ಛఆͷϒϩοΫɺϊʔυͰಡΈࠐΉ - *.themeʹهड़
શͯͷϖʔδͰಡΈࠐΉ - *.info.ymlʹهड़ name: Marucha type: theme description: '·ΔͷͨΊͷΧελϜςʔϚ' core_version_requirement:
^8 || ^9 base theme: false libraries: - marucha/global-styling - marucha/global-scripts *.info.ymlͷlibrariesΩʔͰΞηοτϥΠϒϥϦΛࢦఆ͢ΔͱɺαΠτશମͰಡΈ ࠐ·Ε·͢ɻ
ಛఆͷTwigςϯϓϨʔτͰಡΈࠐΉ - *.html.twigʹهड़ ςϯϓϨʔτϑΝΠϧͷதͰattach_libraryؔΛ༻͢Δ͜ͱͰɺ ςϯϓϨʔτ͕ಡΈࠐ·ΕͨϖʔδͷΈϥΠϒϥϦΛಡΈࠐΉ͜ ͱ͕Ͱ͖·͢ɻ {{ attach_library('marucha/global-styling') }}
ಛఆͷϒϩοΫɺϊʔυͰಡΈࠐΉ - *.themeʹهड़ ϖʔδͷಛఆͷϒϩοΫ͕දࣔ͞Ε͍ͯΔ࣌ͳͲϖʔδͷαϒηοτ ͰϥΠϒϥϦΛಡΈࠐΈ͍ͨ߹ɺϩδοΫͰϥΠϒϥϦΛग़͚͠ ͍ͨ߹ɺ*.themeϑΝΠϧʹϑοΫؔΛ࣮͢Δ͜ͱͰߦ͑·͢ɻ function umami_preprocess_html(&$variables) { if
(!empty($variables['page']['sidebar'])) { $variables['#attached']['library'][] = 'umami/two-columns'; } } umami.theme
ϥΠϒϥϦͷΦʔόʔϥΠυͱ֦ு
ϥΠϒϥϦΛΦʔόʔϥΠυ͢Δ *.info.ymlͰ libraries-override ΩʔΛ ༻ͯ͠ɺίΞϞδϡʔϧͰఏڙ ͞ΕΔϥΠϒϥϦΛΦʔόʔϥΠυ Ͱ͖·͢ɻ libraries-override: # ϥΠϒϥϦશମΛஔ͖͑Δ
core/drupal.collapse: marucha/collapse # ϑΝΠϧΛผͷϑΝΠϧʹஔ͖͑Δ subtheme/library: css: theme: css/layout.css: css/marucha-layout.css # ϑΝΠϧΛআ͢Δ drupal/dialog: css: theme: dialog.theme.css: false # ϥΠϒϥϦશମΛআ͢Δ core/modernizr: false marucha.info.yml
ϥΠϒϥϦΛ֦ு͢Δ *.info.ymlͰ libraries-extend ΩʔΛ༻ͯ͠ɺίΞϞδϡʔϧͰ ఏڙ͞ΕΔϥΠϒϥϦʹಠࣗͷมߋΛՃ֦͑ͯுͰ͖·͢ɻ libraries-extend: core/drupal.dialog: - bartik/classy.dialog core/drupal.dropbutton:
- bartik/classy.dropbutton core/drupal.progress: - bartik/classy.progress marucha.info.yml
PHPͷΛJavaScriptͰ༻͢Δ
drupalSettingsͱ PHPͰॲཧ͞ΕͨಈతͳΛJavaScriptͰ༻͍ͨ͠߹ɺdrupalSettingsΛ༻ ͯ͠ߦ͏͜ͱ͕Ͱ͖·͢ɻdrupalSettingsίΞͷΞηοτϥΠϒϥϦͷதͰఆ ٛ͞Ε͍ͯ·͢ɻ
drupalSettingsΛ༻͢ΔྲྀΕ ᶃ PHPͷΛ༻͍ͨ͠JavaScriptϑΝΠϧΛΞηοτϥΠϒϥϦʹఆٛ ͢Δ cool-slider: version: 1.x js: js/cool-slider.js: {}
dependencies: - core/jquery - core/drupalSettings JavaSriptϑΝΠϧͰ drupalSettingsΛར༻͢Δ ͨΊʹґଘؔͷએݴ͕ ඞཁɻ marucha.libraries.yml
drupalSettingsΛ༻͢ΔྲྀΕ ᶄ ϑοΫؔͰϥΠϒϥϦΛಡΈࠐΉɻdrupalSettingsΦϒδΣΫτʹ JavaScriptͰ༻͍ͨ͠Λೖ͢Δɻ function marucha_page_attachments_alter(&$page) { $page['#attached']['library'][] = 'marucha/cool-slider';
$page['#attached']['drupalSettings']['marucha']['coolSlider']['foo'] = 'bar'; } marucha.theme
drupalSettingsΛ༻͢ΔྲྀΕ ᶅ JavaScriptϑΝΠϧͰʹΞΫηε͢Δɻ (function ($, Drupal, drupalSettings) { 'use strict';
Drupal.behaviors.mybehavior = { attach: function (context, settings) { console.log(settings.marucha.coolSlider.foo); } }; })(jQuery, Drupal, drupalSettings); cool-slider.js
࿅श
ΧελϜςʔϚͰjQueryΛಡΈࠐΈ͍ͨ߹ɺͲͷΑ͏ʹߦ͏ͷ͕ྑ͍Ͱ͠ΐ ͏͔ʁ 1. html.html.twig ϑΝΠϧͷதͰɺ<script>λάΛ༻͍ͯಡΈࠐ·ͤΔɻ 2. *.libraries.yml ϑΝΠϧͷதͰɺϥΠϒϥϦͷґଘؔͱͯ͠ಡΈࠐ·ͤΔɻ 3. DrupalίΞ͔ΒCDN͕ఏڙ͞Ε͍ͯΔͷͰɺଞͷ֎෦Ξηοτͱಉ༷ʹಡΈ
ࠐ·ͤΔɻ 4. DrupalͰσϑΥϧτͰjQuery͕ΧελϜςʔϚͰར༻Ͱ͖ΔΑ͏ʹͳͬͯ ͍ΔͨΊɺԿ͠ͳͯ͘ྑ͍ɻ ࿅श1
ΧελϜςʔϚͰjQueryΛಡΈࠐΈ͍ͨ߹ɺͲͷΑ͏ʹߦ͏ͷ͕ྑ͍Ͱ͠ΐ ͏͔ʁ 1. html.html.twig ϑΝΠϧͷதͰɺ<script>λάΛ༻͍ͯಡΈࠐ·ͤΔɻ 2. *.libraries.yml ϑΝΠϧͷதͰɺϥΠϒϥϦͷґଘؔͱͯ͠ಡΈࠐ·ͤΔɻ 3. DrupalίΞ͔ΒCDN͕ఏڙ͞Ε͍ͯΔͷͰɺଞͷ֎෦Ξηοτͱಉ༷ʹಡΈ
ࠐ·ͤΔɻ 4. DrupalͰσϑΥϧτͰjQuery͕ΧελϜςʔϚͰར༻Ͱ͖ΔΑ͏ʹͳͬͯ ͍ΔͨΊɺԿ͠ͳͯ͘ྑ͍ɻ ࿅श1 ਖ਼ղɿ2
͋ΔJavaScriptϑΝΠϧΛBodyͷ࠷Լ෦ͰಡΈࠐΈ͍ͨͰ͢ɻͲ͏͢Εྑ͍Ͱ͢ ͔ʁ 1. *.libraries.ymlͰରͷJavaScriptϑΝΠϧʹ { head: false } Λࢦఆ͢Δɻ 2.
*.libraries.ymlͰରͷΞηοτϥΠϒϥϦͷheaderϓϩύςΟʹ true Λࢦఆ ͢Δɻ 3. html.html.twigͰattach_libraryؔΛ༻ͯ͠ಡΈࠐΉɻ 4. DrupalσϑΥϧτͰBodyͷด͡λάޙͰಡΈࠐΉΑ͏ʹͳ͍ͬͯΔͷ Ͱɺಛʹઃఆඞཁͳ͍ɻ ࿅श2
͋ΔJavaScriptϑΝΠϧΛBodyͷ࠷Լ෦ͰಡΈࠐΈ͍ͨͰ͢ɻͲ͏͢Εྑ͍Ͱ͢ ͔ʁ 1. *.libraries.ymlͰରͷJavaScriptϑΝΠϧʹ { head: false } Λࢦఆ͢Δɻ 2.
*.libraries.ymlͰରͷΞηοτϥΠϒϥϦͷheaderϓϩύςΟʹ true Λࢦఆ ͢Δɻ 3. html.html.twigͰattach_libraryؔΛ༻ͯ͠ಡΈࠐΉɻ 4. DrupalσϑΥϧτͰBodyͷด͡λάޙͰಡΈࠐΉΑ͏ʹͳ͍ͬͯΔͷ Ͱɺಛʹઃఆඞཁͳ͍ɻ ࿅श2 ਖ਼ղɿ4
ຊͷΞδΣϯμऴྃ
1. ΞηοτϥΠϒϥϦͱ 2. ΞηοτϥΠϒϥϦΛఆٛ͢Δ 3. ͞·͟·ͳఆٛํ๏ 4. ΞηοτϥΠϒϥϦΛಡΈࠐΉ 5. ϥΠϒϥϦͷΦʔόʔϥΠυͱ֦ு
6. PHPͷΛJavaScriptͰ༻͢Δ 7. ࿅श ΞδΣϯμ
None