è¯ãäžæ¥ãåéïŒTyler McGinnisã«ãã
èšäºãWebpackïŒç©ãããªç޹ä»ãã®ç¿»èš³ã玹ä»ããŸãã
æ°ãããã¯ãããžãŒãæ€èšããåã«ã次ã®2ã€ã®è³ªåãèªåããŠãã ããã
- ãªããã®ããŒã«ãå¿ èŠãªã®ã§ããïŒ
- ã©ã®ãããªã¿ã¹ã¯ãå®è¡ããŸããïŒ
ãããã®è³ªåã«çããããªãå Žåã¯ãå匷ããŠãããã¯ãããžãŒã¯å¿ èŠãªããããããŸãããWebpackã«é¢é£ããŠãããã®è³ªåã«çããŠã¿ãŸãããã
ãªããŠã§ãããã¯ãå¿ èŠãªã®ã§ããïŒ
Webpackã¯ã¢ãžã¥ãŒã«ãã«ããŒã§ããã¢ããªã±ãŒã·ã§ã³ã¢ãžã¥ãŒã«ãè§£æããäŸåé¢ä¿ã°ã©ããäœæããŠãããã¢ãžã¥ãŒã«ãæ£ããé åºã§1ã€ä»¥äžã®ãã³ãã«ã«ã¢ã»ã³ãã«ããŸãããããã®ãã³ãã«ã¯ããindex.htmlããã¡ã€ã«ã§åç §ã§ããŸãã
App.js -> |
Dashboard.js -> | Bundler | -> bundle.js
About.js -> |
webpackã¯ã©ã®ãããªåé¡ã解決ããŸããïŒ
éåžžãJavaScriptã¢ããªã±ãŒã·ã§ã³ãäœæãããšããã³ãŒãã¯ããã€ãã®éšåïŒã¢ãžã¥ãŒã«ïŒã«åå²ãããŸããæ¬¡ã«ããindex.htmlããã¡ã€ã«ã§ãåã¹ã¯ãªãããžã®ãªã³ã¯ãæå®ããå¿ èŠããããŸãã
<body>
...
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="libs/react.min.js"></script>
<script src='src/admin.js'></script>
<script src='src/dashboard.js'></script>
<script src='src/api.js'></script>
<script src='src/auth.js'></script>
<script src='src/rickastley.js'></script>
</body>
ããã¯é¢åãªã ãã§ãªãããšã©ãŒãçºçãããããªããŸããã¹ã¯ãªãããå¿ããã ãã§ãªããæ£ããé åºã§é 眮ããããšãéèŠã§ããReactèªäœãããŒãããåã«Reactã«äŸåããã¹ã¯ãªãããããŒããããšãã¢ããªã±ãŒã·ã§ã³ãç ŽæããŸããWebpackã¯ãããã®åé¡ã解決ããŸãããã¹ãŠã®ã¹ã¯ãªãããé çªã«å«ããããšãå¿é ããå¿ èŠã¯ãããŸããã
<body>
...
<script src='dist/bundle.js'></script>
</body>
ããã«åŠç¿ããããã«ãã¢ãžã¥ãŒã«ã®åéã¯Webpackã®åäœã®1ã€ã®åŽé¢ã«ãããŸãããå¿ èŠã«å¿ããŠããã³ãã«ã«è¿œå ããåã«ãWebpackã«ããã€ãã®ã¢ãžã¥ãŒã«å€æã匷å¶ããããšãã§ããŸããããšãã°ãSASS / LESSãéåžžã®CSSã«å€æããããå€ããã©ãŠã¶ã®å Žåã¯ææ°ã®JavaScriptãES5ã«å€æãããããŸãã
Webããã¯ã®ã€ã³ã¹ããŒã«
npmã䜿çšããŠãããžã§ã¯ããåæåããåŸãWebpackãæ©èœãããã«ã¯ã2ã€ã®ããã±ãŒãžïŒ
webpackããã³ïŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãwebpack-cliã
npm i webpack webpack-cli -D
webpack.config.js
ãããã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããåŸãWebããã¯ãæ§æããå¿ èŠããããŸãããããè¡ãããã«
webpack.config.jsããªããžã§ã¯ãããšã¯ã¹ããŒããããã¡ã€ã«ãäœæãããŸãããã®ãªããžã§ã¯ãã«ã¯ãWebpackèšå®ãå«ãŸããŠããŸãã
module.exports = {}
Webpackã®äž»ãªã¿ã¹ã¯ã¯ãã¢ãžã¥ãŒã«ãåæãããããããªãã·ã§ã³ã§å€æãããããã1ã€ä»¥äžã®ãã³ãã«ã«ã€ã³ããªãžã§ã³ãã«çµåããããšã§ãããã®ãããWebpackã¯æ¬¡ã®3ã€ã®ããšãç¥ãå¿ èŠããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãšã³ããªãã€ã³ã
- å®è¡ãã倿
- çæããããã³ãã«ãé 眮ããå Žæ
ãšã³ããªãŒãã€ã³ã
ã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããã¢ãžã¥ãŒã«ã®æ°ã«é¢ä¿ãªããåžžã«åäžã®ãšã³ããªãã€ã³ãããããŸãããã®ã¢ãžã¥ãŒã«ã«ã¯æ®ããå«ãŸããŠããŸããéåžžããã®ãã¡ã€ã«ã¯index.jsã§ããæ¬¡ã®ããã«ãªããŸãã
index.js
imports about.js
imports dashboard.js
imports graph.js
imports auth.js
imports api.js
ãã®ãã¡ã€ã«ãžã®ãã¹ãWebpackã«æç€ºãããšãWebpackã¯ããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã°ã©ããäœæããŸãããããè¡ã
entryã«ã¯ãã¡ã€ã³ãã¡ã€ã«ãžã®ãã¹ã®å€ã䜿çšããŠWebpackèšå®ã«ããããã£ã远å ããå¿
èŠããããŸãã
module.exports = {
entry: './app/index.js'
}
ããŒããŒã«ãã倿
ãšã³ããªãã€ã³ãã远å ããåŸããã³ãã«ãçæããåã«å®è¡ããå¿ èŠã®ãã倿ã«ã€ããŠWebããã¯ã«éç¥ããå¿ èŠããããŸãããã®ããã«ãããŒããŒã䜿çšãããŸãã
ããã©ã«ãã§ã¯ããªãã¬ãŒã¿ãŒããŒã¹ã®äŸåé¢ä¿ã°ã©ããçæããå Žåã
import / require()Webpackã¯JavaScriptãã¡ã€ã«ãšJSONãã¡ã€ã«ã®ã¿ãåŠçã§ããŸãã
import auth from './api/auth' //
import config from './utils/config.json' //
import './styles.css' // ïž
import logo from './assets/logo.svg' // ïž
ã¢ããªã±ãŒã·ã§ã³ã§JSãã¡ã€ã«ãšJSONãã¡ã€ã«ã«å¶éããããšã¯ã»ãšãã©ãããŸãããã»ãšãã©ã®å Žåãã¹ã¿ã€ã«ãSVGãç»åãªã©ãå¿ èŠã«ãªããŸããããã§ããŒããŒãç»å ŽããŸããããŒããŒã®äž»ãªã¿ã¹ã¯ã¯ããã®ååã瀺ãããã«ãWebããã¯ãJSãã¡ã€ã«ãJSONãã¡ã€ã«ä»¥å€ã®ãã®ã§ãæ©èœããããã«ããããšã§ãã
æåã®ã¹ãããã¯ãããŒããŒãã€ã³ã¹ããŒã«ããããšã§ããSVGãããŒããããã®ã§ãnpmã䜿çšããŠsvg-loaderãã€ã³ã¹ããŒã«ããŸãã
npm i svg-inline-loader -D
次ã«ããããWebpackèšå®ã«è¿œå ããŸãããã¹ãŠã®ããŒããŒã¯ãªããžã§ã¯ãã®é åã«å«ãŸããŠããŸã
module.rulesïŒ
module.exports = {
entry: './app/index.js',
module: {
rules: []
}
}
ããŒããŒæ å ±ã¯2ã€ã®éšåã§æ§æãããŠããŸãã1ã€ç®ã¯ãåŠçãããŠãããã¡ã€ã«ã®ã¿ã€ãã§ãïŒ
.svgãã®å ŽåïŒã2ã€ç®ã¯ããã®ã¿ã€ãã®ãã¡ã€ã«ïŒãã®svg-inline-loaderå ŽåïŒãåŠçããããã«äœ¿çšãããããŒããŒã§ãã
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' }
]
}
}
ããã§ãSVGãã¡ã€ã«ãã€ã³ããŒãã§ããŸããããããCSSãã¡ã€ã«ã¯ã©ãã§ããïŒäœ¿çšãããã¹ã¿ã€ã«ã®å Žå
css-loaderã
npm i css-loader -D
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: 'css-loader' }
]
}
}
ããã§ãSVGãã¡ã€ã«ãšCSSãã¡ã€ã«ã®äž¡æ¹ãã€ã³ããŒãã§ããŸãããã ããã¹ã¿ã€ã«ãæ£ããæ©èœããããã«ã¯ãå¥ã®ããŒããŒã远å ããå¿ èŠããããŸããã®ãããã§ã
css-loaderCSSãã¡ã€ã«ãã€ã³ããŒãã§ããŸããããããããã¯ããããDOMã«å«ãŸãããšããæå³ã§ã¯ãããŸããããã®ãããªãã¡ã€ã«ãã€ã³ããŒãããã ãã§ãªã<style>ãDOMèŠçŽ ã«é©çšãããããã«ã¿ã°ã«é
眮ããå¿
èŠããããŸãããã®ããã«å¿
èŠstyle-loaderã§ãã
npm i style-loader -D
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }
]
}
}
CSSãã¡ã€ã«ã®åŠçã«ã¯2ã€ã®ããŒããŒã䜿çšããããããããããã£å€
useã¯é
åã§ããããšã«æ³šæããŠãã ããããŸããããŒããŒã®é åºã«ã泚æããŠãã ãããæåã«style-loaderãæ¬¡ã«css-loaderã倧äºã§ããWebpackã¯ããããéã®é åºã§é©çšããŸããæåcss-loaderã«ã€ã³ããŒã'./styles.css'ã«äœ¿çšãããæ¬¡ã«style-loaderDOMã«ã¹ã¿ã€ã«ãæ¿å
¥ããããã«äœ¿çšãããŸãã
ããŒããŒã¯ããã¡ã€ã«ã®ã€ã³ããŒãã ãã§ãªãããã¡ã€ã«ã®å€æã«ã䜿çšã§ããŸããæã人æ°ãããã®ã¯ãBabelã䜿çšããŠæ¬¡äžä»£ã®JavaScriptãææ°ã®JavaScriptã«å€æããããšã§ããããã«äœ¿çšãããŸã
babel-loaderã
npm i babel-loader -D
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] },
{ test: /\.(js)$/, use: 'babel-loader' }
]
}
}
ã»ãšãã©ãã¹ãŠã®ã¿ã€ãã®ãã¡ã€ã«çšã®ããŒããŒããããŸãã
åºå£ç¹
ããã§ãWebpackã¯ãšã³ããªãã€ã³ããšããŒããŒã«ã€ããŠèªèããŸããæ¬¡ã®ã¹ãããã¯ããã³ãã«ã®ãã£ã¬ã¯ããªãæå®ããããšã§ãããããè¡ã
outputã«ã¯ãWebpackèšå®ã«ããããã£ã远å ããŸãã
const path = require('path')
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] },
{ test: /\.(js)$/, use: 'babel-loader' }
]
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index_bundle.js'
}
}
ããã»ã¹å šäœã¯æ¬¡ã®ããã«ãªããŸãã
- Webpackã¯ã次ã®å Žæã«ãããšã³ããªãã€ã³ããåãåããŸãã
./app/index.js - ã¹ããŒãã¡ã³ã
import / requireãè§£æããäŸåé¢ä¿ã°ã©ããäœæããŸã - Webpackã¯ãé©åãªããŒããŒã䜿çšããŠã³ãŒãã倿ããããšã«ããããã³ãã«ã®æ§ç¯ãéå§ããŸã
- 圌ã¯ãã³ãã«ãéããŠå
¥ããŸã
dist/index_bundle.js
ãã©ã°ã€ã³
ãã³ãã«ã®çæåãŸãã¯çæäžã«ãããŒããŒã䜿çšããŠåã ã®ãã¡ã€ã«ãåŠçããæ¹æ³ãèŠãŠããŸãããããŒããŒãšã¯ç°ãªãããã©ã°ã€ã³ã䜿çšãããšããã³ãã«ãäœæããåŸã«ã¿ã¹ã¯ãå®è¡ã§ããŸãããããã®ã¿ã¹ã¯ã¯ããã³ãã«èªäœãšä»ã®ã³ãŒãã®äž¡æ¹ã«é¢ä¿ããå¯èœæ§ããããŸãããã©ã°ã€ã³ã¯ããã匷åã§å¶éã®å°ãªãããŒããŒãšèããããšãã§ããŸãã
äŸãèŠãŠã¿ãŸãããã
HtmlWebpackPlugin
Webpackã®äž»ãªã¿ã¹ã¯ã¯ãã§åç §ã§ãããã³ãã«ãçæããããš
index.htmlã§ãããã³ãã«ã®ãããã£ã¬ã¯ããªã«
HtmlWebpackPluginäœæindex.htmlãããã³ãã«å
ã®ãã³ãã«ãžã®ãªã³ã¯ãèªåçã«è¿œå ããŸãã
ãã³ãã«ã«ååãä»ããŠ
index_bundle.jsãã«å
¥ããŸããdistããã£ã¬ã¯ããªã«HtmlWebpackPluginæ°ãããã¡ã€ã«ãäœæãããã³ãã«ãžã®ãªã³ã¯ã远å ããŸã- ããããã§ãããçæããããããåºå£ç¹ããã³ãã«åã倿ŽããŠãããã®æ
å ±ãåãåããå
容ã倿ŽããŸãã
ãã®ãã©ã°ã€ã³ãã©ã®ããã«äœ¿çšããŸããïŒãã€ãã®ããã«ãæåã«ã€ã³ã¹ããŒã«ããå¿
èŠããããŸããindex.htmldist<script src='index_bundle.js'></script>index.htmlHtmlWebpackPluginHtmlWebpackPluginindex.html
npm i html-webpack-plugin -D
次ã«ãããããã£ãWebpackèšå®ã«è¿œå ããŸã
pluginsã
const path = require('path')
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] },
{ test: /\.(js)$/, use: 'babel-loader' }
]
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index_bundle.js'
},
plugins: []
}
HtmlWebpackPluginé
åã«
ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãpluginsã
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] },
{ test: /\.(js)$/, use: 'babel-loader' }
]
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin()
]
}
EnvironmentPlugin
Reactã䜿çšããŠããå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ããããã€ããå
process.env.NODE_ENVã«ããããå€productionã«èšå®ããããšããå§ãããŸããããã«ãããèŠåãªã©ã®éçºããŒã«ãåé€ããããšã§ãReactãæ¬çªç°å¢ã«çµã¿èŸŒãããšãã§ããŸããwebpackã䜿çšãããšããã©ã°ã€ã³ãä»ããŠãããè¡ãããšãã§ããŸãEnvironmentPluginãããã¯Webpackã®äžéšã§ãããããã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããã
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] },
{ test: /\.(js)$/, use: 'babel-loader' }
]
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin(),
new webpack.EnvironmentPlugin({
'NODE_ENV': 'production'
})
]
}
ããã§ãã¢ããªã±ãŒã·ã§ã³ã®ã©ãã§ããã䜿çšããŠãããã¯ã·ã§ã³ã¢ãŒããèšå®ã§ããŸã
process.env.NODE_ENVã
HtmlWebpackPluginãããŠãEnvironmentPluginWebPACKã®ãã©ã°ã€ã³ã·ã¹ãã ã®ã»ãã®äžéšã§ãã
ã¢ãŒã
å¶äœçšã®ã¢ããªã±ãŒã·ã§ã³ãæºåããããã»ã¹ã§ã¯ãããã€ãã®æé ãå®è¡ããå¿ èŠããããŸãããã®ãã¡ã®1ã€ã§ãã
process.env.NODE_ENVvalueãžã®èšå®ã«ã€ããŠèª¬æããŸããproductionããã1ã€ã®ã¢ã¯ã·ã§ã³ã¯ãã³ãŒããçž®å°ããã³ã¡ã³ããåé€ããŠãã³ãã«ã®ãµã€ãºãçž®å°ããããšã§ãã
ãããã®ã¿ã¹ã¯ã解決ããããã®ç¹å¥ãªãã©ã°ã€ã³ããããŸãããããç°¡åãªæ¹æ³ããããŸããWebPACKã®èšå®ã§ã¯ãèšå®ããããšãã§ããŸã
modeãdevelopmentããproductionãéçºç°å¢ã«ãã£ãŠç°ãªããŸãã
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: './app/index.js',
module: {
rules: [
{ test: /\.svg$/, use: 'svg-inline-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] },
{ test: /\.(js)$/, use: 'babel-loader' }
]
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin()
],
mode: 'production'
}
ãåé€ããŸããã®ã§ã泚æãã ãã
EnvironmentPluginãå®éã«ã¯modeãå€ãèšå®ããåŸãproductionWebpackã¯èªåçã«process.env.NODE_ENVå€ãå²ãåœãŠãŸãproductionãããã«ãããã³ãŒããæå°åãããèŠåãåé€ãããŸãã
Webããã¯ã®èµ·å
Webpackã®åäœãšæ§ææ¹æ³ã¯çŸæç¹ã§ã¯ããã£ãŠããŸãããå®è¡ããå¿ èŠããããŸããå®è¡ããããã«äœæã§ãã
ãã¡ã€ã«ããããŸãã
package.jsonscriptwebpack
"scripts": {
"build": "webpack"
}
ãã
npm run buildã§ãã¿ãŒããã«ã§ã³ãã³ããå®è¡ãããšãWebpackãèµ·åããæé©åããããã³ãã«ãäœæããindex_bundle.jsãã«é
眮ããdistãŸãã
éçºããã³çç£ã¢ãŒã
å šäœãšããŠãWebpackã¯å®äºã§ããæåŸã«ãã¢ãŒããåãæ¿ããæ¹æ³ãèŠãŠã¿ãŸãããã
çç£ã®ããã«æ§ç¯ãããšããç§ãã¡ã¯å¯èœãªéããã¹ãŠãæé©åããããšèããŠããŸããéçºã¢ãŒãã®å Žåããã®éãåœãŠã¯ãŸããŸãã
ã¢ãŒããåãæ¿ããã«ã¯ãã§2ã€ã®ã¹ã¯ãªãããäœæããå¿ èŠããããŸã
package.jsonã
npm run buildãããã¯ã·ã§ã³ãã³ãã«ãæ§ç¯ããŸãã
npm run startéçºãµãŒããŒãèµ·åãããã¡ã€ã«ã®å€æŽãç£èŠããŸãã
èŠããŠããããšæããŸãããããã¯Webpackèšå®ã®
modeå€productionã«èšå®ãããŠããŸããããããä»ã¯å¿
èŠãããŸãããå®è¡ããã³ãã³ãã«å¿ããŠãç°å¢å€æ°ã«é©åãªå€ãèšå®ããå¿
èŠããããŸããã®ã¹ã¯ãªããbuildã倿ŽããŠã¿ãŸãããpackage.jsonã
"scripts": {
"build": "NODE_ENV='production' webpack",
}
Windowsã䜿çšããŠããå Žåãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸã
"SET NODE_ENV='production' && webpack"ã
ããã§ãWebpackèšå®ã§ãã«
modeå¿ããŠå€ã倿Žã§ããŸãprocess.env.NODE_ENVã
...
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development'
}
ã¢ããªã±ãŒã·ã§ã³çšã®æ¢è£œã®ãã³ãã«ãäœæããã«
npm run buildã¯ãã¿ãŒããã«ã§å®è¡ããã ãã§ãããã£ã¬ã¯ããªdistãã¡ã€ã«ãäœæããindex.htmlãindex_bunlde.jsã
éçºãµãŒããŒ
ã¢ããªã±ãŒã·ã§ã³ã®éçºã«é¢ããŠã¯ãã¹ããŒããéèŠã§ããWebããã¯ãåèµ·åããŠã倿Žã®ãã³ã«æ°ãããã«ããåŸ ã€å¿ èŠã¯ãããŸãããããã§ããã±ãŒãžã圹ã«ç«ã¡
webpack-dev-serverãŸãã
ååã瀺ãããã«ãããã¯éçºçšã®WebpackãµãŒããŒã§ãããã£ã¬ã¯ããªãäœæãã代ããã«ã
distããŒã¿ãã¡ã¢ãªã«ä¿åããããŒã«ã«ãµãŒããŒã§åŠçããŸããããã«ãã©ã€ããªããŒãããµããŒãããŸããããã¯ã倿Žãå ãããšwebpack-dev-serverãã¡ã€ã«ãåæ§ç¯ããããã©ãŠã¶ãåèµ·åããããšãæå³ããŸãã
ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
npm i webpack-dev-server -D
ããšã¯ãã¹ã¯ãªãã
startãã«è¿œå ããã ãã§ãpackage.jsonã
"scripts": {
"build": "NODE_ENV='production' webpack",
"start": "webpack-dev-server"
}
ããã§ãéçºãµãŒããŒãèµ·åããã³ãã³ããšã宿ãããã³ãã«ããã«ãããã³ãã³ãã®2ã€ã®ã³ãã³ãããããŸãã
ãã®èšäºãã圹ã«ç«ãŠã°å¹žãã§ããæž èŽããããšãããããŸããã