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
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
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
130
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
680
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.4k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
290
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.9k
Webの地図
yosuke_furukawa
PRO
6
5.1k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
470
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
4k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
160
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
420
Exploring anti-patterns in Rails
aemeredith
4
520
sira's awesome portfolio website redesign presentation
elsirapls
0
440
From π to Pie charts
rasagy
1
390
Optimising Largest Contentful Paint
csswizardry
37
4k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
GraphQLとの向き合い方2022年版
quramy
50
15k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Automating Front-end Workflow
addyosmani
1369
210k
A designer walks into a library…
pauljervisheath
211
25k
A Modern Web Designer's Workflow
chriscoyier
699
190k
WCS-LA-2024
lcolladotor
0
840
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