{"id":12970,"date":"2016-12-22T09:00:39","date_gmt":"2016-12-22T00:00:39","guid":{"rendered":"http:\/\/www.techscore.com\/blog\/?p=12970"},"modified":"2018-11-14T16:33:43","modified_gmt":"2018-11-14T07:33:43","slug":"angular2%e3%81%a7%e3%81%95%e3%81%8f%e3%81%a3%e3%81%a8mean%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%82%92%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.techscore.com\/blog\/2016\/12\/22\/angular2%e3%81%a7%e3%81%95%e3%81%8f%e3%81%a3%e3%81%a8mean%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%82%92%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b\/","title":{"rendered":"Angular2\u3067\u3055\u304f\u3063\u3068MEAN\u30b9\u30bf\u30c3\u30af\u3092\u306f\u3058\u3081\u3066\u307f\u308b"},"content":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\u3001\u5e73\u5965\u3067\u3059\uff01<br \/>\n\u3053\u308c\u306f\u3001 <a href=\"http:\/\/www.techscore.com\/blog\/2016\/11\/30\/techscore-advent-calendar-2016\/\">TECHSCORE Advent Calendar 2016 TECHSCORE BLOG<\/a> \u306e22\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n<p>\u5f0a\u793e\u30b5\u30fc\u30d3\u30b9 <a href=\"https:\/\/www.synergy-marketing.co.jp\/cloud\/synergy\/\">Synergy!<\/a> \u306f\u3001 AngularJS \u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002 AngularJS \u306f\u3054\u5b58\u77e5\u306e\u65b9\u3082\u591a\u3044\u3068\u306f\u601d\u3044\u307e\u3059\u304c\u3001\u5f8c\u7d99\u30d0\u30fc\u30b8\u30e7\u30f3\u306e Angular2 \u304c\u767b\u5834\u3057\u307e\u3057\u305f\u3002 Angular2 \u306f AngularJS \u306e\u554f\u984c\u70b9\u304c\u6574\u7406\u3055\u308c\u307e\u3057\u305f\u3002\u305d\u306e\u7d50\u679c\u3001\u4f7f\u3044\u3084\u3059\u304f\u3001\u305d\u3057\u3066\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3082\u3082\u306e\u3059\u3054\u304f\u6539\u5584\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3057\u304b\u3057\u554f\u984c\u70b9\u3082\u3042\u308a\u307e\u3059\u3002 AngularJS \u3068\u306e\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>\u305d\u306e\u305f\u3081 Angular2 \u3092\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u4eca\u307e\u3067\u4f7f\u7528\u3057\u3066\u3044\u305f AngularJS \u306e\u74b0\u5883\u3092\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u305a\u3001\u65b0\u305f\u306b\u52d5\u4f5c\u3055\u305b\u308b\u74b0\u5883\u3092\u7528\u610f\u3057\u306a\u3044\u3068\u3044\u3051\u307e\u305b\u3093\u3002<\/p>\n<p><a href=\"http:\/\/plnkr.co\/\">Plnkr<\/a> \u306a\u3069\u3092\u4f7f\u3048\u3070\u7c21\u5358\u306b Angular2 \u306e\u691c\u8a3c\u306f\u3067\u304d\u308b\u306e\u3067\u3059\u304c\u3001\u305b\u3063\u304b\u304f\u306a\u3089 Angular2 \u306e MEAN \u30b9\u30bf\u30c3\u30af\u3092\u7528\u610f\u3057\u3066\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3082\u7528\u610f\u3057\u3066\u3044\u308d\u3044\u308d\u904a\u3093\u3067\u307f\u3088\u3046\u3068\u601d\u3044\u3001Angular2 \u3067 MEAN \u30b9\u30bf\u30c3\u30af\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u305d\u3053\u3067\u5b66\u3093\u3060\u3053\u3068\u3092\u3001\u8981\u70b9\u3092\u307e\u3068\u3081\u3066\u66f8\u3044\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2> \u305d\u3082\u305d\u3082 MEAN \u30b9\u30bf\u30c3\u30af\u3068\u306f <\/h2>\n<p>MEAN \u30b9\u30bf\u30c3\u30af\u306f Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u7c21\u7d20\u5316\u3057\u3001\u9ad8\u901f\u5316\u3059\u308b\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u306e JavaScript \u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002 MongoDB \u3001Express \u3001 AngularJS \u3001Node.js \u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u306b\u3088\u3063\u3066 JavaScript \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u30b5\u30fc\u30d0\u307e\u3067\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u74b0\u5883\u3067\u3059\u3002<\/p>\n<p>\u305d\u308c\u305e\u308c\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u7c21\u5358\u306a\u8aac\u660e\u306f\u4ee5\u4e0b\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<div style=\"border: 1px solid #cccccc; padding: 10px; background: #ffffff;\">\n<ul>\n<li><strong>AngularJS<\/strong> \u306f JavaScript \u3067\u66f8\u304b\u308c\u305f\u3001\u30b7\u30f3\u30b0\u30eb\u30da\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\uff08 SPA \uff09\u306e\u958b\u767a\u304c\u53ef\u80fd\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>Node.js <\/strong>\u306f Chrome \u306e V8 JavaScript \u30a8\u30f3\u30b8\u30f3\u3067\u52d5\u4f5c\u3059\u308b\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u306e JavaScript \u74b0\u5883\u3067\u3042\u308b\u3002\u8efd\u91cf\u3067\u52b9\u7387\u7684\u306b\u52d5\u4f5c\u3059\u308b\u975e\u540c\u671f\u578b\u306e\u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u30e2\u30c7\u30eb\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>MongoDB<\/strong> \u306f\u30c7\u30fc\u30bf\u3092\u975e\u5b9a\u578b\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u96c6\u5408\u4f53\u3068\u3057\u3066 JSON \u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u3067\u84c4\u3048\u308b\u3001 NoSQL \u578b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6307\u5411\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>Express<\/strong> \u306f Node.js \u4e0a\u3067\u52d5\u4f5c\u3059\u308b Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002MEAN \u30b9\u30bf\u30c3\u30af\u3067\u4f7f\u7528\u3055\u308c\u308b\u5834\u5408\u306f Node.js \u4e0a\u3067\u52d5\u4f5c\u3059\u308b MVC \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066 AngularJS \u304b\u3089\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u53d6\u308a\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3059\u3088\u3046\u306a\u5f79\u5272\u3092\u62c5\u3063\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/div>\n<p>\u4eca\u56de\u306f\u30bf\u30a4\u30c8\u30eb\u306b\u3042\u308b\u901a\u308a\u3001AngularJS \u3092\u4f7f\u3046\u306e\u3067\u306f\u306a\u304f\u3001Angular2 \u3092\u4f7f\u7528\u3059\u308b MEAN \u30b9\u30bf\u30c3\u30af\u3092\u4f5c\u6210\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2>Anglar2 \u306e MEAN \u30b9\u30bf\u30c3\u30af\u306e\u3072\u306a\u5f62<\/h2>\n<p>\u3072\u306a\u5f62\u3068\u3057\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\n|-- app.js\r\n|-- assets\r\n|   `-- app\r\n|       |-- app.component.html\r\n|       |-- app.component.service.ts\r\n|       |-- app.component.ts\r\n|       |-- app.module.ts\r\n|       |-- main.ts\r\n|       `-- polyfills.ts\r\n|-- bin\r\n|   `-- www\r\n|-- models\r\n|   `-- message.js\r\n|-- node_modules\r\n|-- package.json\r\n|-- public\r\n|-- routes\r\n|   |-- app.js\r\n|   `-- message.js\r\n|-- tsconfig.json\r\n|-- views\r\n|   `-- index.hbs\r\n|-- webpack.config.js\r\n<\/pre>\n<h3> \u5404\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u8aac\u660e <\/h3>\n<div style=\"border: 1px solid #cccccc; padding: 10px; background: #ffffff;\">\n<ul>\n<li><strong>assets\uff1a<\/strong> \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5074\u306e Angular2 \u3067\u4f7f\u308f\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>bin\uff1a<\/strong> Node.js \u3067\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>models\uff1a <\/strong> \u4eca\u56de\u306f None.js \u304b\u3089 MongoDB \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b mongoose \u3092\u4f7f\u3044\u307e\u3059\u3002mongoose \u306f\u30c7\u30fc\u30bf\u3092\u30e2\u30c7\u30eb\u5316\u3057\u3066\u30b9\u30ad\u30fc\u30de\u30d9\u30fc\u30b9\u3067\u30ed\u30b8\u30c3\u30af\u3092\u7d44\u307f\u7acb\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u306f\u305d\u306e\u30b9\u30ad\u30fc\u30de\u3092\u5b9a\u7fa9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>public\uff1a <\/strong> \u4eca\u56de\u306f Angular2 \u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30e2\u30b8\u30e5\u30fc\u30eb\u30d0\u30f3\u30c9\u30e9\u30fc\u3067\u3042\u308b webpack \u3092\u4f7f\u3063\u3066\u307e\u3068\u3081\u3066\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>routes\uff1a<\/strong> Express \u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u3001\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u5b9f\u88c5\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li>\n<p><\/p>\n<li><strong>views\uff1a<\/strong> \u3053\u306e MEAN \u30b9\u30bf\u30c3\u30af\u3067\u4f7f\u7528\u3059\u308b HTML \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/div>\n<h2> \u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u306b\u3064\u3044\u3066 <\/h2>\n<p>\u4eca\u56de\u306f\u3001MEAN \u30b9\u30bf\u30c3\u30af\u3092\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u306b\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u3092 DB \u306b\u767b\u9332\u3057\u3066\u3001\u767b\u9332\u60c5\u5831\u3092\u4e00\u89a7\u8868\u793a\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n\u307e\u305a MongoDB \u3068 mongoose \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>\u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8\u304b\u3089\u5b9f\u884c\u74b0\u5883\u306b\u9069\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>MongoDB \u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8: <a href=\"https:\/\/www.mongodb.com\/\">https:\/\/www.mongodb.com\/<\/a><br \/>\nmongoose \u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8: <a href=\"http:\/\/mongoosejs.com\/\">http:\/\/mongoosejs.com\/<\/a><\/p>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u3067\u304d\u305f\u3089\u3001\u6b21\u306f\u30d5\u30a1\u30a4\u30eb\u306e\u7de8\u96c6\u3092\u304a\u3053\u306a\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h2> \u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb <\/h2>\n<h3> package.json <\/h3>\n<p>MEAN \u30b9\u30bf\u30c3\u30af\u3067\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u306f npm \u3092\u4f7f\u7528\u3057\u3066\u53d6\u5f97\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081 package.json \u306b\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8a18\u8f09\u3057\u3066 npm \u3067\u53d6\u5f97\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u30bd\u30fc\u30b9\u306f\u4ee5\u4e0b\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre>\r\n{\r\n  \"name\": \"techscore-nodejs-angular2\",\r\n  \"version\": \"1.0.0\",\r\n  \"private\": true,\r\n  \"scripts\": {\r\n    \"start\": \"node .\/bin\/www\",\r\n    \"build\": \"del-cli public\/js\/app && webpack --config webpack.config.dev.js --progress --profile --watch\"\r\n  },\r\n  \"dependencies\": {\r\n    \"@angular\/common\": \"2.0.1\",\r\n    \"@angular\/compiler\": \"2.0.1\",\r\n    \"@angular\/compiler-cli\": \"0.6.3\",\r\n    \"@angular\/core\": \"2.0.1\",\r\n    \"@angular\/forms\": \"2.0.1\",\r\n    \"@angular\/http\": \"2.0.1\",\r\n    \"@angular\/platform-browser\": \"2.0.1\",\r\n    \"@angular\/platform-browser-dynamic\": \"2.0.1\",\r\n    \"@angular\/platform-server\": \"2.0.1\",\r\n    \"@angular\/router\": \"3.0.1\",\r\n    \"@angular\/upgrade\": \"2.0.1\",\r\n    \"body-parser\": \"~1.15.2\",\r\n    \"cookie-parser\": \"~1.4.3\",\r\n    \"core-js\": \"^2.4.1\",\r\n    \"debug\": \"~2.2.0\",\r\n    \"express\": \"~4.14.0\",\r\n    \"hbs\": \"~3.1.0\",\r\n    \"mongoose\": \"^4.7.1\",\r\n    \"mongoose-unique-validator\": \"^1.0.3\",\r\n    \"morgan\": \"~1.6.1\",\r\n    \"reflect-metadata\": \"^0.1.3\",\r\n    \"rxjs\": \"5.0.0-beta.12\",\r\n    \"serve-favicon\": \"~2.3.0\",\r\n    \"zone.js\": \"^0.6.23\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@types\/core-js\": \"^0.9.34\",\r\n    \"@types\/node\": \"^6.0.45\",\r\n    \"angular2-router-loader\": \"^0.3.2\",\r\n    \"angular2-template-loader\": \"^0.5.0\",\r\n    \"awesome-typescript-loader\": \"^2.2.4\",\r\n    \"del-cli\": \"^0.2.0\",\r\n    \"html-loader\": \"^0.4.4\",\r\n    \"raw-loader\": \"^0.5.1\",\r\n    \"typescript\": \"^2.0.3\",\r\n    \"webpack\": \"2.1.0-beta.21\",\r\n    \"webpack-merge\": \"^0.14.1\"\r\n  }\r\n}\r\n<\/pre>\n<p>\u4eca\u56de\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u30d0\u30f3\u30c9\u30e9\u3067\u3042\u308b webpack \u3092\u4f7f\u3063\u3066\u3001\u30d5\u30ed\u30f3\u30c8\u306e\u30bd\u30fc\u30b9\u3092\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002scripts \u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u306f\u3001\u958b\u767a\u74b0\u5883\u306e\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3059\u308b start \u3068 Angular2 \u306e TypeScript \u306e\u30bd\u30fc\u30b9\u3092\u30c8\u30e9\u30f3\u30b9\u30d1\u30a4\u30eb\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u307e\u3068\u3081\u308b\u305f\u3081\u306e build \u30b9\u30af\u30ea\u30d7\u30c8\u30926\uff5e7\u884c\u76ee\u306b\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3> webpack.config.js <\/h3>\n<p>webpack \u306e\u8a2d\u5b9a\u3067\u306f\u90e8\u5206\u7684\u306b\u629c\u7c8b\u3057\u3066\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002<br \/>\n\u307e\u305a\u3001Entry\u3067\u3059\u304c\u3001\u8d77\u70b9\u3068\u306a\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u3092 webpack \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001Angular2 \u306e\u8d77\u52d5\u51e6\u7406\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b main.ts \u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305f\u3001webpack \u304c\u51e6\u7406\u3057\u305f\u7d50\u679c\u3092\u51fa\u529b\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u3067\u3042\u308b\u3001output \u3082\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u51fa\u529b\u3057\u305f JavaScript \u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8d77\u52d5\u6642\u306b\u53c2\u7167\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\n  entry: {\r\n    'app': '.\/assets\/app\/main.ts'\r\n  },\r\n<\/pre>\n<pre>\r\n  output: {\r\n    path: '.\/public\/js\/app',\r\n    publicPath: \"\/js\/app\/\",\r\n    filename: 'bundle.js'\r\n  }\r\n<\/pre>\n<p>\u4ed6\u306b\u3082 TypeScript \u3092\u30c8\u30e9\u30f3\u30b9\u30d1\u30a4\u30eb\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u3001tsconfig.json \u306a\u3069\u3082\u3042\u308a\u307e\u3059\u304c\u3001\u7279\u306b\u91cd\u8981\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u3053\u3053\u3067\u306f\u5272\u611b\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3059\u3002<\/p>\n<h2> \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5074\u3092\u69cb\u6210\u3059\u308b\u30d5\u30a1\u30a4\u30eb <\/h2>\n<h3> app.js <\/h3>\n<p>Node.js \u306e\u30e1\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u4f7f\u7528\u3059\u308b\u5404\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\nvar express = require('express');\r\nvar path = require('path');\r\nvar favicon = require('serve-favicon');\r\nvar logger = require('morgan');\r\nvar cookieParser = require('cookie-parser');\r\nvar bodyParser = require('body-parser');\r\nvar mongoose = require('mongoose');\r\n\r\nvar appRoutes = require('.\/routes\/app');\r\nvar messageRoutes = require('.\/routes\/message');\r\n\r\nvar app = express();\r\nmongoose.connect('mongodb:\/\/localhost:27017\/techscore');\r\n\r\n\/\/ view engine setup\r\napp.set('views', path.join(__dirname, 'views'));\r\napp.set('view engine', 'hbs');\r\n\r\n\/\/ uncomment after placing your favicon in \/public\r\n\/\/app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));\r\napp.use(logger('dev'));\r\napp.use(bodyParser.json());\r\napp.use(bodyParser.urlencoded({extended: false}));\r\napp.use(cookieParser());\r\napp.use(express.static(path.join(__dirname, 'public')));\r\n\r\napp.use(function (req, res, next) {\r\n    res.setHeader('Access-Control-Allow-Origin', '*');\r\n    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');\r\n    res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS');\r\n    next();\r\n});\r\n\r\napp.use('\/', appRoutes);\r\napp.use('\/message', messageRoutes);\r\n\r\n\/\/ catch 404 and forward to error handler\r\napp.use(function (req, res, next) {\r\n    return res.render('index');\r\n});\r\n\r\n\r\nmodule.exports = app;\r\n<\/pre>\n<p>7\u884c\u76ee\u300113\u884c\u76ee\u304c mongoose \u306e\u8a2d\u5b9a\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u63a5\u7d9a\u3059\u308b MongoDB \u306e\u8a2d\u5b9a\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<div style=\"border: 1px solid #cccccc; padding: 10px; background: #ffffff;\">\nmongoose.connect('mongodb:\/\/localhost:27017\/techscore');\n<\/div>\n<p>\u3067\u306fIP\u30a2\u30c9\u30ec\u30b9\uff1a\u30dd\u30fc\u30c8\u756a\u53f7\/ DB \u540d\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u4ee5\u5916\u306f\u307b\u3068\u3093\u3069 Express \u306e\u8a2d\u5b9a\u3067\u3059\u3002<br \/>\n\u30d8\u30c3\u30c0\u306e\u8a2d\u5b9a\u3084 view \u306e\u8a2d\u5b9a\u306a\u3069\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n9\uff5e10\u884c\u76ee\u300134\u884c\u76ee\uff5e35\u884c\u76ee\u306f\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u8a2d\u5b9a\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3> www \u30d5\u30a1\u30a4\u30eb<\/h3>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f Node.js \u3067\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u306a\u3069\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\n#!\/usr\/bin\/env node\r\n\r\n\/**\r\n * Module dependencies.\r\n *\/\r\n\r\nvar app = require('..\/app');\r\nvar debug = require('debug')('node-rest:server');\r\nvar http = require('http');\r\n\r\n\/**\r\n * Get port from environment and store in Express.\r\n *\/\r\n\r\nvar port = normalizePort(process.env.PORT || '3000');\r\napp.set('port', port);\r\n\r\n\/**\r\n * Create HTTP server.\r\n *\/\r\n\r\nvar server = http.createServer(app);\r\n\r\n\/**\r\n * Listen on provided port, on all network interfaces.\r\n *\/\r\n\r\nserver.listen(port);\r\nserver.on('error', onError);\r\nserver.on('listening', onListening);\r\n\r\n\/**\r\n * Normalize a port into a number, string, or false.\r\n *\/\r\n\r\nfunction normalizePort(val) {\r\n  var port = parseInt(val, 10);\r\n\r\n  if (isNaN(port)) {\r\n    \/\/ named pipe\r\n    return val;\r\n  }\r\n\r\n  if (port >= 0) {\r\n    \/\/ port number\r\n    return port;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\n\/**\r\n * Event listener for HTTP server \"error\" event.\r\n *\/\r\n\r\nfunction onError(error) {\r\n  if (error.syscall !== 'listen') {\r\n    throw error;\r\n  }\r\n\r\n  var bind = typeof port === 'string'\r\n    ? 'Pipe ' + port\r\n    : 'Port ' + port;\r\n\r\n  \/\/ handle specific listen errors with friendly messages\r\n  switch (error.code) {\r\n    case 'EACCES':\r\n      console.error(bind + ' requires elevated privileges');\r\n      process.exit(1);\r\n      break;\r\n    case 'EADDRINUSE':\r\n      console.error(bind + ' is already in use');\r\n      process.exit(1);\r\n      break;\r\n    default:\r\n      throw error;\r\n  }\r\n}\r\n\r\n\/**\r\n * Event listener for HTTP server \"listening\" event.\r\n *\/\r\n\r\nfunction onListening() {\r\n  var addr = server.address();\r\n  var bind = typeof addr === 'string'\r\n    ? 'pipe ' + addr\r\n    : 'port ' + addr.port;\r\n  debug('Listening on ' + bind);\r\n}\r\n<\/pre>\n<p>22\u884c\u76ee\u3067\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n15\uff5e16\u884c\u76ee\u3067\u30dd\u30fc\u30c8\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3> views\/index.hbs <\/h3>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5074\u304b\u3089\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u8fd4\u3055\u308c\u308b HTML \u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<br \/>\n\u3053\u306e HTML \u30d5\u30a1\u30a4\u30eb\u3067\u306f Angular2 \u306e\u521d\u671f\u306b\u8868\u793a\u3059\u308b\u5185\u5bb9\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <base href=\"\/\">\r\n    <title>Angular 2 Messenger<\/title>\r\n    <link rel=\"stylesheet\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.6\/css\/bootstrap.min.css\" integrity=\"sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7\" crossorigin=\"anonymous\">\r\n    <link rel='stylesheet' href='\/stylesheets\/style.css'\/>\r\n\r\n<\/head>\r\n<body>\r\n<my-app>Loading...<\/my-app>\r\n\r\n<script src=\"\/js\/app\/bundle.js\"><\/script>\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n<p>11\u884c\u76ee\u3067 Angular2 \u306e Components \u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305f13\u884c\u76ee\u3067 webpack \u3067\u4f5c\u6210\u3055\u308c\u305f JavaScript \u306e\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u308a\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002<\/p>\n<h3> routes\/app.js <\/h3>\n<p>routes \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f Express \u306e Routing \u6a5f\u80fd\u3092\u5b9f\u73fe\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u3053\u3053\u3067\u306f REST API \u3067\u5b9f\u88c5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\nroutes\/app.js \u306f\u30eb\u30fc\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u6307\u5b9a\u3057\u305f\u5834\u5408\u306b\u5b9f\u884c\u3055\u308c\u308b\u51e6\u7406\u3067\u3059\u3002<br \/>\n\u3053\u306e\u51e6\u7406\u304c\u5b9f\u884c\u3055\u308c\u308b\u3068\u3001views\/index.hbs \u3092\u30ec\u30b9\u30dd\u30f3\u30b9\u3067\u8fd4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d5\u30ed\u30f3\u30c8\u5074\u306e Angular2 \u304c\u5b9f\u884c\u3055\u308c\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre>\r\nvar express = require('express');\r\nvar router = express.Router();\r\n\r\nrouter.get('\/', function (req, res, next) {\r\n  res.render('index');\r\n});\r\n\r\nmodule.exports = router;\r\n<\/pre>\n<h3> routes\/message.js <\/h3>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3001\u30d5\u30ed\u30f3\u30c8\u5074\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u53d6\u5f97\u8981\u6c42( get )\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u8a2d\u5b9a\u8981\u6c42( post )\u306e\u51e6\u7406\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u305d\u308c\u305e\u308c MongoDB \u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3001\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\nvar express = require('express');\r\nvar router = express.Router();\r\nvar Message = require('..\/models\/message');\r\n\r\nrouter.get('\/', function (req, res, next) {\r\n  Message.find(function(err, doc) {\r\n    if (err) {\r\n      return res.send('Error!');\r\n    } else {\r\n      return res.status(200).json({messages: doc});\r\n    }\r\n  });\r\n});\r\n\r\nrouter.post('\/', function (req, res, next) {\r\n  var message = new Message({\r\n      message: req.body.message\r\n  });\r\n  message.save(function (err, result) {\r\n    if (err) {\r\n      return res.status(500).json({\r\n        title: 'An error occurred',\r\n        error: err\r\n      });\r\n    }\r\n    return res.status(200).json({\r\n      message: 'Saved message',\r\n      obj: result\r\n    });\r\n  });\r\n});\r\n\r\nmodule.exports = router;\r\n<\/pre>\n<p>6\u884c\u76ee\u308416\u884c\u76ee\u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b Message \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c mongoose \u306e\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u3053\u306e\u30af\u30e9\u30b9\u306f models \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3> models\/message.js <\/h3>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3001mongoose \u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u3001\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b9\u30ad\u30fc\u30de\u3092\u4f7f\u3063\u3066\u3001MongoDB \u306b\u5bfe\u3057\u3066\u51e6\u7406\u3092\u8981\u6c42\u3057\u307e\u3059\u3002<\/p>\n<pre>\r\nvar mongoose = require('mongoose');\r\nvar Schema = mongoose.Schema;\r\n\r\nvar schema = new Schema({\r\n  message: {type: String}\r\n});\r\n\r\nmodule.exports = mongoose.model('messages', schema);\r\n<\/pre>\n<h2> \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5074\u3092\u69cb\u6210\u3059\u308b\u30d5\u30a1\u30a4\u30eb <\/h2>\n<h3> assets\/app\/main.ts <\/h3>\n<p>Angular2 \u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306e\u51e6\u7406\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f webpack \u306e Entry \u306b\u8a18\u8f09\u3055\u308c\u3066\u304a\u308a\u3001\u4e00\u756a\u521d\u3081\u306b\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre>\r\nimport '.\/polyfills';\r\n\r\nimport { platformBrowserDynamic } from '@angular\/platform-browser-dynamic';\r\n\r\nimport { AppModule } from \".\/app.module\";\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule);\r\n<\/pre>\n<h3> assets\/app\/app.module.ts <\/h3>\n<p>\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3084\u30b5\u30fc\u30d3\u30b9\u306a\u3069\u3092\u3072\u3068\u307e\u3068\u3081\u306b\u3067\u304d\u308b NgModule \u3092\u5b9f\u88c5\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<\/p>\n<pre>\r\nimport { NgModule } from '@angular\/core';\r\nimport { BrowserModule } from '@angular\/platform-browser';\r\nimport { HttpModule } from '@angular\/http';\r\n\r\nimport { AppComponent } from \".\/app.component\";\r\nimport {componentService} from \".\/app.component.service\";\r\n\r\n@NgModule({\r\n    declarations: [\r\n        AppComponent\r\n    ],\r\n    imports: [BrowserModule, HttpModule],\r\n    bootstrap: [AppComponent],\r\n    providers: [componentService]\r\n})\r\nexport class AppModule {}\r\n<\/pre>\n<p>\u4ee5\u4e0b\u306b\u5404\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u8aac\u660e\u3092\u8a18\u8f09\u3057\u307e\u3059\u3002<br \/>\n\u30fbimport : \u5404\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u306a\u3069\u3092\u767b\u9332\u3059\u308b\u30d7\u30ed\u30d1\u30c6\u30a3\u3067\u3059\u3002<br \/>\n\u30fbbootstrap : \u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8\u306b\u306a\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<br \/>\n\u30fbprovider : \u4f7f\u7528\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3092\u767b\u9332\u3059\u308b\u30d7\u30ed\u30d1\u30c6\u30a3\u3067\u3059\u3002<\/p>\n<h3> assets\/app\/app.component.html <\/h3>\n<p>my-app \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u4f7f\u7528\u3055\u308c\u308b HTML \u304c\u8a18\u8ff0\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<br \/>\n\u3053\u3053\u3067\u306f\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u767b\u9332\u3059\u308b UI \u3068\u53d6\u5f97\u3059\u308b UI \u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\n<h1> Messages <\/h1>\r\n<ul>\r\n  <li *ngFor=\"let item of messages\">\r\n    {{item.message}}\r\n  <\/li>\r\n<\/ul>\r\n<div class=\"config\">\r\n  <input type=\"button\" (click)=\"onSend()\" value=\"Get Message\">\r\n<\/div>\r\n<h1> Set Message <\/h1>\r\n<div class=\"config\">\r\n  <form action=\"\/Message\" method=\"post\">\r\n    <input type=\"input\" name=\"message\">\r\n    <button type=\"submit\">Set Message<\/button>\r\n  <\/form>\r\n<\/div>\r\n<\/pre>\n<h3> assets\/app\/app.component.ts <\/h3>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3000my-app \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u8a2d\u5b9a\u304c\u8a18\u8f09\u3055\u308c\u3055\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<br \/>\n\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u540d\u79f0\u3092\u8a2d\u5b9a\u3059\u308b selector \u3084\u4f7f\u7528\u3059\u308b HTML \u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u307e\u305f AppComponent \u30af\u30e9\u30b9\u3082\u5b9a\u7fa9\u3055\u308c\u3001\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u632f\u308b\u821e\u3044\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\nimport { Component, OnInit } from '@angular\/core';\r\nimport {componentService} from '.\/app.component.service';\r\n\r\n@Component({\r\n    selector: 'my-app',\r\n    templateUrl: '.\/app.component.html',\r\n    providers: [componentService]\r\n})\r\nexport class AppComponent  {\r\n  messages: Array<Object>;\r\n  constructor(private componentService: componentService) {}\r\n\r\n  onSend() {\r\n     this.componentService.getMessage()\r\n     .subscribe((resData: any) => {\r\n       this.messages = resData.messages;\r\n      }\r\n    );\r\n  }\r\n<\/pre>\n<h3> assets\/app\/app.component.service.ts <\/h3>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f my-app \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u4f7f\u7528\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u306f\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97\u3059\u308b getMessage \u30e1\u30bd\u30c3\u30c9\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre>\r\nimport { Observable } from 'rxjs\/Rx';\r\nimport { Http, Response } from '@angular\/http';\r\nimport { Injectable } from '@angular\/core';\r\nimport 'rxjs\/Rx';\r\n\r\n@Injectable()\r\nexport class componentService {\r\n  constructor(private http: Http) {}\r\n\r\n  getMessage() {\r\n    return this.http.get('http:\/\/172.17.123.126:3000\/message')\r\n     .map((response: Response) => \r\n     {\r\n       const result = response.json();\r\n       return result;\r\n     })\r\n    .catch((error: Response) => Observable.throw(error.json()));\r\n  }\r\n}\r\n<\/pre>\n<h2> MongoDB \u306e\u6e96\u5099 <\/h2>\n<p>\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b MongoDB \u3092\u6e96\u5099\u3057\u307e\u3059\u3002<br \/>\n\u3068\u3044\u3063\u3066\u3082\u7528\u610f\u3059\u308b\u306e\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3060\u3051\u3067\u3059\u3002<\/p>\n<p>\u307e\u305a\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u7acb\u3061\u4e0a\u3052\u307e\u3059\u3002<\/p>\n<div style=\"border: 1px solid #cccccc; padding: 10px; background: #ffffff;\">\n.\/mongo\n<\/div>\n<p>\u305d\u308c\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4eca\u56de\u306f techscore \u3068\u3044\u3046\u540d\u79f0\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<div style=\"border: 1px solid #cccccc; padding: 10px; background: #ffffff;\">\nuse techscore\n<\/div>\n<h2> \u52d5\u304b\u3057\u3066\u307f\u308b <\/h2>\n<p>\u4ee5\u4e0a\u3067\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u8aac\u660e\u306f\u5b8c\u4e86\u3067\u3059\u3002\u3067\u306f\u5b9f\u969b\u306b\u52d5\u4f5c\u3055\u305b\u3066\u307f\u307e\u3057\u3087\u3046\uff01<\/p>\n<p>\u30d6\u30e9\u30a6\u30b6\u3067\u30b5\u30fc\u30d0\u304c\u8d77\u52d5\u3057\u3066\u3044\u308b IP \u30a2\u30c9\u30ec\u30b9\u3068\u30dd\u30fc\u30c8 3000 \u756a\u3092\u6307\u5b9a\u3057\u3066\u30a2\u30af\u30bb\u30b9\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u8d77\u52d5\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u753b\u9762\u304c\u51fa\u3066\u304d\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/0bf4d4e366bf3d6f5e00fbb7d4d8f4f2.png\" rel=\"facebox\" rel=\"attachment wp-att-13588\"><img loading=\"lazy\" src=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/0bf4d4e366bf3d6f5e00fbb7d4d8f4f2.png\" alt=\"\" width=\"598\" height=\"321\" class=\"alignnone size-full wp-image-13588\" srcset=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/0bf4d4e366bf3d6f5e00fbb7d4d8f4f2.png 598w, https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/0bf4d4e366bf3d6f5e00fbb7d4d8f4f2-300x161.png 300w\" sizes=\"(max-width: 598px) 100vw, 598px\" \/><\/a><\/p>\n<p>\u305d\u308c\u3067\u306f\u300cSet Message\u300d\u306e\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u4efb\u610f\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u300cSet Message\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u4e0b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n\u4eca\u306e\u5b9f\u88c5\u3060\u3068 redirect \u304c\u3067\u304d\u306a\u3044\u306e\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u304c\u51fa\u3066\u304d\u307e\u3059\u304c\u3001URL \u304b\u3089 \/Message \u3068\u3044\u3046\u30d1\u30b9\u3092\u524a\u9664\u3057\u3066\u3001\u30ea\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a href=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/b45ecdb89548e1a9fa884329afaab266.png\" rel=\"facebox\" rel=\"attachment wp-att-13593\"><img loading=\"lazy\" src=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/b45ecdb89548e1a9fa884329afaab266.png\" alt=\"\" width=\"692\" height=\"50\" class=\"alignnone size-full wp-image-13593\" srcset=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/b45ecdb89548e1a9fa884329afaab266.png 692w, https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/b45ecdb89548e1a9fa884329afaab266-300x22.png 300w\" sizes=\"(max-width: 692px) 100vw, 692px\" \/><\/a><\/p>\n<p>\u305d\u3046\u3059\u308b\u3068\u307e\u305f\u521d\u671f\u306e\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<br \/>\n\u4eca\u5ea6\u306f\u300cGet Message\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u4e0b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n\u305d\u3046\u3059\u308b\u3068\u3001\u5148\u307b\u3069\u767b\u9332\u3057\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/results.png\" rel=\"facebox\" rel=\"attachment wp-att-13595\"><img loading=\"lazy\" src=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/results.png\" alt=\"\" width=\"586\" height=\"319\" class=\"alignnone size-full wp-image-13595\" srcset=\"https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/results.png 586w, https:\/\/www.techscore.com\/blog\/wp\/wp-content\/uploads\/2016\/12\/results-300x163.png 300w\" sizes=\"(max-width: 586px) 100vw, 586px\" \/><\/a><\/p>\n<h2>\u307e\u3068\u3081<\/h2>\n<p>\u3044\u304b\u304c\u3067\u3057\u305f\u3067\u3057\u3087\u3046\u304b\u3002\u4eca\u56de\u306f MEAN \u30b9\u30bf\u30c3\u30af\u3092 Angular2 \u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u5b9f\u969b\u306b\u7f6e\u304d\u63db\u3048\u3066\u307f\u308b\u3068\u5404\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5f79\u5272\u304c\u3057\u3063\u304b\u308a\u5206\u304b\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u3057\u3063\u304b\u308a\u3068\u691c\u8a0e\u3057\u3066\u3084\u308c\u3070\u3001\u305d\u308c\u307b\u3069\u82e6\u52b4\u3059\u308b\u3053\u3068\u306a\u304f\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<br \/>\n\u3067\u3059\u306e\u3067\u3001\u305f\u3068\u3048\u3070 MongoDB \u3092\u4ed6\u306e DB \u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3084\u3001Node.js \u3067\u306f\u306a\u304f\u3001Vert.x \u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3068\u304b\u3082\u4e88\u60f3\u3088\u308a\u3082\u7c21\u5358\u306b\u3067\u304d\u308b\u306e\u3067\u306f\u306a\u3044\u304b\u306a\u3068\u611f\u3058\u307e\u3057\u305f\u3002<br \/>\n\u307f\u306a\u3055\u307e\u3082\u3044\u308d\u3044\u308d\u8a66\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\u3001\u5e73\u5965\u3067\u3059\uff01<br \/>\n\u3053\u308c\u306f\u3001 TECHSCORE Advent Calendar 2016 TECHSCORE BLOG \u306e22\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n<p>\u5f0a\u793e\u30b5\u30fc\u30d3\u30b9 Synergy! \u306f\u3001 AngularJS \u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/><a href=\"https:\/\/www.techscore.com\/blog\/2016\/12\/22\/angular2%e3%81%a7%e3%81%95%e3%81%8f%e3%81%a3%e3%81%a8mean%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%82%92%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b\/\">\u7d9a\u304d\u3092\u8aad\u3080...<\/a><\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[239,18],"tags":[141,234,247],"_links":{"self":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/12970"}],"collection":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/comments?post=12970"}],"version-history":[{"count":144,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/12970\/revisions"}],"predecessor-version":[{"id":13741,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/12970\/revisions\/13741"}],"wp:attachment":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/media?parent=12970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/categories?post=12970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/tags?post=12970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}