ãµãŒããŒäžã®TypeScript
ç¹ã«Angular2ã®æ®åã«ãããTypeScriptã¯æè¿æ¥éã«äººæ°ãéããŠããŸãã åæã«ãTypeScriptã¯ãµãŒããŒã§ç¹ã«äººæ°ãããããã§ã¯ãããŸããã å€ãã®äººãTypeScriptãè©ŠããŠã¿ãããšæã£ãŠããŸãããé·ãéãã®èšå®ãåŠçããèœå/欲æ±ããããŸããã ãã®èšäºã§ã¯ãES6 / Nextã³ãŒããšã»ãšãã©å€ãããªãããã«ãæå°éã®è€éãã§ãµãŒããŒã§TSã®äœ¿çšãéå§ããæ¹æ³ãšããããå¿ èŠãªçç±ã説æããŸãã
TypeScriptã«ã¯ãESã³ãŒããã©ã³ã¹ãã€ã©ãŒïŒããã«ãªã©ïŒããªãã·ã§ã³ã®ã³ãŒãã¿ã€ãã³ã°ïŒãããŒãªã©ïŒãè¿œå ã®æ€èšŒã«ãŒã«ïŒãªã³ã¿ãŒé¢æ°ã®äžéšïŒãJSã«ãªãèšèªæ§æïŒCoffeeScriptãªã©ïŒãå€éšã©ã€ãã©ãªã®ã¿ã€ãã³ã°ãªã©ã䜿çšã«é¢ããããã€ãã®åŽé¢ããããŸãã
ããã«ããããã®åŽé¢ã¯ã»ãšãã©ç¬ç«ããŠããããããã®äœ¿çšã¯ãªãã·ã§ã³ã§ãã TSãå§ãããšããç°å¢ããã°ããã»ããã¢ããããããšãéèŠã ã£ãã®ã§ãéãããæ©èœã»ããã䜿çšããŠããŸããããå°æ¥ã¯ãã®äœ¿çšã¢ãŒãã奜ãã§ãä»ã§ã¯ã»ãšãã©ã®ãããžã§ã¯ãã§äœ¿çšããŠããŸãã ããã«ã¯å€ãã®å©ç¹ããããŸãããã³ãŒãã¯JS ES6 / Nextã®ææ°ããŒãžã§ã³ãšã»ãŒåãã§ãïŒãµã³ãã«ãJSã«çµ±åããã®ã¯ç°¡åã§ãJSã³ãŒãã«å€æããã®ã¯ç°¡åã§ãïŒã å°æ¥ãå¿ èŠã«å¿ããŠããããžã§ã¯ãã¯ããé«åºŠãªæ©èœã䜿çšã§ããŸãã TSã®ããŸããŸãªåŽé¢ã詳ããèŠãŠã¿ãŸãããã
ãã©ã³ã¹ããŒã¿ãŒãšããŠã®TypeScript
æŸéãããã©ããïŒ ã»ãšãã©ã®æ°ãããããžã§ã¯ãã§ã¯ES6ã䜿çšããŠããŸãããããã¯JSèšèªãžã®éåžžã«å€§ããªè¿œå ã§ãããéçºã®å¿«é©ããšæå¹æ§ã«ãšã£ãŠæ¬åœã«éèŠã§ãã ææ°ã®LTSããŒãžã§ã³ã§ã¯ãES6ããŒãã¯ã»ãŒå®å šã«ãµããŒããããŠãããè¿œå ã®ãã©ã³ã¹ãã¬ãŒã·ã§ã³ãªãã§äœ¿çšã§ããŸãã ES6ã«æ £ããŠããªãå Žåã¯ãå€æ°ã®å ¥éèšäºããããŸã ãããšãã°ã ãã¡ãã§èªãããšãã§ããŸã ã
ES6ã«å ããŠããã®èšèªã®äž»ãªæ°æ©èœã®1ã€ã¯ãTSã§ãµããŒããããŠããasync / awaitã§ãã ããã¯ãã³ãŒã«ããã¯ãšãããã¹ã®åŸã®æ¬¡ã®ã¹ãããã§ããéåæã³ãŒããæäœããããã®æ°ããã¢ãããŒãã§ãã ã¡ãªããã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ããã async / awaitã®ãµããŒãã¯æ¢ã«ããŒãã«ãããŸãããLTSããŒãžã§ã³ã«ã¯ãŸã ãããŸããã æ°ãããããžã§ã¯ããäœæãããšãã¯ãããã«async / awiatã䜿çšããã®ãçã«ããªã£ãŠããŸãã 第äžã«ãããã¯ã¯ããã«äŸ¿å©ã§ããã第äºã«ãpromiseããasync / awiatãžã®ã³ãŒãã®ãããªãå€æã«ã¯è¿œå ã®åªåãå¿ èŠã§ãããããã«ãããè¡ãæ¹ãè¯ãã§ãã
ããã«ãTSã¯ES6ã¹ã¿ã€ã«ã§ã®ã€ã³ããŒãããµããŒãããŠããŸãïŒrequire ...ã§ã¯ãªãfrom ...ïŒããã®ããã®ããŒãã§ã®ãµããŒãã¯ããã«ã¯è¡ãããŸããã ããã§ããå€ãã®æ©èœããããŸã ã ããããTSã§ã¯çŸåšäœ¿çšã§ããä»æ§ã®100ïŒ å®è£ ã§ã¯ãããŸããããã»ãšãã©ã®å Žåãããã¯éèŠã§ã¯ãããŸããã
ã³ãŒããããŒã«ã«ã§ç°¡åã«ãããã°ããã«ã¯ãéçºè ã®ãã·ã³ã§ES6ã§ã³ãŒããã³ã³ãã€ã«ããããšããå§ãããŸãã ããŒã«ã«ã§ã¯ã6.xããŒãã®ããŒãžã§ã³ãå¿ èŠã§ãããæ¬çªããŒãã¯å€ãããŒãžã§ã³ã®ããŒãã䜿çšã§ããŸãããã®åŸãæ¬çªçšã«ã³ã³ãã€ã«ããå ŽåãTSããçŽæ¥ãŸãã¯Babelã䜿çšããŠãES6ããES5ã«ããã«ã³ã³ãã€ã«ããå¿ èŠããããŸãã
ã³ãŒãã¿ã€ãã³ã°
ãªããããå¿ èŠãªã®ã§ããïŒ å³å¯ãªåä»ãã«ã¯ããã€ãã®å©ç¹ããããŸãïŒåãä»ããŠçœ²åãèšè¿°ããããšã«ãããã³ã³ãã€ã«æã«å€ãã®ãšã©ãŒããã£ããã§ããŸããããšãã°ãã¡ãœãããæ°å€ãåãåã£ãŠæååãæž¡ããšèšè¿°ãããšãTSã³ã³ãã€ã©ãŒã¯ããã«ãã®ããšãéç¥ããŸãã ããã«ãã¿ã€ãã®èª¬æã«ãããIDEã¯ããæ£ç¢ºãªãã³ããæäŸããã³ãŒããããéãæžãããšãã§ããŸãã ããã«ãä»ã®ããã°ã©ãã³ã°èšèªã§ã¯åŒ·åãªåæå®ã«ããããã©ãŒãã³ã¹ãåäžããŸãããTSã§ã¯å泚éã®ãªãJSã³ãŒããã³ã³ãã€ã«ã§çæããããããããã¯é¢ä¿ãããŸããã
å³å¯ãªåä»ãã«ã¯æ¬ ç¹ããããŸããåãèšè¿°ããã®ã«ããå€ãã®æéãå¿ èŠã§ããåã¯ã³ãŒãã®å¯èªæ§ãæãªãããšããããããåãå¥ã®åã«å€æãããšãã«åé¡ãçããããšããããŸãã
è¯ããã¥ãŒã¹ã¯ãTSã§ã¯ã¿ã€ãã³ã°ããªãã·ã§ã³ã§ããããšã§ãã ã³ã³ãã€ã©ã¬ãã«ã§ã¯ãåå€æ°/ãã©ã¡ãŒã¿ãŒã«åããããTSã³ãŒããæå®ãããŠããªãå Žåãanyãæ³å®ãããŸããã€ãŸããå€æ°ã¯ä»»æã®åã®å€ãåããTSã¯ãããèš±å¯ããŸãã
é©åãªã ãã®ã¿ã€ãã³ã°ã䜿çšã§ããŸãã åçŽãªãããžã§ã¯ãã®å Žåãè¿œå ã®å ¥åã¯ã»ãšãã©äœ¿çšããŸãã;åºæ¬çãªTSãã§ãã¯ã§ååã§ãã ããããã©ã€ãã©ãªãäœæãããã倧èŠæš¡ã§è€éãªãããžã§ã¯ãã§äœæ¥ããå Žåãã¿ã€ãã³ã°ã¯çã«ããªã£ãŠãããã©ã€ãã©ãªã®å®è£ ã«å¿ èŠãªäœåãªæéãæ£åœåããŸãã
TSã§å§ããã°ããã®å ŽåããŸãã¯JSã³ãŒãã移è¡ããå Žåã¯ãå ¥åããã«éå§ããåŸã ã«è¿œå ããå¿ èŠããããŸãã ããããã°ããã®äœ¿çšã®æ¬åœã®å©ç¹ãç解ã§ããŸãã
å€éšã©ã€ãã©ãªã®å ¥å
TSã§ã¯ã宣èšãã¡ã€ã«ïŒå®£èšãã¡ã€ã«* .d.tsïŒã䜿çšããŠJSã©ã€ãã©ãªãèšè¿°ã§ããŸãã åæã«ãTSã¯ååãªæè»æ§ãåããŠãããããŸããŸãªã¿ã€ãã®ã©ã€ãã©ãªãšãã®äœ¿çšã¢ãŒãïŒã°ããŒãã«ã©ã€ãã©ãªãã¢ãžã¥ãŒã«ãUMPãªã©ïŒããµããŒãããŠããŸãã TSã®åºçŸã®ã»ãŒçŽåŸã«ãoupensource DefinitelyTypedãªããžããªãç»å ŽããŸããããã®ãªããžããªã§ã¯ãããã¢ã®ããŒã«ãå€ãã®ç°ãªãJSã©ã€ãã©ãªã®å®£èšãã¡ã€ã«ãè¿œå ããã³æŽæ°ããŸããã
åœåãTSéçºè ã¯å®£èšãã¡ã€ã«ã®ç®¡çã®åé¡ã«å¯ŸåŠããŠããŸããã§ãããtsdããã³ã¿ã€ãã³ã°ãããžã§ã¯ãã¯ãnpmããã±ãŒãžã®ã€ã³ã¹ããŒã«ãšåæ§ã®æ¹æ³ã§ãããã®ãã¡ã€ã«ãã€ã³ã¹ããŒã«ã§ããããã«ãªããŸããã TypeScript 2.0以éã§ã¯ãnpmã䜿çšããŠå®£èšãã¡ã€ã«ãããŒãã§ããŸãã 詳现ã¯ãã¡ã ã
TSã䜿çšããŠããŒãã§éçºããã«ã¯ãå°ãªããšãããŒãã®å®£èšãã¡ã€ã«ãå¿ èŠã§ã
npm install -D @types/node
ããã«ãããã°ããŒãã«require / process / globalsãæšæºfs / path / streamã¢ãžã¥ãŒã«ãªã©ã®Node API宣èšãã€ã³ã¹ããŒã«ãããŸãã ãã®ããã±ãŒãžã¯ãå€ãããŒãžã§ã³ã®ããŒãã«é©ããææ°ããŒãžã§ã³7.xã®ããŒãAPIã«ã€ããŠèª¬æããŠããŸãã
TSã®ä»¥åã®ããŒãžã§ã³ã§ã¯ãåããŒãã¢ãžã¥ãŒã«ã宣èšããå¿ èŠããããŸããã 宣èšãã¡ã€ã«ã䜿çšããããä»»æã®ã¹ã¿ãã䜿çšããŸãã
declare module "my-module";
TS 2.1以éãã¢ãžã¥ãŒã«ã®èª¬æã¯ãªãã·ã§ã³ã§ã;ããã§ãªãå Žåãã¢ãžã¥ãŒã«ã¯anyã¿ã€ãã§ãããšæ³å®ãããŸãïŒä»»æã®ã¡ãœãã/ããããã£ãåŒã³åºãããšãã§ããŸãïŒã ããã§ããTSã¯ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ïŒããŒãïŒãããŠããããšãã€ãŸã npmããã±ãŒãžãã€ã³ã¹ããŒã«ãããŸã§ãããžã§ã¯ãããã«ãã§ããŸããã
ç¹ã«åå¿è ã®å Žåã¯ã宣èšãã¡ã€ã«ã泚æããŠäœ¿çšããŠãã ããã 眲åæ€èšŒãšæé«ã®èªåã¢ããªã³ã®å©ç¹ã«ããããããã宣èšãã¡ã€ã«ã«ã¯å€ãã®åé¡ããããŸãã
ã»ãšãã©ã®å Žåã宣èšãã¡ã€ã«ãšã©ã€ãã©ãªèªäœã¯ç°ãªã人ã ã«ãã£ãŠäœæãããå®å šã«ã¯åæãããŠããŸããã ãŸããããã¥ã¡ã³ãã«ã¯ã宣èšãã¡ã€ã«ã«ãªãæå¹ãªçœ²åãèšèŒãããŠããå ŽåããããŸãã ããã«ã宣èšãã¡ã€ã«ã䜿çšãããšãã¯ãã³ãŒãã§ããå€ãã®åã䜿çšããå¿ èŠããããçŽç²ãªJSã³ãŒããšã¯ãã§ã«éåžžã«ç°ãªã£ãŠããŸãã
ç§ã®ãããžã§ã¯ãã§ã¯ããã°ãã°nodeã®å®£èšãšããªãã·ã§ã³ã§lodashã®å®£èšã«éå®ããŠããŸãã
TSåºæã®èšèªæ§é
TSã«ã¯ãJSæšæºã«ãªãèšèªæ§æèŠçŽ ãããã€ããããŸãã ããšãã°ãEnumã enumãšconst enumã®2ã€ã®ããŒãžã§ã³ããããŸãã
å®æ°åæåã䜿çšãããšãæ°å€ã®åæå®ãããååãæå®ã§ããŸãã次ã«äŸã瀺ããŸãã
const enum Size { Small = 1, Medium, Large } let size = Size.Large; // "let size = 3"
æšæºåæåã«ã¯ãããã«å€ãã®ãªãã·ã§ã³ããããŸãã
enum Size { Small = 1, Medium, Large } let size = Size.Large; //size = 3 let sizeName = Size[Size.Large] // sizeName = 'Large'
ããã¯ãæšæºã®TSåæã次ã®åœ¢åŒã®æ§é ã«ã³ã³ãã€ã«ããããšããäºå®ã«ãã£ãŠéæãããŸãã
var Size; (function (Size) { Size[Size["Small"] = 1] = "Small"; Size[Size["Medium"] = 2] = "Medium"; Size[Size["Large"] = 3] = "Large"; })(Size || (Size = {}));
äžæ¹ã§ã¯äŸ¿å©ã§ãããã³ãŒããJSãšäºææ§ããªããªããšåæã«ãTSã®ç¥èã®ãªãéçºè ããããç解ããã®ãé£ãããªãããããã°ã«åé¡ãããå¯èœæ§ããããŸãã
TSãæå°éã«äœ¿çšããŠããã®ãããªæ§é ãé¿ããããšããå§ãããŸãã
TSã䜿çšããå®çšçãªæ©èœ
TSã«ã¯ãåå¿è ã®éçºè ãç¥ã£ãŠããã¹ãå€ãã®æ©èœããããŸãã
ã¢ãžã¥ãŒã«ã®ã€ã³ããŒã
次ã®ããã«å€éšã¢ãžã¥ãŒã«ãã€ã³ããŒãããŸãã
import * as fs from 'fs'; // JS import fs from 'fs'; // import * fs from 'fs';
ãšã¯ã¹ããŒãã®ããã©ã«ãã䜿çšããŠã¢ãžã¥ãŒã«ãæžãããšãã§ããŸã
// greeter.ts export default { hi, hey } function hi() {console.log('hi');} function hey() {console.log('hey');} // import greeter from './greeter'; greeter.hi();
ES6æšæºã«åŸã£ãŠãç»é²æžã¿ã®ãšã¯ã¹ããŒãã䜿çšããããšãã§ããŸãã 詳现ã¯ãã¡ã ã
ã«ãã£ã¹ã
TSã§ã¯ãå¿ èŠã«å¿ããŠå€æ°ã䜿çšã§ããããã®ééã£ãåããã€ã³ãã§ããªãããšããããŸãã ãã®å Žåããã€ã§ãanyã«ãã£ã¹ãã§ããŸãã
let sayHello = (name: string) => { console.log(`Hello, ${name}!`); }; let x = 20; sayHello(x); // , x , sayHello(x as any); // sayHello(<any>x); //
ããã¯ããŸãè¯ããªãã®ã§é¿ããã¹ãã§ããããã®æ¹æ³ã§åé¡ãçŽ æ©ã解決ããããšã䟿å©ãªå ŽåããããŸãã
ãªããžã§ã¯ãã«æåã«ååšããªãããããã£ãããå Žåã¯ãããã«ç©ºã«èšå®ããããšããå§ãããŸããããããªããšãTSãééã£ãã¿ã€ãã«ã€ããŠæå¥ãèšããŸãã
let myObj = { name: 'my_obj', value: 24, tag: null } if (myObj.value > 20) { myObj.tag = 'xyz'; }
ã¡ãœããã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒ
ç¹å®ã®æ°ã®åŒæ°ã䜿çšããŠã¡ãœããã宣èšããå ŽåãTSã¯å®å šäžèŽãèŠæ±ããŸãã ãããJSã®ããã«æ©èœãããã«ã¯ããªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã䜿çšããå¿ èŠããããŸãã
function doAction(action, title = null) { if (title) { console.log(`Doing action ${title}...`); } action(); } ... doAction(() => {console.log('Files were removed!')}, 'Delete'); doAction(() => {console.log('Project was created!')});
ãã€ã³ãã¿ã€ãã³ã°ãšnull蚱容å
ããšãã°ããã©ã¡ãŒã¿ããªããžã§ã¯ããšããŠååŸããã¡ãœããããç¹å®ã®æå¹ãªã»ããããæååãã©ã¡ãŒã¿ãååŸããå Žåãªã©ãæãæå³ã®ããå Žæã«ãã¿ã€ãã³ã°ãåå¥ã«è¿œå ã§ããŸãã
interface CommandOptions { path: string, params: string[], title?: string // } function executeCommand(command, options: CommandOptions) { //... } type Color = 'red' | 'black' | 'white'; function log(message, color: Color) { ///... } logger.log('hey', 'black'); //, logger.log('ho', 'yellow'); //
ç°å¢èšå®
TSã䜿çšããã«ã¯ãç°å¢ãæ§æããããã«ããå°ãæéãå¿ èŠã§ãã TSã¯ãJSã®ã»ãšãã©ã®IDE /ãšãã£ã¿ãŒã§ãµããŒããããŠããŸãã èªåè£å®ããªãã¡ã¯ã¿ãªã³ã°ããããŠæãéèŠãªããšãšããŠãWebStormãšVS Codeã§ã®ãããã°ã®æé©ãªãµããŒãã
VS Codeéçºè ã¯TSéçºè ãšç·å¯ã«é£æºãããããTSãµããŒããæé©ã§ãã
ã³ã³ãã€ã«ãšãããã°ã®ã»ããã¢ããã®è©³çŽ°ã«ã€ããŠã¯ãã¡ããã芧ãã ãã ïŒWebStormã®å Žåã¯ãã¡ã ãVSã³ãŒãã®å Žåã¯ãã¡ããšãã¡ã
typescript npmããã±ãŒãžãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããåŸãã³ã³ãã€ã©ã¯tsc globalã³ãã³ããšããŠå©çšå¯èœã§ãã ã³ãã³ãã©ã€ã³ãŸãã¯èšå®ãã¡ã€ã«ã䜿çšããŠãããŸããŸãªã³ã³ãã€ã«ãªãã·ã§ã³ãæž¡ãããšãã§ããŸãã ããã©ã«ãã§ã¯ãã³ã³ãã€ã©ã¯tsconfig.jsonã䜿çšããããšããŸãã ããã§ãã³ã³ãã€ã«ãªãã·ã§ã³ãããã³ã©ã®ãã¡ã€ã«ãå«ãã/é€å€ããããæå®ã§ããŸãã ããã¥ã¡ã³ãWebãµã€ãã®èšå®ã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
srcãã©ã«ããŒã«ã³ãŒããããããŒããããžã§ã¯ãã®ããŒã¹tsconfigã¯æ¬¡ã®ããã«ãªããŸãã
{ "compilerOptions": { "target": "es6", // es6, es5 "module": "commonjs", // commonjs (node require) "sourceMap": true, // sourceMaps, "outDir": "build/src", // /src /build/src "rootDir": "src" }, // /src "include": [ "src/**/*" ] }
TSã¯å€ãã®ãªã³ã¿ãŒæ©èœãåŒãåããŸãã ããšãã°ãTSã§å®£èšãããŠããªãã°ããŒãã«å€æ°ã®äœ¿çšã¯ç¡å¹ã§ãããã³ã³ãã€ã«æã«ãšã©ãŒãçºçããŸãã ãã ããTSã¯ã³ãŒãã®èšè¿°ã¹ã¿ã€ã«ã«å¶éã課ããŸããã ãã®è³ªåã¯äž»ã«è¶£å³ã®åé¡ã§ãããæ®éçã«åãå ¥ããããŠããæ£ããã¢ãããŒãã¯ãããŸãããã誰ãããããžã§ã¯ãã§åäžã®ã¹ã¿ã€ã«ã䜿çšããå¿ èŠãããããšã«åæããŸãã ããã¯ãTSLint-linter for TSã®äœ¿çšã«åœ¹ç«ã¡ãŸãã
䜿çšããã«ã¯ãtslintãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããŸãã
npm install -g tslint
tslint.configãã¡ã€ã«ã«å¿ èŠãªã«ãŒã«ãè¿œå ããŸãã
{ "rules": { // "quotemark": [true, "single"], // ( C# Java) "semicolon": [true] // ... } }
ã³ãã³ãã©ã€ã³ããtslintæ€èšŒãå®è¡ã§ããŸã
tslint -p tsconfig.json // TS
ãŸãã¯ãIDEã§TSLintãæ§æããŸãã WebStormããã³VS Codeã®ã«ã¹ã¿ãã€ãºã®è©³çŽ°ã
ãã«ãã¢ããª
ããŒãäžã®ããã¯ãšã³ããšææ°ã®ã¯ã©ã€ã¢ã³ããã¬ãŒã ã¯ãŒã¯ïŒReact / Vue / Angular2ïŒäžã®SPAã¯ã©ã€ã¢ã³ããåãããã«ã¹ã¿ãã¯JSã¢ããªã±ãŒã·ã§ã³ã®éçºã«åãããCLI ãã«ãã¢ããªã·ã¹ãã ãéçºããŠããŸãã ãã«ãã·ã¹ãã èªäœã«å ããŠããã®ã»ããã«ã¯ãåçŽãªãHello Worldãã¢ããªã±ãŒã·ã§ã³ãããããŒã¿ã¹ãã¬ãŒãžïŒSQL / NoSqlïŒãæ¿èªãé»åã¡ãŒã«éä¿¡ã«ãããã®ã³ã°ãªã©ãåããåçŽãªWebãµã€ãã®åºæ¬æ©èœã®å®è£ ãŸã§ã®ãã³ãã¬ãŒãã»ãããå«ãŸããŸãã
ã»ãšãã©ã®ãã³ãã¬ãŒãã¯ããµãŒããŒåŽã«TSã䜿çšããŠãããèšäºã§èª¬æãããŠããã¢ãããŒãã®äŸãšããŠäœ¿çšã§ããŸãã
ããã«ããã«ãã¢ããªã¯TSã®ç°å¢ã®èšå®ã«åœ¹ç«ã¡ãŸãïŒæ°ãããããžã§ã¯ããäœæãããšããIDEïŒVSã³ãŒããŸãã¯WebStormïŒã®èšå®ãçæã§ããŸãããããžã§ã¯ããç£èŠã¢ãŒãã§éå§ãããªãã·ã§ã³ããããŸãã ã
ãã«ãã·ã¹ãã ã®è©³çŽ°ã«ã€ããŠã¯ããããžã§ã¯ãã®readmeãã芧ãã ããã
äžæã³ãŒãã®ãœãŒã¹ã³ãŒãã¯ããªããžããªã§ãã«ãã¢ããªãçŽæ¥äœ¿çšããã«è¡šç€ºã§ããŸãïŒ Simple Template and Full templateïŒmongoïŒ ã
ããªãã®ã³ã¡ã³ããæè¿ããŸãã