10幎以äžãç§ã¯PHPéçºè
ã§ããããæè¿ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®æ©èœã䜿çšããŠJavaScriptã«åãæ¿ããŸããã ãã®åãç§ã¯ãã§ã«JSã«ç²ŸéããŠããŸããã æåã«jQueryã䜿çšãã次ã«Angularãç¿åŸããæçµçã«Reactã®äœ¿çšãéå§ããŸããã
PHPã§æžãå§ãããšãããããHTMLãã¡ã€ã«ã«åã蟌ã¿ãŸããã ããã¯ã³ãŒãã§ã¯ãªããå®å
šãªæ··ä¹±ããããããŸããã ãããã£ãŠãéçºããŸãšããªå€èŠ³ã«ããããã«ããã¬ãŒã ã¯ãŒã¯ãç¹ã«ZF1ãšZF2ã®äœ¿çšãéå§ããŸããã ãã°ããããŠãAPIã䜿çšããŠéçºãéå§ããã¢ãããŒãã«ãããçæãããREST APIãšæ°çŸè¡ã®ç¬èªã®ã³ãŒãã§æ§æããããµãŒããŒãã§ããŸããã
ãããžã§ã¯ãã®æãéèŠãªéšåã§ã¯ãªããããäžéšããPHPã§èšè¿°ãããŠããªãããããããåãé€ãããšãã§ãããã©ãããšããçåãçããŸããã ãããŠãã§ããã°ããããç§ãã¡ã«äœãç ç²ã«ããããããäœãåŸãã®ãã ãã®èšäºã§ã¯ãç§ã®çµéšããç§ã®ããã«ã圌ãäœãããŠäœãããŠããã®ããç解ããPHPã®äžçãå»ãããããã圢ã§JavaScriptã®æã®äžã«ç«ã€äººã
ãšå
±æããŸãã
ä»æ¥ã¯ãäž»ã«Node.jsã®åœ¢åŒã§ãPHPã®ãµãŒããŒåŽããJSã®ãµãŒããŒåŽãžã®æ
ã«ã€ããŠèª¬æããŸãã ããã§ã¯ãWebpackãReactãããã³ãã®ä»ã®JSã¯ã©ã€ã¢ã³ããã¯ãããžãŒã«ã€ããŠã¯èª¬æããŸããã
æè¡ã¹ã¿ãã¯ã®é²å
PHPããNode.jsã«åãæ¿ãããšãã«äœ¿çšãããã¯ãããžãŒã¹ã¿ãã¯ã®é²åã説æããäžè¬çãªã¹ããŒã ããå§ããŸãããã
æè¡ã¹ã¿ãã¯ã®äž»èŠãªå€æŽNode.jsã¯ãæ°ãããã¯ãããžãŒã¹ã€ãŒãã®ã³ã¢ã³ã³ããŒãã³ãã§ãã é«æ§èœãåããŠããŸãã
Node.jsã¯éåžžã«ããŸãæ©èœããŠããããã以åã¯äœã¬ãã«èšèªã§èšè¿°ãããå€ãã®ããŒã«ã§ãJavaScriptã«çžåœãããã®ãå©çšå¯èœã«ãªããŸããã 䜿çšãããã©ãããã©ãŒã ã«éåžžã®ããã°ã©ã ãã€ã³ã¹ããŒã«ããã®ã¯éåžžã«æéãããããããAnsibleã䜿çšããŠäœæ¥ç°å¢ãå±éããå¿
èŠããããŸããã æ°ããããŒã«ã¯Node.jsã®ã¿ã«äŸåããããã«ãªã£ããããç¬èªã«ã€ã³ã¹ããŒã«ããå¿
èŠãããã®ã¯ãNode.jsãã€ã³ã¹ããŒã«ããããã®ããŒã«ã§ãã
NVM ïŒNode Version ManagerïŒã§ãã
NVMã䜿çšããŠNode.jsãé©åã«ã€ã³ã¹ããŒã«ããæ¹æ³
Node.jsãæåã§ã€ã³ã¹ããŒã«ããå ŽåããŸãã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã±ãŒãžãããŒãžã£ãŒã䜿çšããå ŽåãNodeã®ããŒãžã§ã³ãåãæ¿ããããšãããšãããã«å€ãã®åé¡ãçºçããŸããã ãã®çµæãNVMââã䜿çšããããã«ãªããŸããã
ãã®ããŒã«ã¯ãã€ã³ã¹ããŒã«ãšäœ¿çšãéåžžã«ç°¡åã§ãã
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash nvm install node nvm use v6.9.1
ã€ã³ã¹ããŒã«åŸã次ã®æ©èœãå©çšå¯èœã«ãªããŸããã
- 1ã€ã®ã³ãã³ãã䜿çšããŠãç°ãªãããŒãžã§ã³ã®Node.jsãåãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããŸãã
- Node.jsã®ã€ã³ã¹ããŒã«æžã¿ããŒãžã§ã³éã®äŸ¿å©ãªåãæ¿ãã
ããã«ãããã¯ç¹ã«çŽ æŽãããããšã§ãããNVMã¯LinuxãMacãããã³
Windowsã§å®è¡ãã
ãŸã ã
2017幎ã®JavaScript
JavaScriptãåŠã³å§ããŠãç§ã¯åçãªWebãµã€ããäœæããã«ãæ®å¿µãªãããã§ããªããäºæµã®èšèªãšããŠãããæããŸããã ãã®çµæãç§ã¯ãããé©åã«ç解ããããšããŸããã§ããã äž»ã«ããã°ã®æçš¿ã§JavaScriptãåŠã³ãŸããããStack Owerflowã®åçã§åŠã³ãŸããã ä»ãããã«ã€ããŠãã¿ãŸããã
ææãåŠã¶ïŒææ°ã®JavaScriptãã¬ãŒã ã¯ãŒã¯ãšããŒã«ã䜿ãå§ããæºåãã§ããŠããŸããã§ããã 2017幎ãJavaScriptã¯æ°ããæ©èœã®ãããã§å®å
šã«ç°ãªããŸããã ãã®äžã§ãã次ã®ããšã«æ³šæããŠãã ããã
- ã¯ã©ã¹ã
- çŽæïŒèšèªã«çµã¿èŸŒãŸããŸããïŒã
- åæ§ç¯ããã³æ¡åŒµæŒç®åã
- ã¢ãžã¥ãŒã«ãšã¢ãžã¥ãŒã«ããŒããŒã
- 匱ããªã³ã¯ãæã€æ§é ãšãã®ãªãã·ã§ã³ãããã/èšå®ããŸãã
- éåæ/åŸ
æ©ã
æåŸã«ãç§ã¯æéããããŠå€ãã®è³æãäœæããJavaScriptãé©åã«åŠç¿ããŸããã ããšãã°ã
Babeljs.ioã®Webãµã€ãã¯ãææ°ã®JavaScriptããã°ã©ãã³ã°ãšã¯äœãã®çŽ æŽãããæŠèŠãæããŠãããŸããã
ComposerããYarnãžã®ç§»è¡
Composerã¯çŽ æŽããããé
ãããŒã«ã§ãã NPMã«ãåãæ¬ ç¹ãããããã代ããã«
YarnãéžæããŸããã ããã¯ãNPMã®æéã®ä»£æ¿æ段ã§ãã
ååã®ãããžã§ã¯ãã§ã¯ãçŽ1,000ã®äŸåé¢ä¿ããããŸããã éçºããŒã ã¯10人ã§æ§æããã
node_modules
ãã©ã«ããŒã¯å°ãªããšã1æ¥ã«2åå€æŽãããŸãã 次ã®åŒã䜿çšããŠã2ãæã§ããã±ãŒãžãã€ã³ã¹ããŒã«ããã®ã«ãããæéãèŠç©ãããŸãããã
ïŒ10人ã®éçºè
+ 3ã€ã®ç°å¢ïŒ* 1æ¥2åã®ã€ã³ã¹ããŒã«* 60æ¥* 1ã€ã³ã¹ããŒã«ããã3å= 78æéã
ããã±ãŒãžã®ããŠã³ããŒããšRedditã®èªã¿åãã®é²è¡ç¶æ³ã®ç£èŠã«2é±éã®äœæ¥æéãè²»ããããããšãããããŸããã 3åã¯ã倧ããªæ倱ãæãå¯èœæ§ãããååãªæéã§ãããã€ã³ã¹ããŒã«ã®é²è¡äžã«ä»ã®ã¿ã¹ã¯ã«åãæ¿ããã«ã¯çãããŸãã
Yarnã®ãããã§ãã€ã³ã¹ããŒã«æéã3åãã1åã«ççž®ã§ããŸããã ããã«ãããäœæ¥æéã46æéççž®ãããŸããã ãããŠãããã¯çŽ æŽãããçµæã§ãã
JavaScriptã§APIãäœæãã
ãããããèªåã§ããã«ã€ããŠè©±ãã®ã§ã¯ãªããã³ãŒãã«ããã¢ãäžããŸãã 以äžã¯ã次ã®ããã±ãŒãžã«åºã¥ãAPIã®æå°éã®äŸã§ãã
- Expressã¯ãZend Frameword 2 / Symfonyãšåçã®è»œéJSã§ãã
- Sequelizeã¯Doctrineã®ä»£æ¿ã§ãã
- ãšãããŒã°ã¯ã¢ããžãªãã£ã®ä»£æ¿ã§ãã
const Sequelize = require('sequelize'), epilogue = require('epilogue'), express = require('express'), bodyParser = require('body-parser'); // Sequelize // - Doctrine let database = new Sequelize('database', 'root', 'password'); let User = database.define('User', { username: Sequelize.STRING }); // Express let app = express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); // Epilogue Express epilogue.initialize({ app: app, sequelize: database }); // , Epilogue, REST let userResource = epilogue.resource({ model: User, endpoints: ['/users', '/users/:id'] }); // , User GET/POST DELETE. app.listen(() => { console.log('Server started!'); });
æ°è¡ã®ã³ãŒã-ã«ã¹ã¿ãã€ãºããã³æ¡åŒµå¯èœãªREST APIããããŸãã
Apigilityã䜿çšããŠ50ãè¶
ããAPIãšã³ããã€ã³ããäœæããåŸã2ã€ã®ããšãç解ããŸããã 第äžã«-ããã¯å¯èœã§ããã第äºã«-å¹æçã«ã
ããšãã°ãEpilogueã¯åé¡ãªã10åã®ãšã³ããã€ã³ããçæããŸãã ãŠãŒã¶ãŒæš©å©ãªã©ã®è€éãªæ¡ä»¶ããµããŒãããããã«ãç¬èªã®ã³ãŒããæšæºãã¬ãŒã ã¯ãŒã¯ã«æ¥ç¶ããæ©èœããããŸãã èªåçæã§ããªããã®ã¯ãSequelizeã䜿çšããŠç°¡åãªExpress RPCãšã³ããã€ã³ããšããŠäœæãããŸãã
Zend Framework 2ãExpressãããã¯ããã«åªããæ©èœãæã£ãŠãããšã¯èšããŸããã ããããExpressã¯çµæžçã§ã·ã³ãã«ãªãœãªã¥ãŒã·ã§ã³ã§ããããšãå€æããŸãããããã¯ãã¹ãŠã®ããŒãºã«ååã§ããã ããã«åãæ¿ãããšããç§ãã¡ã¯äœããããããå¿
èŠã¯ãããŸããã§ããã
ãããŒïŒããŒã¿åã®æµ·ã§drãã人ã®ããã®æåœæµ®ã茪
PHPã§ã¯ãå¿
èŠãªå Žåã«ã®ã¿ããŒã¿åã®ãã³ããè¿œå ã§ããŸãã ããã¯ç§ã®ãæ°ã«å
¥ãã®PHPæ©èœã®1ã€ã§ãã 匷åã ãæè»ãªåã·ã¹ãã ããããŸãã
<?php class UserService { public function createUser(string $name, User $parent = null, $isAdmin) : User { $user = new User($name); ... return $user } }
é·å¹Žã«ããããJSã§ãã®ãããªããšã¯äžå¯èœã§ãããå¯äžã®è§£æ±ºçã¯TypeScriptã«åãæ¿ããããšã ãšèããŠããŸããã ããããç§ã¯ééã£ãŠããŸããã
Flow-typeãšãåŒã°ããFlowã©ã€ãã©ãªãçºèŠããJSããã¹ãã«åæ
å ±ãç°¡åã«è¿œå ã§ããŸããã
Flowã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ã¯ç°¡åã§ãïŒ
yarn add
ãŸããå¶åŸ¡ããå¿
èŠããããã¡ã€ã«ã®å
é ã«1è¡ã®ã³ãŒããè¿œå ããããšã«ãããç°¡åã«æ¥ç¶ã§ããŸãã
次ã«ã
flow check
ã³ãã³ãã䜿çšãããšãæšæž¬ãããã¿ã€ãã«åºã¥ããŠã¬ããŒããååŸã§ããŸãã
ãããžã§ã¯ãã§Babelãªã©ã®ãã©ã³ã¹ãã€ã©ãŒã䜿çšããŠããå ŽåãJSã§ãããŒã¿ã€ããã³ãããµããŒãããæ°ããã«ãŒã«ãè¿œå ã§ããŸãã ãã®çµæãPHPãšåæ§ã«äŸ¿å©ã«åãæäœã§ããŸãã
ãããŒã®ãã³ããµãŒããŒã®ã¯ã©ãã·ã¥ãšPM2ã«ããç£èŠ
PHPã®äžçã§ã¯ãã¹ã¯ãªããã®å€±æã¯çã®ãªã¯ãšã¹ããæå³ããŸãã Node.jsã®å ŽåããµãŒããŒãã¯ã©ãã·ã¥ãããšãWebãµã€ãå
šäœãæ©èœããªããªããŸãã ãããã£ãŠãããã»ã¹ãç£èŠããå¿
èŠããããŸãã
åªããç£èŠã·ã¹ãã ãæ¢ããŠã
SupervisordããJavaScriptã§èšè¿°ããã競åä»ç€Ÿã«åãæ¿ããŸããã ããã«ãããŸãïŒ
â
PM2ïŒããã»ã¹ãããŒãžã£ãŒ2ïŒç§ã¯PM2ã倧奜ããªã®ã§ãããã«2ã3ã®ããŒããæ¿å
¥ããªããã°ãªããŸããã
PM2ã¯Yarnã䜿çšããŠã€ã³ã¹ããŒã«ã§ããŸããYarnã¯ããèªäœéåžžã«åªããŠããŸãããPM2èªäœã«ã¯å€ãã®é·æããããŸãã ãããã£ãŠãæ©èœã®ç¹ã§ã¯ãSupervisoredãäžåããŸãã 圌ã¯ãåããã»ã¹ãã·ã¹ãã äžã«äœæããè² è·ãããã³ããã»ã¹ãå æããã¡ã¢ãªã远跡ããæ¹æ³ãç¥ã£ãŠãããã³ãŒããå€æŽããããšãã«ããã»ã¹ãåèµ·åããããã«æ§æã§ããŸãã
pm2 listã³ãã³ãã¯ããã¹ãŠã®ç®¡ç察象PM2ããã»ã¹ã«é¢ããæ
å ±ã衚瀺ããŸããpm2 monit
ã¯ãåããã»ã¹ã®ãªã¢ã«ã¿ã€ã ã®è©³çŽ°ãªã¬ããŒããæäŸããŸãã ããã«ãPM2ã¯ãè¿œå ã®åªåãªãã«ãæšæºã®
console.log()/.warn()/.error()
ã³ãã³ãã䜿çšããŠããã®ã³ã°ãç°¡çŽ åããŸãã
PM2ã¯ãµãŒãã¹åºåãèŠèŠåãããŠãŒã¶ãŒå®çŸ©ã®ã¡ããªãã¯ã远跡ã§ããŸããã£ãšèšããŸãã Supervisordã®æ©èœã®ç¯å²ã¯ããã»ã¹å¶åŸ¡ã«éå®ãããŠããŸãããPM2ã¯ãããžã§ã¯ããå±éããããã«äœ¿çšãããã¹ã¯ãªããã®äžéšãåçŽãªæ§æãã¡ã€ã«ã«çœ®ãæããããšãã§ããŸãã
ããã»ã¹ãç°¡åã«èšè¿°ããŠãããã€ã§ããããã«ããæ§æãã¡ã€ã«PM2ã¯ãç§ã«ãšã£ãŠJavaScriptã«åãæ¿ããããšã®æãéèŠãªå©ç¹ã®1ã€ã§ãã ããã«ãã©ã®èšèªã§æžããããããžã§ã¯ãã«ã䜿çšã§ããŸãããå¯äžã®ãã€ãã¹ç¹ã§ãããã®ãããªå ŽåãJSã«åºã¥ãããããžã§ã¯ãã§äœæ¥ãããšãã»ã©å¯æ¥ãªçµ±åã¯ãããŸããã
.envã䜿çšãããããžã§ã¯ãã®æ§æ
ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ã
Phingã䜿çšããŠ3ã€ã®åé¡ã解決ããŸããã
- ãããžã§ã¯ãæ§æ
- ã¹ã¯ãªããã£ã³ã°
- 䟿å©ãªã³ãã³ãã®ä¿åã
JavaScriptã®äžçã§ã¯ãèšå®ã¿ã¹ã¯ã¯åªãã
DotEnvã©ã€ãã©ãªãš
.env
ãã¡ã€ã«ã§
.env
ã§ããŸãã ãã®ã©ã€ãã©ãªã䜿çšãããšãç°å¢å€æ°ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãæ§æã§ããŸãã ããã¯ã
Twelve-Factor Appæ¹æ³è«ããæšå¥šãããããªãã¯ã®1ã€ã§ãããç¶ç¶çã«äœ¿çšããŠããŸãã
Phingã®ã¹ã¯ãªããæ©èœã®ãããã§è§£æ±ºãããã¿ã¹ã¯ã§ã¯ãç¹å¥ãªããŒã«ã䜿çšããå¿
èŠããªããªããŸããã 以åã¯ããã¹ãŠã®ã¹ã¯ãªããã¯ãSupervisordãªã©ãPHPã®äžç以å€ã®ãœãããŠã§ã¢ã®æ§æã«é¢é£ä»ããããŠããããç¬ç«ããã³ãã³ãã©ã€ã³ã¹ã¯ãªãããšããŠèšèšã§ããŸããã
ãã®çµæãPhingãæããããšãã§ããå¯äžã®åœ¹å²ã¯ãã³ãã³ããä¿åãããããã®ã·ã§ãŒãã«ãããäœæããããšã§ãã ãã®ã¿ã¹ã¯ã¯YarnïŒãŸãã¯NPMïŒã«ãã£ãŠå®å
šã«è§£æ±ºãããŸãã
{ "name": "my project name", "...": "...", "scripts": { "release": "standard-version", "db-reset": "rm -rf data/main.db && sequelize db:migrate && sequelize db:seed:all", "db-migrate": "sequelize db:migrate", "dev": "pm2 delete all; pm2 startOrReload ecosystem.config.js && pm2 start react-scripts --name web -- start", "start": "pm2 startOrReload ecosystem.config.js", "build": "react-scripts build", "test": "react-scripts test --env=jsdom", "flow": "flow" } }
ãã®çµæãPhingãå®å
šã«æé€ãã次ã®æ¹æ³ã§ããŒã ã«é»è©±ããããããšãã§ããŸããã
yarn run db-migrate
åªãããªãŒãã³ãœãŒã¹ãšãã£ã¿ãŒã®æ€çŽ¢ãšäœ¿çš
PHPã§éçºãããšãã¯ãç¡æã®IDEã§ããPhpStormã䜿çšããŸãããããã¯ãç¡æã§é
åžãããŠãããã®ãé
ãããã«èŠãããããã©ã°ã€ã³ãäžè¶³ããŠããããã§ãã
JavaScriptã®äžçã§ã¯ãé©åãªã³ãŒããšãã£ã¿ãŒã®éžæã¯ã¯ããã«è±å¯ã§ãã
VS Codeã«æ±ºããŸããã ãã®ãšãã£ã¿ãŒã¯JavaScriptã§èšè¿°ãããŠãããæ奜家ãšãã€ã¯ããœããã®ã³ãã¥ããã£ãŒã«ãã£ãŠãµããŒããããŠããŸãã
VS CodeããŽãããŸã§ã®ãšãããç§ãã¡ã¯ãã¹ãŠVS Codeã奜ãã§ãã é«éã§åäœããçŽ æŽãããã³ãŒãè£å®ã·ã¹ãã ãåããŠããããã®èåŸã«ã¯åªããã³ãã¥ããã£ããããŸãã
ããã§ããããžã§ã¯ãã§äœ¿çšãããã©ã°ã€ã³ãèšå®ããæ§æãå
±æããæ©èœãæ¬åœã«æ°ã«å
¥ã£ãŠããŸãã ãã®ãããã§ãæ°åã¯ãªãã¯ããã ãã§ããã°ã©ããŒã®è·å Žãæºåã§ããŸãã
Prettierã䜿çšããŠæåã§ãªã³ãã£ã³ã°ãåé€ãã
PHPã§ã¯ã1ã€ã®çŽ æŽãããããšããããŸããã ãããã¯
PSRæšæºã§ãã ãããã®æšæºã¯ãã³ãŒãèšèšã«ãŒã«ãæºåãããšãã«éåžžã«åœ¹ç«ã¡ãŸãã
ã³ãŒããPSR 1ããã³2èŠæ Œã«æºæ ããããã«IDEãã»ããã¢ããããŸããããèªåä¿®æ£æ©èœããªããããåèªãããããåå¥ã«äœ¿çšãã責任ããããŸããã ããŸãè¯ããããŸããã§ãã
JavaScriptã«åãæ¿ãããšãPrettierã¯ãã®åéã§éåžžã«è²Žéãªã¢ã·ã¹ã¿ã³ãã«ãªããŸããã Prettierã¯ãã«ãŒã«ããŒã¹ã®ã³ãŒããã©ãŒããã¿ã§ãã ãã¡ã€ã«ãä¿åãããã³ã«ããã¹ãŠã®ã¢ããã¥ã¢ã¹ã¿ã€ãªã³ã°ãåé€ãããåäžã®ã¹ã¿ã€ã«ã«äžèŽãããã©ãŒã ã«ã³ãŒããå°ãããŸãã
ã¢ã¯ã·ã§ã³ã§ããããã®çµæãã³ãŒãã¹ã¿ã€ã«ã«ã€ããŠãã以äžã®è°è«ã¯ãããŸããããã®æ¹åã§ã®ãã¬ãŒãã³ã°ã¯ãããŸããããã©ãŒãããã®ã¿ãå€æŽããããã¡ã€ã«ãçµåããã®ã«æéã®æ倱ã¯ãããŸããã
ããŒã ã®å
šå¡ãPrettierã䜿çšããæããŠããŸãã ããã°ã©ããŒãäœæ¥ãè¡ããPrettierã詳现ã®ãã©ãŒããããæ
åœããŸãã
ãŸãšã
PHPããJSã«åãæ¿ãããšãã«ééããé·æãšçæãèããŠã¿ãŸãããã
é·æïŒ- ã¹ã¿ãã¯ã®ã€ã³ã¹ããŒã«ãšãããã€ãç°¡åã§ãã
- ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®ã³ãŒãã¯1ã€ã®èšèªã§æžãããŠããŸãã
- è€éãªã€ã³ã¹ããŒã«ã¹ã¯ãªããã«äŸåããªããªããŸããã
çæïŒ- ç§ãã¡ã®ããŒãºãæºããäžé£ã®ãã¯ãããžãŒã圢æããã«ã¯ãå€ãã®åŽåãå¿
èŠã§ããã
- JavaScriptã§ææ°ã®ããã°ã©ãã³ã°ãåŠã¶ããã«ã¯ãå€ãã®ãã¬ãŒãã³ã°ãç·šæããå¿
èŠããããŸããã
移è¡åŸããµãŒããŒAPIãè¿
éã«çæã§ããããšã«æ³šæããŠãã ããã ããã¯ãPHPã§è¡ã£ãããšã«äŒŒãŠããŸãã 移è¡åŸã¯äœãåŸæããŠããããäœã倱ã£ãŠããªããšæããŠããŸãã åãæ¿ãããã¹ãŠã®ããŒã«ã¯ã以å䜿çšãããã®ãšåçã§ãããããããããåªããŠããŸãã
PHPããJSãžã®åãæ¿ããæ€èšããŠããå Žåã¯ãæåããç¥ãããJSã®äžçãããã²ãŒãããå¿
èŠãªãã®ãæ£ç¢ºã«éžæããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
芪æãªãèªè
ïŒ PHPã䜿çšããŠããå Žåã¯ãããªãã®ç掻ãæããŠãã ãããJavaScriptã«åãæ¿ããäºå®ã¯ãããŸããïŒ