{"id":458,"date":"2023-06-03T07:52:25","date_gmt":"2023-06-28T09:23:55","guid":{"rendered":"https:\/\/www.silicloud.com\/ja\/blog\/index.php\/2023\/11\/30\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/"},"modified":"2025-07-31T23:45:07","modified_gmt":"2025-07-31T14:45:07","slug":"%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/","title":{"rendered":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5"},"content":{"rendered":"<p>\u7b46\u8005\u306f\u300c\u66f8\u3044\u3066\u5bc4\u4ed8\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u300d\u306e\u4e00\u74b0\u3068\u3057\u3066\u3001\u5bc4\u4ed8\u91d1\u3092\u53d7\u3051\u53d6\u308b\u305f\u3081\u306b\u300cFree and Open Source Fund\u300d\u3092\u9078\u3073\u307e\u3057\u305f\u3002<\/p>\n<h3>\u3054\u6328\u62f6<\/h3>\n<p>Express\u306f\u3001Node\u3092\u4f7f\u7528\u3057\u3066\u9ad8\u901f\u306aWeb\u30a2\u30d7\u30ea\u3084API\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306e\u4eba\u6c17\u306e\u3042\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002Silicon Cloud\u306eApp Platform\u306f\u3001\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u3066\u5c55\u958b\u3059\u308b\u305f\u3081\u306ePlatform as a Service\uff08PaaS\uff09\u88fd\u54c1\u3067\u3059\u3002Express\u30a2\u30d7\u30ea\u3092\u5c55\u958b\u3059\u308b\u305f\u3081\u306e\u8fc5\u901f\u304b\u3064\u52b9\u7387\u7684\u306a\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092Silicon Cloud App Platform\u306b\u5c55\u958b\u3057\u3001Silicon Cloud Marketplace\u306eMemCachier\u30a2\u30c9\u30aa\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0\u3057\u3066\u30b9\u30b1\u30fc\u30eb\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002MemCachier\u306f\u3001memcached\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u306b\u6e96\u62e0\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u9ad8\u53ef\u7528\u6027\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u3088\u308b\u3088\u308a\u512a\u308c\u305f\u969c\u5bb3\u30b7\u30ca\u30ea\u30aa\u306e\u5b9f\u73fe\u306a\u3069\u3001\u3044\u304f\u3064\u304b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001\u7d20\u6570\u3092\u8a08\u7b97\u3057\u3001\u3044\u3044\u306d\u30dc\u30bf\u30f3\u3092\u6301\u3061\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u7528\u3059\u308bExpress\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306f\u5f8c\u3067\u3044\u304f\u3064\u304b\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u3092GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3066\u3001App Platform\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u6700\u5f8c\u306b\u3001\u30a2\u30d7\u30ea\u3092\u9ad8\u901f\u5316\u3057\u3001\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306b\u3059\u308b\u305f\u3081\u306b3\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u6280\u8853\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u7d42\u308f\u308a\u307e\u3067\u306b\u3001\u30ea\u30bd\u30fc\u30b9\u96c6\u4e2d\u578b\u306e\u8a08\u7b97\u3001\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u6280\u8853\u3092\u4f7f\u7528\u3057\u3066\u3001Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092App Platform\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h2>\u4ee5\u4e0b\u306e\u8a00\u8449\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u3066\u304f\u3060\u3055\u3044\uff08\u4ed5\u69d8\u5fdc\u3058\u30661\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u307f\uff09\uff1a<br \/>\n\u524d\u63d0\u6761\u4ef6<\/h2>\n<ul class=\"post-ul\">\n<li>Node.js installed on your machine, which you can setup with How To Install Node.js on Ubuntu 22.04. On other operating systems, follow the appropriate guide on How To Install Node.js and Create a Local Development Environment.<\/li>\n<li>A basic Express server with Node.js. Follow Steps 1-2 in our tutorial on How To Get Started with Node.js and Express.<\/li>\n<li>A GitHub account and Git installed on your local machine. These are necessary as you\u2019ll push the code to GitHub to deploy from Silicon Cloud App Platform. You can follow our tutorial on How To Install Git to get set up.<\/li>\n<li>A Silicon Cloud account for deploying to App Platform. Running this app on App Platform will incur a charge. See App Platform Pricing for details.<\/li>\n<li>A web browser like Firefox or Chrome.<\/li>\n<li>An understanding of Express template engines.<\/li>\n<li>An understanding of Express middleware. You can read more about this topic in our tutorial, How To Create a Custom Middleware in Express.js.<\/li>\n<\/ul>\n<h2>\u30b9\u30c6\u30c3\u30d71 &#8211; Express\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b\u30d3\u30e5\u30fc\u3092\u8a2d\u5b9a\u3059\u308b<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001Express\u7528\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u30a2\u30d7\u30ea\u306e\u30db\u30fc\u30e0\u30eb\u30fc\u30c8(GET \/)\u7528\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u30eb\u30fc\u30c8\u3067\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0\u3057\u307e\u3059\u3002\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u5f8c\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u306e\u9ad8\u901f\u5316\u3068\u30ea\u30bd\u30fc\u30b9\u306e\u4f7f\u7528\u91cf\u306e\u524a\u6e1b\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u59cb\u3081\u308b\u306b\u306f\u3001\u30a8\u30c7\u30a3\u30bf\u3067Express\u30b5\u30fc\u30d0\u30fc\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002\u3082\u3057\u3082\u307e\u3060\u958b\u3044\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001Node.js\u3068Express\u306e\u59cb\u3081\u65b9\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u623b\u3063\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u5834\u6240\u3092\u7279\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3042\u306a\u305f\u306fExpress\u306b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u9759\u7684\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u5909\u6570\u3092\u5024\u306b\u7f6e\u304d\u63db\u3048\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092HTML\u30d5\u30a1\u30a4\u30eb\u306b\u5909\u63db\u3057\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3059\u308b\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u9001\u4fe1\u3057\u307e\u3059\u3002\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001HTML\u306e\u4f5c\u696d\u304c\u3088\u308a\u7c21\u5358\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u57cb\u3081\u8fbc\u307fJavaScript\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\uff08ejs\uff09\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3082\u3057\u305d\u308c\u304c\u597d\u307f\u3067\u306a\u3051\u308c\u3070\u3001Express\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u4ed6\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\uff08Mustache\u3001Pug\u3001\u307e\u305f\u306fNunjucks\u306a\u3069\uff09\u306e\u3044\u305a\u308c\u304b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">npm<\/span> <span class=\"token function\">install<\/span> ejs<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>ejs\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001Express\u30a2\u30d7\u30ea\u3092\u8a2d\u5b9a\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u30a8\u30c7\u30a3\u30bf\u3067\u30d5\u30a1\u30a4\u30ebserver.js\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u3057\u3066\u3001\u5f37\u8abf\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc\u306e.js\u30d5\u30a1\u30a4\u30eb<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> app <span class=\"token operator\">=<\/span> <span class=\"token function\">express<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<mark>app<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'view engine'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'ejs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'Successful response.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u306e\u884c\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u30d7\u30ed\u30d1\u30c6\u30a3\u30d3\u30e5\u30fc\u30a8\u30f3\u30b8\u30f3\u3092ejs\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u30d3\u30e5\u30fc\u30a8\u30f3\u30b8\u30f3\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u304c\u3001\u5225\u306e\u4fbf\u5229\u306a\u8a2d\u5b9a\u3068\u3057\u3066views\u304c\u3042\u308a\u307e\u3059\u3002views\u8a2d\u5b9a\u306f\u3001Express\u30a2\u30d7\u30ea\u306b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b\u5834\u6240\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f.\/views\u3067\u3059\u3002<\/div>\n<\/div>\n<p>\u6b21\u306b\u3001views\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u5f8c\u3001views\/index.ejs\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u30a8\u30c7\u30a3\u30bf\u3067\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u305d\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u958b\u59cb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 (Sono fairu ni wa, kaishi tenpureeto no maakuappu o tsuika shite kudasai.)<\/p>\n<div>\u30d3\u30e5\u30fc\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.ejs<\/div>\n<pre class=\"post-pre\"><code>&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"en\"&gt;\r\n  &lt;head&gt;\r\n    &lt;meta charset=\"utf-8\"&gt;\r\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\r\n    &lt;title&gt;Find the largest prime number&lt;\/title&gt;\r\n  &lt;\/head&gt;\r\n  &lt;body&gt;\r\n    &lt;h1&gt;Find the largest prime number&lt;\/h1&gt;\r\n\r\n    &lt;p&gt;\r\n      For any number N, find the largest prime number less than or equal to N.\r\n    &lt;\/p&gt;\r\n  &lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u305f\u3089\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u30eb\u30fc\u30c8\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002<\/p>\n<p>server.js\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u30b3\u30fc\u30c9\u3092\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u81ea\u7136\u306a\u8868\u73fe\u306b\u8a00\u3044\u63db\u3048\u308b\u3068\u3001<br \/>\nserver.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <mark>res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u6700\u521d\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u540d\u524d\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001index\u306fviews\/index.ejs\u30d5\u30a1\u30a4\u30eb\u3068\u4e00\u81f4\u3057\u307e\u3059\u3002<\/p>\n<p>\u5909\u66f4\u5185\u5bb9\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306b\u3001\u30a2\u30d7\u30ea\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b5\u30fc\u30d0\u30fc\u304c\u5b9f\u884c\u4e2d\u306e\u5834\u5408\u306f\u30bf\u30fc\u30df\u30ca\u30eb\u3067CTRL+C\u3092\u62bc\u3057\u3001\u30b5\u30fc\u30d0\u30fc\u3092\u505c\u6b62\u3055\u305b\u3066\u304b\u3089\u518d\u5ea6\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">node<\/span> server.js<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3067localhost:3000\u3092\u8a2a\u308c\u308b\u3068\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u5185\u5bb9\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/32-0.png\" alt=\"Your rendered template with a heading and paragraph\" \/><\/div>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306b\u306f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u307e\u3060\u4f55\u3082\u6a5f\u80fd\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u6b21\u306b\u7d20\u6570\u3092\u898b\u3064\u3051\u308b\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d72 &#8211; Express\u30a2\u30d7\u30ea\u306b\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u7d20\u6570\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3068\u3001Like\u30dc\u30bf\u30f3\u3092\u4f7f\u3063\u305f\u6570\u5b57\u306e\u597d\u307f\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u3001Step 4\u3067App Platform\u306b\u5c55\u958b\u3057\u305f\u5f8c\u306b\u30a2\u30d7\u30ea\u3068\u5bfe\u8a71\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u7d20\u6570\u3092\u898b\u3064\u3051\u308b<\/h3>\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30a2\u30d7\u30ea\u306bN\u4ee5\u4e0b\u306e\u6700\u5927\u306e\u7d20\u6570\u3092\u898b\u3064\u3051\u308b\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u3053\u3067N\u306f\u4efb\u610f\u306e\u6570\u5b57\u3092\u6307\u3057\u307e\u3059\u3002<\/p>\n<p>N\u306f\u3001GET\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30db\u30fc\u30e0\u30eb\u30fc\u30c8\uff08\/\uff09\u306b\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u8ffd\u52a0\u3055\u308c\u305f\u5f62\u3067\u30d5\u30a9\u30fc\u30e0\u7d4c\u7531\u3067\u63d0\u51fa\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001localhost:3000\/?n=10\u306e\u3088\u3046\u306a\u30b5\u30f3\u30d7\u30eb\u30af\u30a8\u30ea\u3067\u3059\u3002\u30db\u30fc\u30e0\u30eb\u30fc\u30c8\u306f\u3001\u500b\u5225\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3067\u304d\u308b\u8907\u6570\u306eURL\u306b\u3088\u3063\u3066\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>views\/index.ejs\u306b\u306f\u3001N\u3092\u5165\u529b\u3059\u308b\u305f\u3081\u306e\u5165\u529b\u8981\u7d20\u3092\u6301\u3064\u30d5\u30a9\u30fc\u30e0\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>views\/index.ejs \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<\/div>\n<pre class=\"post-pre\"><code>...\r\n\r\n&lt;p&gt;\r\n  For any number N, find the largest prime number less than or equal to N.\r\n&lt;\/p&gt;\r\n\r\n<mark>&lt;form action=\"\/\" method=\"get\"&gt;<\/mark>\r\n  <mark>&lt;label&gt;<\/mark>\r\n    <mark>N<\/mark>\r\n    <mark>&lt;input type=\"number\" name=\"n\" placeholder=\"e.g. 10\" required&gt;<\/mark>\r\n  <mark>&lt;\/label&gt;<\/mark>\r\n  <mark>&lt;button&gt;Find Prime&lt;\/button&gt;<\/mark>\r\n<mark>&lt;\/form&gt;<\/mark>\r\n\r\n...\r\n<\/code><\/pre>\n<p>\u30d5\u30a9\u30fc\u30e0\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u306f \/ \u306b\u9001\u4fe1\u3055\u308c\u3001\u305d\u308c\u306f server.js \u306e\u30db\u30fc\u30e0\u30eb\u30fc\u30c8 app.get(&#8216;\/&#8217;) \u3067\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u30d5\u30a9\u30fc\u30e0\u306e\u30e1\u30bd\u30c3\u30c9\u304cget\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30c7\u30fc\u30bfn\u306f\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u30a2\u30af\u30b7\u30e7\u30f3URL\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b\u3001\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u30fcn\u3092\u4f7f\u7528\u3057\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u884c\u308f\u308c\u308b\u3068\u3001\u305d\u306e\u30c7\u30fc\u30bf\u3092\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3057\u307e\u3059\u3002<\/p>\n<p>\u300cserver.js\u300d\u306b\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <mark><span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span><\/mark>\r\n  \r\n  <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <mark><span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><\/mark>\r\n  \r\n  <mark><span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <mark>res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u308c\u3089\u306e\u884c\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u30fcn\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u3082\u3057\u3042\u308c\u3070\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d3\u30e5\u30fc\u3092\u8868\u793a\u3057\u3001\u305d\u306e\u5024\u3092\u6e21\u3057\u307e\u3059\u3002\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f\u3001\u30c7\u30fc\u30bf\u306e\u306a\u3044\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d3\u30e5\u30fc\u3092\u751f\u6210\u3057\u307e\u3059\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u30e6\u30fc\u30b6\u30fc\u306e\u5165\u529b\u306f\u5e38\u306b\u4fe1\u983c\u3067\u304d\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u306e\u3067\u3001\u672c\u756a\u7528\u306e\u30a2\u30d7\u30ea\u3067\u306fJoi\u306a\u3069\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3057\u3066\u5165\u529b\u3092\u691c\u8a3c\u3059\u308b\u3053\u3068\u304c\u6700\u5584\u306e\u65b9\u6cd5\u3067\u3059\u3002<\/div>\n<\/div>\n<p>render\u30e1\u30bd\u30c3\u30c9\u306b\u306f\u3001\u30bb\u30ab\u30f3\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3067\u3042\u308blocals\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306f\u3001\u30d3\u30e5\u30fc\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u305f\u3081\u306b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3055\u308c\u308b\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u77ed\u7e2e\u30d7\u30ed\u30d1\u30c6\u30a3\u540d\u306b\u3088\u3063\u3066\u3001locals\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306en\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u5909\u6570\u306e\u540d\u524d\u304c\u4ee3\u5165\u3055\u308c\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3068\u540c\u3058\u540d\u524d\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u5909\u6570\u540d\u306f\u7701\u7565\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001{ n: n }\u306f{ n }\u3068\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u30c7\u30fc\u30bf\u304c\u5165\u3063\u3066\u304d\u305f\u306e\u3067\u3001\u305d\u308c\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 (Tempur\u0113to ni data ga haitte kita node, sore o hy\u014dji suru koto ga dekimasu.)<\/p>\n<p>views\/index.ejs\u306b\u306f\u3001N\u306e\u5024\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306b\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>views\/index.ejs\u30d5\u30a1\u30a4\u30eb<\/div>\n<pre class=\"post-pre\"><code>...\r\n\r\n&lt;form action=\"\/\" method=\"get\"&gt;\r\n  &lt;label&gt;\r\n    N\r\n    &lt;input type=\"number\" name=\"n\" placeholder=\"e.g. 10\" required&gt;\r\n  &lt;\/label&gt;\r\n  &lt;button&gt;Find Prime&lt;\/button&gt;\r\n&lt;\/form&gt;\r\n\r\n<mark>&lt;% if (locals.n) { %&gt;<\/mark>\r\n  <mark>&lt;p&gt;N: &lt;%= n %&gt;&lt;\/p&gt;<\/mark>\r\n<mark>&lt;% } %&gt;<\/mark>\r\n\r\n...\r\n<\/code><\/pre>\n<p>\u3082\u3057\u3001\u3053\u306e\u30d3\u30e5\u30fc\u306b\u5bfe\u3057\u3066n\u3068\u3044\u3046\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u3001\u30a2\u30d7\u30ea\u306b\u8868\u793a\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3001\u30a2\u30d7\u30ea\u3092\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3059\u308b\u305f\u3081\u306b\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30d5\u30a9\u30fc\u30e0\u306b\u306f\u3001\u7d20\u6570\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u30dc\u30bf\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30a2\u30d7\u30ea\u306f\u30e6\u30fc\u30b6\u30fc\u306e\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u3001\u30d5\u30a9\u30fc\u30e0\u306e\u4e0b\u306b\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/58-0.png\" alt=\"Your rendered template now with a form to find a prime number\" \/><\/div>\n<p>\u30d5\u30a9\u30fc\u30e0\u306b\u4efb\u610f\u306e\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30d5\u30a9\u30fc\u30e0\u3092\u9001\u4fe1\u3059\u308b\u3068\u3001URL\u304cn\u3068\u3044\u3046\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u542b\u3080\u3088\u3046\u306b\u5909\u66f4\u3055\u308c\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u300140\u3092\u5165\u529b\u3057\u305f\u5834\u5408\u3001URL\u306fhttp:\/\/localhost:3000\/?n=40\u3068\u306a\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u9001\u4fe1\u3057\u305f\u5024\u306f\u30d5\u30a9\u30fc\u30e0\u306e\u4e0b\u306bN: 40\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/60-0.png\" alt=\"Your rendered template now showing the number submitted below the form\" \/><\/div>\n<p>N\u306e\u5024\u3092\u5165\u529b\u3057\u8868\u793a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3089\u3001N\u4ee5\u4e0b\u306e\u6700\u5927\u306e\u7d20\u6570\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306e\u95a2\u6570\u3092\u8ffd\u52a0\u3057\u3001\u305d\u306e\u7d50\u679c\u3092\u30d3\u30e5\u30fc\u306b\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u5f8c\u3001utils\/findPrime.js\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u30a8\u30c7\u30a3\u30bf\u3067findPrime.js\u3092\u958b\u304d\u3001\u7d20\u6570\u3092\u63a2\u3059\u95a2\u6570\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>utils\/findPrime.js\u3092\u548c\u8a33\u3059\u308b\u3068\u3001\u300c\u7d20\u6570\u3092\u898b\u3064\u3051\u308b\u300d\u3068\u3044\u3046\u610f\u5473\u306b\u306a\u308a\u307e\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token comment\">\/**\r\n * Find the largest prime number less than or equal to `n`\r\n * @param {number} n A positive integer greater than the smallest prime number, 2\r\n * @returns {number}\r\n *\/<\/span>\r\nmodule<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">exports<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">n<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">let<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ initialize with the smallest prime number<\/span>\r\n  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">let<\/span> i <span class=\"token operator\">=<\/span> n<span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">--<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">let<\/span> isPrime <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">let<\/span> j <span class=\"token operator\">=<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> i<span class=\"token punctuation\">;<\/span> j<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">%<\/span> j <span class=\"token operator\">==<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        isPrime <span class=\"token operator\">=<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>isPrime<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      prime <span class=\"token operator\">=<\/span> i<span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n  <span class=\"token keyword\">return<\/span> prime<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>JSDoc\u30b3\u30e1\u30f3\u30c8\u306f\u95a2\u6570\u3092\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5316\u3057\u307e\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u6700\u521d\u306e\u7d20\u6570(2)\u304b\u3089\u59cb\u307e\u308a\u3001\u305d\u308c\u304b\u3089\u6570\u3092\u30eb\u30fc\u30d7\u3057\u3066\u3001\u5404\u30eb\u30fc\u30d7\u3067\u6570\u30921\u6e1b\u3089\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u95a2\u6570\u306f\u3001\u6570\u304c2\u3001\u3064\u307e\u308a\u6700\u5c0f\u306e\u7d20\u6570\u306b\u306a\u308b\u307e\u3067\u3001\u30eb\u30fc\u30d7\u3092\u7d9a\u3051\u3066\u7d20\u6570\u3092\u63a2\u3057\u7d9a\u3051\u307e\u3059\u3002<\/p>\n<p>\u5404\u30eb\u30fc\u30d7\u306f\u73fe\u5728\u306e\u6570\u304c\u7d20\u6570\u3067\u3042\u308b\u3068\u4eee\u5b9a\u3057\u3001\u305d\u306e\u4eee\u5b9a\u3092\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002\u73fe\u5728\u306e\u6570\u304c1\u3068\u81ea\u5206\u81ea\u8eab\u4ee5\u5916\u306e\u56e0\u6570\u3092\u6301\u3064\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u73fe\u5728\u306e\u6570\u304c1\u3088\u308a\u5927\u304d\u304f\u3001\u81ea\u5206\u81ea\u8eab\u3088\u308a\u5c0f\u3055\u306a\u6570\u3067\u5272\u308a\u5207\u308c\u308b\u5834\u5408\u3001\u305d\u308c\u306f\u7d20\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u95a2\u6570\u306f\u6b21\u306e\u6570\u3092\u8a66\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b\u3001find prime \u95a2\u6570\u3092 server.js \u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc\u30d5\u30a1\u30a4\u30eb.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<mark><span class=\"token keyword\">const<\/span> findPrime <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/utils\/findPrime'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30db\u30fc\u30e0\u30eb\u30fc\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u66f4\u65b0\u3057\u3066\u3001\u7d20\u6570\u3092\u898b\u3064\u3051\u3066\u305d\u306e\u5024\u3092\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3059\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002server.js\u306b\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n  \r\n  <mark><span class=\"token keyword\">const<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n<mark><span class=\"token punctuation\">,<\/span> prime<\/mark> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u300c\u3055\u3042\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u7d50\u679c\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046\u3002views\/index.ejs\u3067\u306f\u3001N\u306e\u5024\u3092\u8868\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300d<\/p>\n<div>views\/index.ejs\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a\u300c\u30d3\u30e5\u30fc\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.ejs\u300d\u3002<\/div>\n<pre class=\"post-pre\"><code>...\r\n\r\n&lt;form action=\"\/\" method=\"get\"&gt;\r\n  &lt;label&gt;\r\n    N\r\n    &lt;input type=\"number\" name=\"n\" placeholder=\"e.g. 10\" required&gt;\r\n  &lt;\/label&gt;\r\n  &lt;button&gt;Find Prime&lt;\/button&gt;\r\n&lt;\/form&gt;\r\n\r\n&lt;% if (locals.n<mark> &amp;&amp; locals.prime<\/mark>) { %&gt;\r\n  <mark>&lt;p&gt;<\/mark>\r\n    <mark>The largest prime number less than or equal to &lt;%= n %&gt; is &lt;strong&gt;&lt;%= prime %&gt;&lt;\/strong&gt;.<\/mark>\r\n  <mark>&lt;\/p&gt;<\/mark>\r\n&lt;% } %&gt;\r\n...\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u4eca\u3001\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u3001\u4efb\u610f\u306e\u6570\u5b57\u3092\u9001\u4fe1\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3068\u3057\u3066\u3001\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f10\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3082\u305710\u3092\u9001\u4fe1\u3059\u308b\u3068\u300110\u4ee5\u4e0b\u306e\u6700\u5927\u306e\u7d20\u6570\u306f7\u3067\u3042\u308b\u3068\u3044\u3046\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306f\u3001\u4eca\u3084\u6570\u5b57\u3092\u53d7\u3051\u53d6\u308a\u3001\u7d20\u6570\u3092\u691c\u7d22\u3057\u3066\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306b\u3001\u3044\u3044\u306d\u30dc\u30bf\u30f3\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<h3>\u300c\u3044\u3044\u306d\u30dc\u30bf\u30f3\u300d\u306e\u8ffd\u52a0<\/h3>\n<p>\u73fe\u5728\u3001\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306f\u3001\u9001\u4fe1\u3055\u308c\u305f\u5404\u6570\u5024N\u306b\u57fa\u3065\u3044\u3066\u7570\u306a\u308b\u30d3\u30e5\u30fc\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30c6\u30ad\u30b9\u30c8\u306e\u66f4\u65b0\u4ee5\u5916\u306b\u3082\u3001\u305d\u308c\u3089\u306e\u30d3\u30e5\u30fc\u306e\u5185\u5bb9\u306f\u304a\u305d\u3089\u304f\u540c\u3058\u307e\u307e\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u8ffd\u52a0\u3059\u308b\u300c\u3044\u3044\u306d\u300d\u30dc\u30bf\u30f3\u306f\u3001\u30d3\u30e5\u30fc\u306e\u5185\u5bb9\u3092\u66f4\u65b0\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u306e\u30dc\u30bf\u30f3\u306f\u3001\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u5f8c\u534a\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u969b\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d3\u30e5\u30fc\u306e\u5185\u5bb9\u304c\u5909\u66f4\u3055\u308c\u305f\u5834\u5408\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u7121\u52b9\u5316\u3059\u308b\u5fc5\u8981\u6027\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u300c\u3044\u3044\u306d\u300d\u30dc\u30bf\u30f3\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u306e\u30a2\u30d7\u30ea\u306f\u300c\u3044\u3044\u306d\u300d\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u5834\u6240\u304c\u5fc5\u8981\u3067\u3059\u3002\u6c38\u7d9a\u7684\u306a\u4fdd\u5b58\u304c\u7406\u60f3\u7684\u3067\u3059\u304c\u3001\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u7bc4\u56f2\u5916\u306e\u305f\u3081\u3001\u30c7\u30fc\u30bf\u306f\u30e1\u30e2\u30ea\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30c7\u30fc\u30bf\u306f\u4e00\u6642\u7684\u3067\u3042\u308a\u3001\u30b5\u30fc\u30d0\u30fc\u304c\u505c\u6b62\u3059\u308b\u3068\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u304c\u5931\u308f\u308c\u307e\u3059\u3002<\/p>\n<p>server.js\u3092\u958b\u3044\u3066\u3001\u4e0b\u8a18\u306e\u5909\u6570\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'view engine'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'ejs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token comment\"><mark>\/**<\/mark>\r\n<mark> * Key is `n`<\/mark>\r\n<mark> * Value is the number of 'likes' for `n`<\/mark>\r\n<mark> *\/<\/mark><\/span>\r\n<mark><span class=\"token keyword\">const<\/span> likesMap <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u6570\u5b57\u306b\u5bfe\u3057\u3066\u3001\u3044\u3044\u306d\u306e\u6570\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u3001likesMap\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u30de\u30c3\u30d7\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u30ad\u30fc\u306fn\u3067\u3042\u308a\u3001\u305d\u306e\u5024\u306fn\u306b\u5bfe\u3059\u308b\u3044\u3044\u306d\u306e\u6570\u3067\u3059\u3002<\/p>\n<p>\u65e5\u672c\u8a9e\u3067\u306e\u30d1\u30e9\u30d5\u30ec\u30fc\u30ba\uff1a<br \/>\n\u6570\u306b\u5bfe\u3059\u308b\u3044\u3044\u306d\u306f\u3001\u6570\u304c\u63d0\u51fa\u3055\u308c\u305f\u6642\u306b\u521d\u671f\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001server.js\u306b\u306f\u3001N\u306b\u5bfe\u3059\u308b\u3044\u3044\u306d\u3092\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306e\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc\u306ejs\u30d5\u30a1\u30a4\u30eb<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\n  <span class=\"token keyword\">const<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <mark><span class=\"token comment\">\/\/ Initialize likes for this number when necessary<\/span><\/mark>\r\n  <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n<span class=\"token punctuation\">,<\/span> prime <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u306eif\u6587\u306f\u3001\u73fe\u5728\u306e\u6570\u306e\u3044\u3044\u306d\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u3082\u3057\u3044\u3044\u306d\u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001likesMaps\u306e\u6570\u30920\u306b\u521d\u671f\u5316\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001view\u306b\u300clikes\u300d\u3068\u3044\u3046\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\n  <span class=\"token keyword\">const<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token comment\">\/\/ Initialize likes for this number when necessary<\/span>\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n<span class=\"token punctuation\">,<\/span> prime<mark><span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">likes<\/span><span class=\"token operator\">:<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><\/mark> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d3\u30e5\u30fc\u304c\u3044\u3044\u306d\u306e\u30c7\u30fc\u30bf\u3092\u6301\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u305d\u306e\u5024\u3092\u8868\u793a\u3057\u3001\u3044\u3044\u306d\u30dc\u30bf\u30f3\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>views\/index.ejs\u306b\u306f\u3001\u30e9\u30a4\u30af\u30dc\u30bf\u30f3\u306e\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30d3\u30e5\u30fc\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.ejs<\/div>\n<pre class=\"post-pre\"><code>...\r\n\r\n&lt;% if (locals.n &amp;&amp; locals.prime) { %&gt;\r\n  &lt;p&gt;\r\n    The largest prime number less than or equal to &lt;%= n %&gt; is &lt;strong&gt;&lt;%= prime %&gt;&lt;\/strong&gt;.\r\n  &lt;\/p&gt;\r\n\r\n  <mark>&lt;form action=\"\/like\" method=\"get\"&gt;<\/mark>\r\n    <mark>&lt;input type=\"hidden\" name=\"n\" value=\"&lt;%= n %&gt;\"&gt;<\/mark>\r\n    <mark>&lt;input type=\"submit\" value=\"Like\"&gt; &lt;%= likes %&gt;<\/mark>\r\n  <mark>&lt;\/form&gt;<\/mark>\r\n&lt;% } %&gt;\r\n...\r\n<\/code><\/pre>\n<p>\u3042\u306a\u305f\u306e\u5b8c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u4ee5\u4e0b\u3068\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div>\u30d3\u30e5\u30fc\/\u30a4\u30f3\u30c7\u30c3\u30af\u30b9.ejs<\/div>\n<pre class=\"post-pre\"><code>&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"en\"&gt;\r\n  &lt;head&gt;\r\n    &lt;meta charset=\"utf-8\"&gt;\r\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\r\n    &lt;title&gt;Find the largest prime number&lt;\/title&gt;\r\n  &lt;\/head&gt;\r\n  &lt;body&gt;\r\n    &lt;h1&gt;Find the largest prime number&lt;\/h1&gt;\r\n\r\n    &lt;p&gt;\r\n      For any number N, find the largest prime number less than or equal to N.\r\n    &lt;\/p&gt;\r\n\r\n    &lt;form action=\"\/\" method=\"get\"&gt;\r\n      &lt;label&gt;\r\n        N\r\n        &lt;input type=\"number\" name=\"n\" placeholder=\"e.g. 10\" required&gt;\r\n      &lt;\/label&gt;\r\n      &lt;button&gt;Find Prime&lt;\/button&gt;\r\n    &lt;\/form&gt;\r\n\r\n    &lt;% if (locals.n &amp;&amp; locals.prime) { %&gt;\r\n      &lt;p&gt;\r\n        The largest prime number less than or equal to &lt;%= n %&gt; is &lt;strong&gt;&lt;%= prime %&gt;&lt;\/strong&gt;.\r\n      &lt;\/p&gt;\r\n      &lt;form action=\"\/like\" method=\"get\"&gt;\r\n        &lt;input type=\"hidden\" name=\"n\" value=\"&lt;%= n %&gt;\"&gt;\r\n        &lt;input type=\"submit\" value=\"Like\"&gt; &lt;%= likes %&gt;\r\n      &lt;\/form&gt;\r\n    &lt;% } %&gt;\r\n  &lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3001\u305d\u306e\u5f8c\u6570\u5b57\u3092\u63d0\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7d20\u6570\u306e\u7d50\u679c\u304c\u51fa\u305f\u5f8c\u306b\u300c\u3044\u3044\u306d\u300d\u30dc\u30bf\u30f3\u304c\u8868\u793a\u3055\u308c\u3001\u305d\u306e\u300c\u3044\u3044\u306d\u300d\u306e\u6570\u306f0\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/107-0.png\" alt=\"A screencapture of the page with a box around the newly added Like button\" \/><\/div>\n<p>Like\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u73fe\u5728\u306eN\u306e\u5024\u304c\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3068\u3057\u3066\u96a0\u308c\u305f\u5165\u529b\u7d4c\u7531\u3067\/like\u3078GET\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002\u73fe\u6642\u70b9\u3067\u306f\u3001\u5bfe\u5fdc\u3059\u308b\u30eb\u30fc\u30c8\u304c\u307e\u3060\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001404\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\/like\u306b\u5bfe\u3059\u308bGET\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<p>\u4eca\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>server.js\u306b\u623b\u3063\u3066\u3001\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc\u30d5\u30a1\u30a4\u30eb.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token operator\">...<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<mark>app<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/like'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n  <mark><span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark>res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n    <mark><span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><\/mark>\r\n\r\n  <mark>likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <mark>res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">\/?n=<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>n<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u3067\u306f\u3001n\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u30db\u30fc\u30e0\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f\u3001\u3053\u306e\u6570\u5024\u306e\u300c\u3044\u3044\u306d\u300d\u3092\u5897\u3084\u3057\u307e\u3059\u3002\u6700\u5f8c\u306b\u3001\u300c\u3044\u3044\u306d\u300d\u30dc\u30bf\u30f3\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u30d3\u30e5\u30fc\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u304c\u5b8c\u6210\u3055\u305b\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u4ee5\u4e0b\u306e\u5185\u5bb9\u3068\u4e00\u81f4\u3057\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> findPrime <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/utils\/findPrime'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> app <span class=\"token operator\">=<\/span> <span class=\"token function\">express<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'view engine'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'ejs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token comment\">\/**\r\n * Key is `n`\r\n * Value is the number of 'likes' for `n`\r\n *\/<\/span>\r\n<span class=\"token keyword\">const<\/span> likesMap <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n  \r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n  \r\n  <span class=\"token keyword\">const<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token comment\">\/\/ Initialize likes for this number when necessary<\/span>\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n<span class=\"token punctuation\">,<\/span> prime<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">likes<\/span><span class=\"token operator\">:<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/like'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n\r\n  likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">\/?n=<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>n<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> port <span class=\"token operator\">=<\/span> process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">.<\/span><span class=\"token constant\">PORT<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">;<\/span>\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">listen<\/span><span class=\"token punctuation\">(<\/span>port<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span>\r\n  console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">Example app is listening on port <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>port<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">.<\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u3092\u518d\u8d77\u52d5\u3057\u3066\u3001\u3044\u3044\u306d\u30dc\u30bf\u30f3\u3092\u3082\u3046\u4e00\u5ea6\u30c6\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30af\u30ea\u30c3\u30af\u3059\u308b\u305f\u3073\u306b\u3044\u3044\u306d\u6570\u304c\u5897\u3048\u307e\u3059\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u3053\u306e\u30eb\u30fc\u30c8\u3067\u306f\u3001GET\u306e\u4ee3\u308f\u308a\u306bPOST\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u30ea\u30bd\u30fc\u30b9\u306b\u66f4\u65b0\u304c\u884c\u308f\u308c\u308b\u305f\u3081\u3001\u3088\u308aRESTful\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u3044\u6163\u308c\u305f\u72b6\u614b\u3067\u4f5c\u696d\u3067\u304d\u308b\u3088\u3046\u306b\u3001\u30d5\u30a9\u30fc\u30e0\u306ePOST\u30ea\u30af\u30a8\u30b9\u30c8\u30dc\u30c7\u30a3\u306e\u51e6\u7406\u3092\u5c0e\u5165\u305b\u305a\u306bGET\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/div>\n<\/div>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306f\u3001\u5b8c\u5168\u306b\u6a5f\u80fd\u3059\u308b\u6a5f\u80fd\u3092\u5099\u3048\u305f\u72b6\u614b\u3067\u3059\u306e\u3067\u3001App Platform\u306b\u5c55\u958b\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001git\u3067\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3001\u305d\u306e\u30b3\u30fc\u30c9\u3092GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d73 \u2014 \u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u306e\u305f\u3081\u306e\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u6301\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u30b3\u30fc\u30c9\u3092git\u306b\u30b3\u30df\u30c3\u30c8\u3057\u3001\u6b21\u306bGitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002App Platform\u3068\u4e00\u7dd2\u306b\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u5c55\u958b\u3057\u307e\u3059\u3002<\/p>\n<h3>Git\u306b\u30b3\u30fc\u30c9\u3092\u30b3\u30df\u30c3\u30c8\u3059\u308b<\/h3>\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30b3\u30fc\u30c9\u3092Git\u306b\u30b3\u30df\u30c3\u30c8\u3057\u3066\u3001GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u6e96\u5099\u3092\u3057\u307e\u3059\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f: \u30e6\u30fc\u30b6\u30fc\u540d\u3067\u8a2d\u5b9a\u304c\u884c\u308f\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001Git\u3092\u8a2d\u5b9a\u3057\u3001GitHub\u30a2\u30ab\u30a6\u30f3\u30c8\u3092SSH\u3067\u8a8d\u8a3c\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/div>\n<\/div>\n<p>\u6700\u521d\u306b\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u521d\u671f\u5316\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> init<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001Git\u306b\u30a2\u30d7\u30ea\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u9664\u5916\u3059\u308b\u3088\u3046\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u300c.gitignore\u300d\u3092\u4f5c\u6210\u3057\u3001\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>.gitignore \u3092\u65e5\u672c\u8a9e\u3067\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059: \u300c.gitignore \u30d5\u30a1\u30a4\u30eb\u300d<\/div>\n<pre class=\"post-pre\"><code>node_modules\r\n\r\n# macOS file\r\n.DS_Store\r\n<\/code><\/pre>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a.DS_Store\u306e\u884c\u306fmacOS\u306b\u7279\u6709\u3067\u3042\u308a\u3001\u4ed6\u306e\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u7701\u7565\u3067\u304d\u307e\u3059\u3002<\/div>\n<\/div>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u9589\u3058\u308b\u3002<\/p>\n<p>\u4eca\u3001\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092Git\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6700\u5f8c\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u5909\u66f4\u3092\u78ba\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">&#8220;<mark>Initial commit<\/mark>&#8220;<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>-m\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u30b3\u30df\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6307\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u597d\u304d\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u3067\u66f4\u65b0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30b3\u30fc\u30c9\u3092\u30b3\u30df\u30c3\u30c8\u3057\u305f\u5f8c\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u51fa\u529b\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>[main (root-commit) deab84e] Initial commit 6 files changed, 1259 insertions(+) create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server.js create mode 100644 utils\/findPrime.js create mode 100644 views\/index.ejs<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306f\u30b3\u30fc\u30c9\u3092Git\u306b\u30b3\u30df\u30c3\u30c8\u3057\u307e\u3057\u305f\u3002\u6b21\u306bGitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002<\/p>\n<h3>GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b<\/h3>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u304cgit\u306b\u30b3\u30df\u30c3\u30c8\u3055\u308c\u305f\u306e\u3067\u3001GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u5f8c\u3001Silicon Cloud App Platform\u3068\u30b3\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3001\u5c55\u958b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001\u30d6\u30e9\u30a6\u30b6\u3067GitHub\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3001express-memcache\u3068\u3044\u3046\u65b0\u3057\u3044\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002README\u3001.gitignore\u3001\u307e\u305f\u306f\u30e9\u30a4\u30bb\u30f3\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u306a\u3044\u7a7a\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u307e\u305f\u306f\u30d1\u30d6\u30ea\u30c3\u30af\u306e\u3069\u3061\u3089\u304b\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002GitHub\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3082\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u623b\u308a\u3001\u65b0\u3057\u304f\u4f5c\u6210\u3057\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30ea\u30e2\u30fc\u30c8\u306eorigin\u3068\u3057\u3066\u8ffd\u52a0\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> remote <span class=\"token function\">add<\/span> origin https:\/\/github.com\/<mark>your_username<\/mark>\/express-memcache.git<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306fGit\u306b\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3092\u300c\u30e1\u30a4\u30f3\u300d\u3068\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> branch <span class=\"token parameter variable\">-M<\/span> main<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6700\u7d42\u7684\u306b\u3001\u30b3\u30fc\u30c9\u3092\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> push <span class=\"token parameter variable\">-u<\/span> origin main<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u8868\u793a\u3055\u308c\u305f\u3089\u3001\u8cc7\u683c\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n(Puronputo ga hy\u014dji saretara, shikaku j\u014dh\u014d o ny\u016bryoku shite kudasai.)<\/p>\n<p>\u6b21\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Enumerating objects: 10, done. Counting objects: 100% (10\/10), done. Delta compression using up to 8 threads Compressing objects: 100% (7\/7), done. Writing objects: 100% (10\/10), 9.50 KiB | 9.50 MiB\/s, done. Total 10 (delta 0), reused 0 (delta 0), pack-reused 0 To https:\/\/github.com\/<mark>your_username<\/mark>\/express-memcache.git * [new branch] main -&gt; main Branch &#8216;main&#8217; set up to track remote branch &#8216;main&#8217; from &#8216;origin&#8217;.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u306f\u3001App Platform\u306b\u3088\u3063\u3066\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u6e96\u5099\u304c\u6574\u3044\u3001\u73fe\u5728GitHub\u4e0a\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d74-\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3078\u306e\u5c55\u958b<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001Express\u30a2\u30d7\u30ea\u3092Silicon Cloud App Platform\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002App Platform\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u3001GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3057\u3001\u305d\u308c\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u74b0\u5883\u8a2d\u5b9a\u3092\u66f4\u65b0\u3057\u3001\u8a2d\u5b9a\u304cPORT\u74b0\u5883\u30e9\u30d9\u30eb\u304b\u3089\u8aad\u307f\u53d6\u308c\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<h3>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u74b0\u5883\u8a2d\u5b9a\u3092\u66f4\u65b0\u3059\u308b<\/h3>\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Express\u30b5\u30fc\u30d0\u30fc\u3092\u62e1\u5f35\u3057\u3066\u3001\u30a2\u30d7\u30ea\u306e\u30dd\u30fc\u30c8\u69cb\u6210\u3092\u74b0\u5883\u5909\u6570\u304b\u3089\u8aad\u307f\u8fbc\u3080\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u8a2d\u5b9a\u306f\u5c55\u958b\u3054\u3068\u306b\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u3053\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u306fApp Platform\u74b0\u5883\u304b\u3089\u30dd\u30fc\u30c8\u3092\u8aad\u307f\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30a8\u30c7\u30a3\u30bf\u3067\u30d5\u30a1\u30a4\u30ebserver.js\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u756a\u4e0b\u306b\u79fb\u52d5\u3057\u3066\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u3066\u3044\u308b\u30b3\u30fc\u30c9\u3092\u66f4\u65b0\u3057\u3066\u3001\u73fe\u5728\u306eapp.listen\u306e\u884c\u3092\u7f6e\u304d\u63db\u3048\u3001\u65b0\u3057\u3044const port\u306e\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\n<mark><span class=\"token keyword\">const<\/span> port <span class=\"token operator\">=<\/span> process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">.<\/span><span class=\"token constant\">PORT<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">listen<\/span><span class=\"token punctuation\">(<\/span><mark>port<\/mark><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span>\r\n  <mark>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">Example app is listening on port <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>port<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">.<\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<\/code><\/pre>\n<p>\u3082\u3057PORT\u74b0\u5883\u5909\u6570\u304c\u5b58\u5728\u3059\u308c\u3070\u3001\u3053\u306e\u30b3\u30fc\u30c9\u306f\u305d\u308c\u3092\u4f7f\u7528\u3057\u3001\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30dd\u30fc\u30c83000\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u3001\u4eca\u5f8c\u3001\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u74b0\u5883\u304b\u3089\u30dd\u30fc\u30c8\u3092\u8aad\u307f\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3>\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u3001App Platform\u306b\u5c55\u958b\u3059\u308b\u3002<\/h3>\n<p>App Platform\u3067\u30a2\u30d7\u30ea\u3092\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<div class=\"post-conf-info\">\n<p class=\"post-conf-desc\">Info<\/p>\n<div>App Platform\u3067\u3053\u306e\u30a2\u30d7\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3068\u6599\u91d1\u304c\u767a\u751f\u3057\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306f\u79d2\u5358\u4f4d\u3067\u8acb\u6c42\u3055\u308c\u307e\u3059\uff08\u6700\u5c0f\u6599\u91d1\u306f1\u5206\u304b\u3089\uff09\u3002\u6599\u91d1\u306f\u30ec\u30d3\u30e5\u30fc\u753b\u9762\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306fApp Platform\u306e\u6599\u91d1\u30da\u30fc\u30b8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/div>\n<\/div>\n<p>\u6700\u521d\u306b\u3001Silicon Cloud\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30a2\u30d7\u30ea\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u304b\u3089\u3001\u300c\u4f5c\u6210\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u300c\u30a2\u30d7\u30ea\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u307e\u305f\u3001App Platform\u3067\u306e\u30a2\u30d7\u30ea\u306e\u4f5c\u6210\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u5f53\u793e\u306e\u88fd\u54c1\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u5f93\u3046\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u300c\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304b\u3089\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u3059\u308b\u300d\u753b\u9762\u3067\u3001\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u3057\u3066GitHub\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6b21\u306b\u3001Silicon Cloud\u304c\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u6a29\u9650\u3092\u4e0e\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u307f\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3067\u3059\u3002\u307e\u3060\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001Silicon Cloud GitHub\u30a2\u30d7\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u4fc3\u3055\u308c\u307e\u3059\u3002\u4e00\u89a7\u304b\u3089\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u9078\u629e\u3057\u3001\u6b21\u3078\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30ea\u30bd\u30fc\u30b9\u753b\u9762\u3067\u3001\u300c\u30d7\u30e9\u30f3\u306e\u7de8\u96c6\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u3042\u306a\u305f\u306e\u30d7\u30e9\u30f3\u30b5\u30a4\u30ba\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u6700\u5c0f\u30b5\u30a4\u30ba\u306eWeb\u30b5\u30fc\u30d3\u30b9\uff08512 MB RAM | 1 vCPU\uff09\u3092\u4f7f\u7528\u3057\u3066\u30a8\u30af\u30b9\u30d7\u30ec\u30b9\u30e1\u30e2\u30ad\u30e3\u30c3\u30b7\u30e5\u30ea\u30bd\u30fc\u30b9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u57fa\u672c\u30d7\u30e9\u30f3\u3068\u6700\u5c0f\u306eWeb\u30b5\u30fc\u30d3\u30b9\u3067\u3001\u3053\u306e\u30b5\u30f3\u30d7\u30eb\u30a8\u30af\u30b9\u30d7\u30ec\u30b9\u30a2\u30d7\u30ea\u306b\u5341\u5206\u306a\u30ea\u30bd\u30fc\u30b9\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u30d7\u30e9\u30f3\u3092\u8a2d\u5b9a\u3057\u305f\u3089\u3001\u300c\u623b\u308b\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b\u3001\u5de6\u5074\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u3067\u300c\u60c5\u5831\u300d\u30bf\u30d6\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u30a2\u30d7\u30ea\u304c\u5c5e\u3057\u3066\u3044\u308b\u5730\u57df\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3067MemCachier\u306eSilicon Cloud Marketplace\u30a2\u30c9\u30aa\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u969b\u306b\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u3001Review\u30bf\u30d6\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u6b21\u306bCreate Resources\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30a2\u30d7\u30ea\u3092\u30d3\u30eb\u30c9\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u30d3\u30eb\u30c9\u306b\u306f\u5c11\u3057\u6642\u9593\u304c\u304b\u304b\u308b\u3067\u3057\u3087\u3046\u3002\u5b8c\u4e86\u3057\u305f\u3089\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30a2\u30d7\u30ea\u3078\u306e\u30ea\u30f3\u30af\u304c\u542b\u307e\u308c\u305f\u6210\u529f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u307e\u3067\u306b\u3001\u7d20\u6570\u3092\u898b\u3064\u3051\u308bExpress\u30a2\u30d7\u30ea\u3068\u3044\u3044\u306d\u30dc\u30bf\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u3092Git\u306b\u30b3\u30df\u30c3\u30c8\u3057\u3066GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3001\u305d\u308c\u304b\u3089App Platform\u3067\u30a2\u30d7\u30ea\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>Express\u30a2\u30d7\u30ea\u3092\u3088\u308a\u9ad8\u901f\u304b\u3064\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306b\u3059\u308b\u305f\u3081\u306b\u30013\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002\u6b21\u306e\u624b\u9806\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d75 &#8211; MemCachier\u3092\u4f7f\u7528\u3057\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8a2d\u5b9a\u3059\u308b<\/h2>\n<p>\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f5c\u6210\u304a\u3088\u3073\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001memcached\u4e92\u63db\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u5fc5\u8981\u3067\u3059\u3002Silicon Cloud Marketplace\u304b\u3089MemCachier\u30a2\u30c9\u30aa\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002MemCachier\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u30a4\u30f3\u30e1\u30e2\u30ea\u306e\u30ad\u30fc\u30d0\u30ea\u30e5\u30fc\u30b9\u30c8\u30a2\u3067\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001Silicon Cloud Marketplace\u304b\u3089MemCachier\u30a2\u30c9\u30aa\u30f3\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002MemCachier\u30a2\u30c9\u30aa\u30f3\u306e\u30da\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001[MemCachier\u3092\u8ffd\u52a0]\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u6b21\u306e\u753b\u9762\u3067\u3001\u524d\u3082\u3063\u3066\u30e1\u30e2\u3057\u305fApp Platform\u30a2\u30d7\u30ea\u306e\u5730\u57df\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u30a2\u30d7\u30ea\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u540c\u3058\u5730\u57df\u306b\u914d\u7f6e\u3059\u308b\u3053\u3068\u3067\u3001\u9045\u5ef6\u3092\u3067\u304d\u308b\u3060\u3051\u4f4e\u304f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3082\u3057\u5730\u57df\u3092\u518d\u5ea6\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308c\u3070\u3001App Platform\u30a2\u30d7\u30ea\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4efb\u610f\u3067\u30d7\u30e9\u30f3\u3092\u9078\u629e\u3057\u3001[MemCachier\u3092\u8ffd\u52a0]\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u307e\u3059\u3002<\/p>\n<div class=\"post-conf-info\">\n<p class=\"post-conf-desc\">Info<\/p>\n<div>\u5730\u57df\u540d\u304b\u3089\u30b9\u30e9\u30c3\u30b0\u3078\u306e\u5bfe\u5fdc\u8868\u3092\u628a\u63e1\u3059\u308b\u306b\u306f\u3001Silicon Cloud\u306e\u5229\u7528\u53ef\u80fd\u306a\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3068\u3048\u3070\u3001\u5730\u57df\u306e\u540d\u524dSan Francisco\u306fsfo3\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/div>\n<\/div>\n<p>\u6b21\u306b\u3001\u30a8\u30af\u30b9\u30d7\u30ec\u30b9\u30a2\u30d7\u30ea\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u69cb\u6210\u3057\u307e\u3059\u3002\u30a2\u30c9\u30aa\u30f3\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001MemCachier\u30a2\u30c9\u30aa\u30f3\u306e\u540d\u524d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3092\u958b\u304d\u307e\u3059\u3002MemCachier\u30a2\u30c9\u30aa\u30f3\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3067\u3001\u69cb\u6210\u5909\u6570\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u300c\u8868\u793a\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001MEMCACHIER_USERNAME\u3001MEMCACHIER_PASSWORD\u3001\u304a\u3088\u3073MEMCACHIER_SERVERS\u306e\u5024\u304c\u8868\u793a\u3055\u308c\u308b\u753b\u9762\u3092\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5024\u3092\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u6b21\u306b\u3053\u308c\u3089\u306e\u5024\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/180-0.png\" alt=\"Screencapture of redacted values for configuration variables in the Add-Ons dashboard\" \/><\/div>\n<p>\u4eca\u5f8c\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u305f\u3081\u306bMemCachier\u306e\u8a2d\u5b9a\u5909\u6570\u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002App Platform\u30a2\u30d7\u30ea\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u623b\u308a\u3001[\u8a2d\u5b9a]\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u6b21\u306b\u3001[\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8]\u306e\u4e0b\u306b\u3042\u308b[express-memc&#8230;]\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u74b0\u5883\u5909\u6570\u30bb\u30af\u30b7\u30e7\u30f3\u307e\u3067\u30b9\u30af\u30ed\u30fc\u30eb\u3057\u3001[\u7de8\u96c6]\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001MemCachier\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u304b\u3089\u53d6\u5f97\u3057\u305f3\u3064\u306e\u30ad\u30fc\uff08MEMCACHIER_USERNAME\u3001MEMCACHIER_PASSWORD\u3001MEMCACHIER_SERVERS\uff09\u3068\u305d\u308c\u306b\u5bfe\u5fdc\u3059\u308b\u5024\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002MEMCACHIER_PASSWORD\u306e\u5834\u5408\u306f\u3001\u5024\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u3042\u308b\u306e\u3067\u3001[\u6697\u53f7\u5316]\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30a2\u30d7\u30ea\u3092\u66f4\u65b0\u3059\u308b\u305f\u3081\u306b[\u4fdd\u5b58]\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/182-0.png\" alt=\"Screencapture of App Platform configuration window for environment variables\" \/><\/div>\n<p>\u3067\u306f\u3001Express\u30a2\u30d7\u30ea\u3067\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066memcache\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u901a\u4fe1\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u901a\u308a\u3001\u30bf\u30fc\u30df\u30ca\u30eb\u3067memjs\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">npm<\/span> <span class=\"token function\">install<\/span> memjs<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u6b21\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u308c\u304b\u3089\u3001services\/memcache.js\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u30a8\u30c7\u30a3\u30bf\u3067\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u30d5\u30a1\u30a4\u30eb\u306e\u5148\u982d\u306b\u3001memjs\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d3\u30b9\/ memcache.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> Client <span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'memjs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\nmodule<span class=\"token punctuation\">.<\/span>exports <span class=\"token operator\">=<\/span> Client<span class=\"token punctuation\">.<\/span><span class=\"token function\">create<\/span><span class=\"token punctuation\">(<\/span>process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">.<\/span><span class=\"token constant\">MEMCACHIER_SERVERS<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token literal-property property\">failover<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token literal-property property\">timeout<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token literal-property property\">keepAlive<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306f\u3001MemCachier\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066\u3001\u30d5\u30a7\u30a4\u30eb\u30aa\u30fc\u30d0\u30fc\u3092true\u306b\u8a2d\u5b9a\u3057\u3066MemCachier\u306e\u9ad8\u53ef\u7528\u6027\u30af\u30e9\u30b9\u30bf\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u304c\u30c0\u30a6\u30f3\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u30b5\u30fc\u30d0\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u30ad\u30fc\u306b\u5bfe\u3059\u308b\u30b3\u30de\u30f3\u30c9\u306f\u3001\u81ea\u52d5\u7684\u306b\u6b21\u306e\u5229\u7528\u53ef\u80fd\u306a\u30b5\u30fc\u30d0\u306b\u9001\u3089\u308c\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30a2\u30d7\u30ea\u306b\u306f\u30010.5\u79d2\u3067\u306f\u306a\u304f1\u79d2\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u304c\u3088\u308a\u9069\u3057\u3066\u3044\u307e\u3059\u3002keepAlive: true\u306f\u3001\u63a5\u7d9a\u3092\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u3057\u3066\u3082\u30ad\u30e3\u30c3\u30b7\u30e5\u3078\u306e\u63a5\u7d9a\u3092\u4fdd\u6301\u3059\u308b\u305f\u3081\u3001\u63a5\u7d9a\u3092\u78ba\u7acb\u3059\u308b\u306e\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u305f\u3081\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u52b9\u679c\u7684\u3067\u3042\u308b\u305f\u3081\u306b\u306f\u671b\u307e\u3057\u3044\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u624b\u9806\u3067\u3001Silicon Cloud Marketplace\u304b\u3089MemCachier\u30a2\u30c9\u30aa\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u307e\u3057\u305f\u3002\u6b21\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a\u3092App Platform\u306e\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u8ffd\u52a0\u3057\u3001memjs\u3092\u4f7f\u7528\u3057\u3066\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u3067\u3001Express\u30a2\u30d7\u30ea\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u901a\u4fe1\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u6b21\u306b\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u3001Express\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u5229\u7528\u3059\u308b\u6e96\u5099\u306f\u6574\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30c6\u30c3\u30d76 &#8211; MemCachier\u3092\u4f7f\u7528\u3057\u305fExpress\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5b9f\u88c5<\/h2>\n<p>Express\u30a2\u30d7\u30ea\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier Add-On\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u305f\u3089\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u624b\u9806\u3067\u306f\u30013\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u30ea\u30bd\u30fc\u30b9\u96c6\u4e2d\u578b\u306e\u8a08\u7b97\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u4f7f\u7528\u901f\u5ea6\u3068\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002\u6b21\u306b\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u5165\u529b\u5f8c\u306b\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u88c5\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u51e6\u7406\u3092\u6539\u5584\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u8d85\u3048\u3066\u30a2\u30d7\u30ea\u3092\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3059\u308b\u305f\u3081\u306b\u3001\u77ed\u5bff\u547d\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<h3>\u9ad8\u8ca0\u8377\u306a\u8a08\u7b97\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3002<\/h3>\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30a2\u30d7\u30ea\u306e\u9ad8\u8ca0\u8377\u306e\u8a08\u7b97\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u51e6\u7406\u3092\u9ad8\u901f\u5316\u3057\u3001\u3088\u308a\u52b9\u7387\u7684\u306aCPU\u4f7f\u7528\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002findPrime\u95a2\u6570\u306f\u3001\u5341\u5206\u306b\u5927\u304d\u306a\u6570\u5024\u304c\u5165\u529b\u3055\u308c\u305f\u5834\u5408\u306b\u9ad8\u8ca0\u8377\u306e\u8a08\u7b97\u3068\u306a\u308a\u307e\u3059\u3002\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u8a08\u7b97\u3092\u7e70\u308a\u8fd4\u3055\u305a\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5024\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u521d\u306b\u3001memcache\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306bserver.js\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> findPrime <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/utils\/findPrime'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<mark><span class=\"token keyword\">const<\/span> memcache <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/services\/memcache'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u305d\u306e\u5f8c\u3001\u8a08\u7b97\u3055\u308c\u305f\u7d20\u6570\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\n  <span class=\"token keyword\">const<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <mark><span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token string\">'prime_'<\/span> <span class=\"token operator\">+<\/span> n<span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <mark>memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> prime<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">expires<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>set\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u6700\u521d\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u30ad\u30fc\u30012\u756a\u76ee\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u6587\u5b57\u5217\u306e\u5024\u3092\u53d6\u308a\u307e\u3059\u306e\u3067\u3001\u7d20\u6570\u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3057\u307e\u3059\u30023\u756a\u76ee\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u5f15\u6570\u306f\u3001\u683c\u7d0d\u3055\u308c\u305f\u30a2\u30a4\u30c6\u30e0\u304c\u6c7a\u3057\u3066\u671f\u9650\u5207\u308c\u306b\u306a\u3089\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u30024\u756a\u76ee\u306e\u6700\u7d42\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3067\u3042\u308a\u3001\u30a8\u30e9\u30fc\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306b\u306f\u30a8\u30e9\u30fc\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30a8\u30e9\u30fc\u306f\u4e01\u5be7\u306b\u51e6\u7406\u3059\u308b\u3079\u304d\u3067\u3059\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u30a2\u30d7\u30ea\u306e\u5411\u4e0a\u7b56\u3067\u3042\u308a\u3001\u4e00\u822c\u7684\u306b\u306f\u30a8\u30e9\u30fc\u6642\u306b\u30a2\u30d7\u30ea\u3092\u30af\u30e9\u30c3\u30b7\u30e5\u3055\u305b\u308b\u3079\u304d\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u306a\u3044\u72b6\u614b\u3067\u3082\u3001\u30a2\u30d7\u30ea\u306f\u9045\u304f\u306a\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u554f\u984c\u306a\u304f\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/div>\n<\/div>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u3053\u306e\u6642\u70b9\u3067\u306f\u3001\u30a2\u30d7\u30ea\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u305b\u305a\u306b\u30ed\u30fc\u30ab\u30eb\u3067\u52d5\u4f5c\u3057\u7d9a\u3051\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30fc\u30d0\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u305f\u3081\u3001memcache.set\u304c\u547c\u3073\u51fa\u3055\u308c\u308b\u3068\u30a8\u30e9\u30fc\u304c\u51fa\u529b\u3055\u308c\u307e\u3059\uff1a<br \/>\nOutputMemJS\uff1a\u30b5\u30fc\u30d0\u30fc\u306f\u30a8\u30e9\u30fc\u3068\u3057\u3066\uff082\u56de\u306e\uff09\u30ea\u30c8\u30e9\u30a4\u306e\u5f8c\u306b\u5931\u6557\u3057\u307e\u3057\u305f &#8211; connect ECONNREFUSED 127.0.0.1:11211<br \/>\n\u30a8\u30e9\u30fc\uff1a\u5229\u7528\u53ef\u80fd\u306a\u30b5\u30fc\u30d0\u30fc\u304c\u3042\u308a\u307e\u305b\u3093<br \/>\n&#8230;<\/div>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6b8b\u308a\u306e\u90e8\u5206\u3067\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u308c\u3092\u52d5\u4f5c\u3055\u305b\u308b\u5834\u5408\u306f\u3001memcached\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u306elocalhost:11211\u3067\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n<p>\u6b21\u306b\u3001\u5909\u66f4\u70b9\u3092\u30b9\u30c6\u30fc\u30b8\u3057\u3066\u30b3\u30df\u30c3\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">&#8220;<mark>Add memjs client and cache prime number<\/mark>&#8220;<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u305d\u308c\u304b\u3089\u3001\u3053\u308c\u3089\u306e\u5909\u66f4\u3092GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3001\u305d\u306e\u5f8c\u81ea\u52d5\u7684\u306bApp Platform\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> push<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306eApp Platform\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306f\u3001\u300c\u30c7\u30d7\u30ed\u30a4\u6e08\u307f\u300d\u3068\u8868\u793a\u3057\u3066\u3044\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u304b\u3089\u3001\u300c\u30a2\u30d7\u30ea\u304c\u30d3\u30eb\u30c9\u4e2d\u300d\u3068\u793a\u3059\u3082\u306e\u306b\u5207\u308a\u66ff\u308f\u308a\u307e\u3059\u3002\u30d3\u30eb\u30c9\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u30a2\u30d7\u30ea\u3092\u958b\u304d\u3001\u7d20\u6570\u306e\u4e2d\u3067\u6700\u5927\u306e\u6570\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306b\u6570\u5b57\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u306f\u300c\u30b5\u30fc\u30d3\u30b9\u5f85\u6a5f\u4e2d\u300d\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u901a\u5e38\u3001\u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u81ea\u52d5\u7684\u306b\u89e3\u6c7a\u3055\u308c\u307e\u3059\u304c\u3001\u89e3\u6c7a\u3057\u306a\u3044\u5834\u5408\u306f\u30a2\u30d7\u30ea\u3092\u66f4\u65b0\u3057\u3066\u30d3\u30eb\u30c9\u304c\u5c55\u958b\u3055\u308c\u305f\u304b\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/div>\n<\/div>\n<p>\u6b21\u306b\u3001\u30a2\u30c9\u30aa\u30f3\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u623b\u308a\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5206\u6790\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306b\u3001\u540d\u524d\u4ed8\u304d\u306e\u30b5\u30fc\u30d3\u30b9\u306eMemCachier\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/214-0.png\" alt=\"The MemCachier analytics dashboard\" \/><\/div>\n<p>\u3053\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3067\u306f\u3001\u30aa\u30fc\u30eb\u30bf\u30a4\u30e0\u7d71\u8a08\u30dc\u30fc\u30c9\u306e\u300c\u30bb\u30c3\u30c8\u30b3\u30de\u30f3\u30c9\u300d\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30fc\u30c9\u306e\u300c\u30a2\u30a4\u30c6\u30e0\u7d71\u8a08\u300d\u306f\u3001\u3069\u3061\u3089\u30821\u5897\u52a0\u3057\u307e\u3057\u305f\u3002\u6570\u5024\u3092\u5165\u529b\u3059\u308b\u305f\u3073\u306b\u3001\u30bb\u30c3\u30c8\u30b3\u30de\u30f3\u30c9\u3068\u30a2\u30a4\u30c6\u30e0\u306e\u4e21\u65b9\u304c\u5897\u52a0\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u7d71\u8a08\u3092\u8aad\u307f\u8fbc\u3080\u306b\u306f\u3001\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u30a2\u30d7\u30ea\u306e\u30ed\u30b0\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3053\u3068\u306f\u30c7\u30d0\u30c3\u30b0\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u30a2\u30d7\u30ea\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u304b\u3089\u300c\u30e9\u30f3\u30bf\u30a4\u30e0\u30ed\u30b0\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u8868\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/div>\n<\/div>\n<p>\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30a2\u30a4\u30c6\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30a2\u30a4\u30c6\u30e0\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u306f\u3001\u4ee5\u524d\u306e\u3088\u3046\u306b\u7d20\u6570\u3092\u898b\u3064\u3051\u307e\u3059\u3002<\/p>\n<p>server.js\u306b\u623b\u308a\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65e2\u5b58\u306e\u884c\u3092\u5909\u66f4\u3057\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u305f\u3081\u306e\u65b0\u3057\u3044\u884c\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<div>server.js\u30d5\u30a1\u30a4\u30eb\u3092\u65e5\u672c\u8a9e\u3067\u8868\u73fe\u3059\u308b\u3068\u3001\u300c\u30b5\u30fc\u30d0\u30fc.js\u300d\u3068\u306a\u308a\u307e\u3059\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n\r\n  <mark><span class=\"token keyword\">let<\/span> prime<span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token string\">'prime_'<\/span> <span class=\"token operator\">+<\/span> n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <mark>memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<span class=\"token punctuation\">,<\/span> val<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n    <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>val <span class=\"token operator\">!==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n      <mark><span class=\"token comment\">\/\/ Use the value from the cache<\/span><\/mark>\r\n      <mark><span class=\"token comment\">\/\/ Convert Buffer string before converting to number<\/span><\/mark>\r\n      <mark>prime <span class=\"token operator\">=<\/span> <span class=\"token function\">parseInt<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n    <mark><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n      <mark><span class=\"token comment\">\/\/ No cached value available, find it<\/span><\/mark>\r\n      <mark>prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n      memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> prime<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">expires<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <mark><span class=\"token punctuation\">}<\/span><\/mark>\r\n\r\n    <span class=\"token comment\">\/\/ Initialize likes for this number when necessary<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n<span class=\"token punctuation\">,<\/span> prime<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">likes<\/span><span class=\"token operator\">:<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306f\u3001prime\u3092\u521d\u671f\u5024\u306a\u3057\u3067let\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u3066\u521d\u671f\u5316\u3057\u3001\u305d\u306e\u5024\u304c\u518d\u5272\u308a\u5f53\u3066\u3055\u308c\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u6b21\u306b\u3001memcache.get\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u7d20\u6570\u3092\u53d6\u5f97\u3057\u3088\u3046\u3068\u3057\u307e\u3059\u3002\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u307b\u3068\u3093\u3069\u306e\u30b3\u30fc\u30c9\u306f\u3001memcache.get\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u5185\u306b\u5b58\u5728\u3057\u3001\u305d\u306e\u7d50\u679c\u306b\u57fa\u3065\u3044\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u51e6\u7406\u65b9\u6cd5\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5024\u304c\u5229\u7528\u53ef\u80fd\u3067\u3042\u308c\u3070\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f\u3001\u4ee5\u524d\u3068\u540c\u69d8\u306b\u7d20\u6570\u3092\u8a08\u7b97\u3057\u3001\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n<p>memcache.get\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3067\u8fd4\u3055\u308c\u308b\u5024\u306fBuffer\u3067\u3059\u306e\u3067\u3001prime\u3092\u6570\u5024\u306b\u623b\u3059\u524d\u306b\u305d\u308c\u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3057\u307e\u3059\u3002<\/p>\n<p>\u5909\u66f4\u5185\u5bb9\u3092\u78ba\u5b9a\u3057\u3001GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3066\u5c55\u958b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">&#8220;<mark>Check cache for prime number<\/mark>&#8220;<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> push<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u306b\u307e\u3060\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u3066\u3044\u306a\u3044\u756a\u53f7\u3092\u9001\u4fe1\u3059\u308b\u3068\u3001MemCachier\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u3042\u308bSet Cmds\u3001Items\u3001\u304a\u3088\u3073get misses\u306e\u7d71\u8a08\u304c1\u3064\u5897\u3048\u307e\u3059\u3002\u30df\u30b9\u304c\u767a\u751f\u3059\u308b\u306e\u306f\u3001\u30a2\u30a4\u30c6\u30e0\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u53d6\u5f97\u3057\u3088\u3046\u3068\u3059\u308b\u524d\u306b\u30bb\u30c3\u30c8\u3057\u3088\u3046\u3068\u3059\u308b\u304b\u3089\u3067\u3059\u3002\u30a2\u30a4\u30c6\u30e0\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u306b\u30df\u30b9\u304c\u767a\u751f\u3057\u3001\u305d\u306e\u5f8c\u306b\u30a2\u30a4\u30c6\u30e0\u304c\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u756a\u53f7\u3092\u9001\u4fe1\u3059\u308b\u3068\u3001get hits\u304c\u5897\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u73fe\u5728\u3001\u30ea\u30bd\u30fc\u30b9\u3092\u591a\u304f\u8981\u3059\u308b\u8a08\u7b97\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u3044\u307e\u3059\u3002\u6b21\u306b\u3001\u30a2\u30d7\u30ea\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002<\/p>\n<h3>\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/h3>\n<p>\u3053\u306e\u7bc0\u3067\u306f\u3001\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f7f\u3063\u3066Express\u30a2\u30d7\u30ea\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u524d\u306b\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3068\u3057\u3066ejs\u3092\u8a2d\u5b9a\u3057\u3001\u5404\u6570\u5b57N\u304c\u9001\u4fe1\u3055\u308c\u305f\u5834\u5408\u306b\u30d3\u30e5\u30fc\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u305f\u3081\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u306f\u30ea\u30bd\u30fc\u30b9\u3092\u591a\u304f\u6d88\u8cbb\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u305d\u308c\u3089\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u3092\u9ad8\u901f\u5316\u3057\u3001\u3088\u308a\u5c11\u306a\u3044\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u307e\u305a\u3001\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6b21\u306b\u3001middleware\/cacheView.js\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u30a8\u30c7\u30a3\u30bf\u3067\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002cacheView.js\u306b\u306f\u3001\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u6a5f\u80fd\u306e\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\/\u30ad\u30e3\u30c3\u30b7\u30e5\u30d3\u30e5\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> memcache <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'..\/services\/memcache'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token comment\">\/**\r\n * Express middleware to cache views and serve cached views\r\n *\/<\/span>\r\nmodule<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">exports<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<span class=\"token punctuation\">,<\/span> next<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">view_<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>req<span class=\"token punctuation\">.<\/span>url<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<span class=\"token punctuation\">,<\/span> val<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>val <span class=\"token operator\">!==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token comment\">\/\/ Convert Buffer string to send as the response body<\/span>\r\n      res<span class=\"token punctuation\">.<\/span><span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>\u6700\u521d\u306b\u3001\u30e1\u30e2\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u6b21\u306b\u3001view_\/?n=100 \u306e\u3088\u3046\u306a\u30ad\u30fc\u3092\u5ba3\u8a00\u3057\u307e\u3059\u3002\u6b21\u306b\u3001memcache.get \u3092\u4f7f\u7528\u3057\u3066\u3001\u305d\u306e\u30ad\u30fc\u306e\u30d3\u30e5\u30fc\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u5b58\u5728\u3059\u308b\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30a8\u30e9\u30fc\u304c\u306a\u304f\u3001\u305d\u306e\u30ad\u30fc\u306b\u5bfe\u3059\u308b\u5024\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u30d3\u30e5\u30fc\u3092\u8fd4\u3059\u305f\u3081\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u8868\u793a\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u305f\u3081\u306b\u306f\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066res.send\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\/cacheView.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\nmodule<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">exports<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<span class=\"token punctuation\">,<\/span> next<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">view_<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>req<span class=\"token punctuation\">.<\/span>url<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<span class=\"token punctuation\">,<\/span> val<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>val <span class=\"token operator\">!==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token comment\">\/\/ Convert Buffer to UTF-8 string to send as the response body<\/span>\r\n      res<span class=\"token punctuation\">.<\/span><span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <mark><span class=\"token keyword\">const<\/span> originalSend <span class=\"token operator\">=<\/span> res<span class=\"token punctuation\">.<\/span>send<span class=\"token punctuation\">;<\/span><\/mark>\r\n    <mark>res<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">send<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">body<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n      <mark>memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> body<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">expires<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n        <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n      <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n      <mark><span class=\"token function\">originalSend<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">call<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">,<\/span> body<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n    <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>\u901a\u5e38\u901a\u308a\u3001\u30aa\u30ea\u30b8\u30ca\u30eb\u306esend\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u524d\u306b\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\u3059\u308b\u95a2\u6570\u3067\u3001res.send\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u3059\u3002call\u3092\u4f7f\u7528\u3057\u3066\u3001\u30aa\u30ea\u30b8\u30ca\u30eb\u306esend\u95a2\u6570\u3092\u547c\u3073\u51fa\u3057\u3001\u3053\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306e\u3082\u306e\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u6b63\u3057\u3044this\u5024\u304c\u6307\u5b9a\u3055\u308c\u308b\u3088\u3046\u3001\u7121\u540d\u95a2\u6570\u5f0f\uff08\u30a2\u30ed\u30fc\u95a2\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u3001\u5236\u5fa1\u3092\u6b21\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306b\u6e21\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\/cacheView.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\n<span class=\"token comment\">\/**\r\n * Express middleware to cache views and serve cached views\r\n *\/<\/span>\r\nmodule<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">exports<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<span class=\"token punctuation\">,<\/span> next<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">view_<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>req<span class=\"token punctuation\">.<\/span>url<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<span class=\"token punctuation\">,<\/span> val<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>val <span class=\"token operator\">!==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token comment\">\/\/ Convert Buffer to UTF-8 string to send as the response body<\/span>\r\n      res<span class=\"token punctuation\">.<\/span><span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <span class=\"token keyword\">const<\/span> originalSend <span class=\"token operator\">=<\/span> res<span class=\"token punctuation\">.<\/span>send<span class=\"token punctuation\">;<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">send<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">body<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> body<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">expires<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n      <span class=\"token function\">originalSend<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">call<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">,<\/span> body<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <mark><span class=\"token function\">next<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u6b21\u3092\u547c\u3073\u51fa\u3059\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067\u6b21\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002\u3042\u306a\u305f\u306e\u5834\u5408\u3001\u4ed6\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306f\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u547c\u3070\u308c\u307e\u3059\u3002Express\u306eres.render\u30e1\u30bd\u30c3\u30c9\u306f\u30d3\u30e5\u30fc\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u3001\u305d\u308c\u3092\u5185\u90e8\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3068\u5171\u306bres.send\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u30db\u30fc\u30e0\u30eb\u30fc\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306f\u3001res.render\u304c\u547c\u3073\u51fa\u3055\u308c\u305f\u6642\u306b\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u524d\u306b\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\u3057\u3001\u6700\u7d42\u7684\u306b\u5143\u306esend\u95a2\u6570\u3092\u547c\u3073\u51fa\u3057\u3066\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u5b8c\u4e86\u3055\u305b\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306erender\u30e1\u30bd\u30c3\u30c9\u306b\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3092\u6e21\u3059\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u304c\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u308b\u5404\u30eb\u30fc\u30c8\u3054\u3068\u306b\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u5185\u3067\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u3092\u8907\u88fd\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/div>\n<\/div>\n<p>server.js\u306b\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<div>server.js\u3092\u65e5\u672c\u8a9e\u3067\u8ff0\u3079\u308b\u3068\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> findPrime <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/utils\/findPrime'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> memcache <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/services\/memcache'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<mark><span class=\"token keyword\">const<\/span> cacheView <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/middleware\/cacheView'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>GET \/home\u30eb\u30fc\u30c8\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><mark><span class=\"token punctuation\">,<\/span> cacheView<\/mark><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token operator\">...<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002(Fairu o hozon shite kudasai.)<\/p>\n<p>\u5909\u66f4\u70b9\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3001GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3066\u5c55\u958b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">&#8220;<mark>Add view caching<\/mark>&#8220;<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> push<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u306b\u6570\u5024\u3092\u9001\u4fe1\u3059\u308b\u969b\u306b\u306f\u3001\u3059\u3079\u3066\u901a\u5e38\u901a\u308a\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059\u3002\u65b0\u3057\u3044\u6570\u5024\u3092\u9001\u4fe1\u3059\u308b\u3068\u3001MemCachier\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u7d71\u8a08\u306eSet Cmds\u3001Items\u3001\u304a\u3088\u3073get misses\u304c\u5168\u30662\u3064\u305a\u3064\u5897\u52a0\u3057\u307e\u3059\u30021\u3064\u306f\u7d20\u6570\u306e\u8a08\u7b97\u306e\u305f\u3081\u3067\u3001\u3082\u30461\u3064\u306f\u30d3\u30e5\u30fc\u306e\u305f\u3081\u3067\u3059\u3002\u540c\u3058\u6570\u5024\u3067\u30a2\u30d7\u30ea\u3092\u66f4\u65b0\u3059\u308b\u3068\u3001MemCachier\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u306f\u5358\u4e00\u306eget hit\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u30d3\u30e5\u30fc\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u6b63\u5e38\u306b\u53d6\u5f97\u3055\u308c\u308b\u305f\u3081\u3001\u7d20\u6570\u306e\u7d50\u679c\u3092\u53d6\u5f97\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1aExpress\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u51fa\u529b\u5185\u5bb9\u3067\u306f\u306a\u304f\u3001\u57fa\u306b\u306a\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u81ea\u4f53\u3060\u3051\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u30d3\u30e5\u30fc\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u30aa\u30f3\u3067\u3082\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u3054\u3068\u306b\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u5b9f\u88c5\u3057\u305f\u63cf\u753b\u3055\u308c\u305f\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u306f\u7570\u306a\u308a\u3001\u76f8\u88dc\u7684\u306a\u6a5f\u80fd\u3067\u3059\u3002<\/div>\n<\/div>\n<p>\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u305f\u3081\u3001\u3044\u3044\u306d\u30dc\u30bf\u30f3\u304c\u52d5\u4f5c\u3057\u306a\u304f\u306a\u308b\u3053\u3068\u306b\u6c17\u3065\u304f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3044\u3044\u306d\u306e\u5024\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u3068\u3001\u5024\u306f\u78ba\u304b\u306b\u5909\u308f\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u3044\u3044\u306d\u306e\u6570\u304c\u5909\u308f\u3063\u305f\u5834\u5408\u306b\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3082\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30d3\u30e5\u30fc\u304c\u5909\u66f4\u3055\u308c\u305f\u5834\u5408\u306b\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d3\u30e5\u30fc\u306f\u7121\u52b9\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u3044\u3044\u306d\u304c\u5909\u66f4\u3055\u308c\u305f\u5834\u5408\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u524a\u9664\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u7121\u52b9\u306b\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u306eserver.js\u306b\u623b\u308a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u95a2\u6570\u3092\u66f4\u65b0\u3057\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc\u306e.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/like'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n\r\n  likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <mark><span class=\"token comment\">\/\/ The URL of the page being 'liked'<\/span><\/mark>\r\n  <mark><span class=\"token keyword\">const<\/span> url <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">\/?n=<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>n<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><mark>url<\/mark><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u306e\u30d3\u30e5\u30fc\u306e\u300c\u3044\u3044\u306d\u300d\u6570\u304c\u5909\u66f4\u3055\u308c\u305f\u305f\u3081\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3059\u3002\u3044\u3044\u306d\u304c\u5909\u66f4\u3055\u308c\u305f\u3068\u304d\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u300c\u3044\u3044\u306d\u300d\u6570\u3092\u524a\u9664\u3059\u308b\u305f\u3081\u306b\u3001\u5f37\u8abf\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n  <span class=\"token keyword\">const<\/span> url <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">\/?n=<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>n<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <mark><span class=\"token comment\">\/\/ The view for this URL has changed, so the cached version is no longer valid, delete it from the cache.<\/span><\/mark>\r\n  <mark><span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">view_<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>url<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <mark>memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">delete<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u3042\u306a\u305f\u306eserver.js\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 (Anata no server.js fairu wa, k\u014dru no y\u014d ni naru hitsuy\u014d ga arimasu.)<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> findPrime <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/utils\/findPrime'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> memcache <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/services\/memcache'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> cacheView <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/middleware\/cacheView'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> app <span class=\"token operator\">=<\/span> <span class=\"token function\">express<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'view engine'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'ejs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token comment\">\/**\r\n * Key is `n`\r\n * Value is the number of 'likes' for `n`\r\n *\/<\/span>\r\n<span class=\"token keyword\">const<\/span> likesMap <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> cacheView<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n\r\n  <span class=\"token keyword\">let<\/span> prime<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token string\">'prime_'<\/span> <span class=\"token operator\">+<\/span> n<span class=\"token punctuation\">;<\/span>\r\n\r\n  memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<span class=\"token punctuation\">,<\/span> val<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>val <span class=\"token operator\">!==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token comment\">\/\/ Use the value from the cache<\/span>\r\n      <span class=\"token comment\">\/\/ Convert Buffer string before converting to number<\/span>\r\n      prime <span class=\"token operator\">=<\/span> <span class=\"token function\">parseInt<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token comment\">\/\/ No cached value available, find it<\/span>\r\n      prime <span class=\"token operator\">=<\/span> <span class=\"token function\">findPrime<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n      memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> prime<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">expires<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Initialize likes for this number when necessary<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">const<\/span> locals <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span> n<span class=\"token punctuation\">,<\/span> prime<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">likes<\/span><span class=\"token operator\">:<\/span> likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'index'<\/span><span class=\"token punctuation\">,<\/span> locals<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/like'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">const<\/span> n <span class=\"token operator\">=<\/span> req<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">.<\/span>n<span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n\r\n  likesMap<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token comment\">\/\/ The URL of the page being 'liked'<\/span>\r\n  <span class=\"token keyword\">const<\/span> url <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">\/?n=<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>n<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  <span class=\"token comment\">\/\/ The view for this URL has changed, so the cached version is no longer valid, delete it from the cache.<\/span>\r\n  <span class=\"token keyword\">const<\/span> key <span class=\"token operator\">=<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">view_<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>url<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n  memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">delete<\/span><span class=\"token punctuation\">(<\/span>key<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">redirect<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">const<\/span> port <span class=\"token operator\">=<\/span> process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">.<\/span><span class=\"token constant\">PORT<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">;<\/span>\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">listen<\/span><span class=\"token punctuation\">(<\/span>port<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span>\r\n  console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">Example app is listening on port <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>port<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\">.<\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u5909\u66f4\u5185\u5bb9\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">&#8220;<mark>Delete invalid cached view<\/mark>&#8220;<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> push<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u306e\u300c\u3044\u3044\u306d\u300d\u30dc\u30bf\u30f3\u304c\u6b63\u5e38\u306b\u6a5f\u80fd\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30d3\u30e5\u30fc\u304c\u300c\u3044\u3044\u306d\u300d\u3055\u308c\u308b\u3068\u3001MemCachier\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u4e0a\u306e\u4ee5\u4e0b\u306e\u7d71\u8a08\u30c7\u30fc\u30bf\u304c\u5909\u5316\u3057\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>delete hits increments as the view is deleted.<\/li>\n<li>get misses increases because the view was deleted and is not in the cache.<\/li>\n<li>get hits increments because the prime number was found in the cache.<\/li>\n<li>Set Cmds increases because the updated view is added to the cache.<\/li>\n<li>Items stays the same as the view is deleted and re-added.<\/li>\n<\/ul>\n<p>\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5b9f\u88c5\u3068\u3001\u5909\u66f4\u304c\u3042\u3063\u305f\u5834\u5408\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u7121\u52b9\u5316\u3059\u308b\u624b\u6cd5\u3092\u53d6\u308a\u5165\u308c\u307e\u3057\u305f\u3002\u6700\u5f8c\u306b\u5b9f\u88c5\u3059\u308b\u6226\u7565\u306f\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u30ad\u30e3\u30c3\u30b7\u30e5\u3067\u3059\u3002<\/p>\n<h3>\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/h3>\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u30b9\u30c8\u30a2\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u4e00\u822c\u7684\u306a\u4f7f\u7528\u4f8b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u30ed\u30b0\u30a4\u30f3\u3067\u3059\u306e\u3067\u3001\u4eca\u5f8c\u306e\u30e6\u30fc\u30b6\u30fc\u30ed\u30b0\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u306e\u305f\u3081\u306e\u6e96\u5099\u6bb5\u968e\u3068\u3057\u3066\u3001\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u8003\u616e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08\u305f\u3060\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u30ed\u30b0\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u306f\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u7bc4\u56f2\u5916\u3067\u3059\uff09\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u5185\u306b\u77ed\u671f\u9593\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u306f\u3001\u591a\u304f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3059\u308b\u3088\u308a\u3082\u9ad8\u901f\u304b\u3064\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u3067\u3059\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3059\u308b\u77ed\u671f\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4fdd\u5b58\u3059\u308b\u306e\u306b\u6700\u9069\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u6c38\u7d9a\u7684\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u9577\u671f\u9593\u7d99\u7d9a\u3059\u308b\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306a\u3069\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/div>\n<\/div>\n<p>Express\u30a2\u30d7\u30ea\u306b\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306bexpress-session\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u30b9\u30c8\u30a2\u3068\u3057\u3066MemCachier\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306bconnect-memjs\u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">npm<\/span> <span class=\"token function\">install<\/span> express-session connect-memjs<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>server.js\u306b\u306f\u3001express-session\u3068connect-memjs\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">const<\/span> express <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> findPrime <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/utils\/findPrime'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> memcache <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/services\/memcache'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">const<\/span> cacheView <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.\/middleware\/cacheView'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<mark><span class=\"token keyword\">const<\/span> session <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express-session'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<mark><span class=\"token keyword\">const<\/span> MemcacheStore <span class=\"token operator\">=<\/span> <span class=\"token function\">require<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'connect-memjs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span>session<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30bb\u30c3\u30b7\u30e7\u30f3\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306f\u3001connect memcached\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u6e21\u3055\u308c\u3001\u305d\u308c\u306b\u3088\u3063\u3066express.session.Store\u304b\u3089\u7d99\u627f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u4f9d\u7136\u3068\u3057\u3066server.js\u5185\u3067\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u5f37\u8abf\u3055\u308c\u305f\u884c\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc\u30d5\u30a1\u30a4\u30eb &#8220;server.js&#8221; \u3092\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'view engine'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'ejs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<mark>app<span class=\"token punctuation\">.<\/span><span class=\"token function\">use<\/span><span class=\"token punctuation\">(<\/span><\/mark>\r\n  <mark><span class=\"token function\">session<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark><span class=\"token literal-property property\">secret<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'your-session-secret'<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n    <mark><span class=\"token literal-property property\">resave<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n    <mark><span class=\"token literal-property property\">saveUninitialized<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n    <mark><span class=\"token literal-property property\">store<\/span><span class=\"token operator\">:<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">MemcacheStore<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><\/mark>\r\n      <mark><span class=\"token literal-property property\">servers<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span>process<span class=\"token punctuation\">.<\/span>env<span class=\"token punctuation\">.<\/span><span class=\"token constant\">MEMCACHIER_SERVERS<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n      <mark><span class=\"token literal-property property\">prefix<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'session_'<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n    <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u79d8\u5bc6\u306f\u30bb\u30c3\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u306b\u7f72\u540d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002unique\u306a\u6587\u5b57\u5217\u3067\u3042\u308b&#8221;your-session-secret&#8221;\u3092\u5fc5\u305a\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"post-conf-note\">\n<p class=\"post-conf-desc\">Note<\/p>\n<div>\u6ce8\u610f\uff1a\u672c\u756a\u74b0\u5883\u306e\u8a2d\u5b9a\u306b\u306f\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u3092\u884c\u3046\u306b\u306f\u3001secret: process.env.SESSION_SECRET || &#8216;your-session-secret&#8217; \u306e\u3088\u3046\u306b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001App Platform\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3067\u3082\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/div>\n<\/div>\n<p>\u672a\u66f4\u65b0\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u3001\u518d\u8981\u6c42\u6642\u306b\u518d\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u300cresave\u300d\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30a2\u30a4\u30c6\u30e0\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4e0d\u5fc5\u8981\u306b\u518d\u683c\u7d0d\u3059\u308b\u3053\u3068\u306f\u907f\u3051\u305f\u3044\u306e\u3067\u3001\u305d\u308c\u3092\u300cfalse\u300d\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>saveUninitialized: false \u306f\u3001\u5909\u66f4\u3055\u308c\u305f\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u307f\u3092\u4fdd\u5b58\u3057\u305f\u3044\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002\u30ed\u30b0\u30a4\u30f3\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u306f\u3001\u8a8d\u8a3c\u5f8c\u306b\u30e6\u30fc\u30b6\u30fc\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u7121\u5dee\u5225\u306b\u4fdd\u5b58\u3059\u308b\u305f\u3081\u3001true \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u7d42\u7684\u306b\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u30b9\u30c8\u30a2\u3092\u8a2d\u5b9a\u3057\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u30ad\u30e3\u30c3\u30b7\u30e5\u30ad\u30fc\u306e\u63a5\u982d\u8f9e\u3092session_\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u5185\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u30a2\u30a4\u30c6\u30e0\u306e\u30ad\u30fc\u306fsession_&lt;\u30bb\u30c3\u30b7\u30e7\u30f3ID&gt;\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u884c\u3092\u4f7f\u7528\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30ec\u30d9\u30eb\u306e\u30c7\u30d0\u30c3\u30b0\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u4e2d\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u7279\u5b9a\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n<div>\u30b5\u30fc\u30d0\u30fc.js<\/div>\n<pre class=\"post-pre\"><code><span class=\"token operator\">...<\/span>\r\n\r\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">use<\/span><span class=\"token punctuation\">(<\/span>\r\n  <span class=\"token function\">session<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token operator\">...<\/span>\r\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span>\r\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token comment\"><mark>\/**<\/mark>\r\n <mark>* Session sanity check middleware<\/mark>\r\n <mark>*\/<\/mark><\/span>\r\n<mark>app<span class=\"token punctuation\">.<\/span><span class=\"token function\">use<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<span class=\"token punctuation\">,<\/span> next<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n  <mark>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'Session ID:'<\/span><span class=\"token punctuation\">,<\/span> req<span class=\"token punctuation\">.<\/span>session<span class=\"token punctuation\">.<\/span>id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <mark><span class=\"token comment\">\/\/ Get the item from the cache<\/span><\/mark>\r\n  <mark>memcache<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">session_<\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>req<span class=\"token punctuation\">.<\/span>session<span class=\"token punctuation\">.<\/span>id<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<span class=\"token punctuation\">,<\/span> val<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n    <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n    <mark><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>val <span class=\"token operator\">!==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/mark>\r\n      <mark>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'Session from cache:'<\/span><span class=\"token punctuation\">,<\/span> val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n    <mark><span class=\"token punctuation\">}<\/span><\/mark>\r\n  <mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n  <mark><span class=\"token function\">next<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n<mark><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/mark>\r\n\r\n<span class=\"token operator\">...<\/span>\r\n<\/code><\/pre>\n<p>\u305d\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306f\u3001\u5404\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30bb\u30c3\u30b7\u30e7\u30f3ID\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3057\u307e\u3059\u3002\u305d\u308c\u304b\u3089\u3001\u305d\u306eID\u306b\u5bfe\u5fdc\u3059\u308b\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u53d6\u5f97\u3057\u3001\u305d\u306e\u5185\u5bb9\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3057\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u52d5\u4f5c\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u3089\u3001\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">&#8220;<mark>Add session caching<\/mark>&#8220;<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">git<\/span> push<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u5185\u3067\u756a\u53f7\u3092\u9001\u4fe1\u3057\u3001App Platform\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u30ed\u30b0\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3068\u3001\u30c7\u30d0\u30c3\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u30bb\u30c3\u30b7\u30e7\u30f3ID\u3068\u30ed\u30b0\u3057\u305f\u5024\u304c\u8868\u793a\u3055\u308c\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u52d5\u4f5c\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3042\u306a\u305f\u306eMemCachier\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3067\u306f\u3001\u30d3\u30e5\u30fc\u3068\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u308b\u3068\u3001\u30da\u30fc\u30b8\u3092\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3059\u308b\u3054\u3068\u306b3\u3064\u306e\u30b2\u30c3\u30c8\u30d2\u30c3\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30d3\u30e5\u30fc\u306b1\u3064\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u306b1\u3064\u3001\u30c7\u30d0\u30c3\u30b0\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3067\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b1\u3064\u3067\u3059\u3002<\/p>\n<p>\u4eca\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u3053\u3067\u7d42\u4e86\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3057\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6700\u7d42\u30b9\u30c6\u30c3\u30d7\u3067\u30a2\u30d7\u30ea\u3092\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\uff08\u4efb\u610f\uff09\u30b9\u30c6\u30c3\u30d77-\u30ea\u30bd\u30fc\u30b9\u306e\u6574\u7406<\/h2>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u5c55\u958b\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u306f\u6599\u91d1\u304c\u767a\u751f\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30a2\u30d7\u30ea\u3068MemCachier\u30a2\u30c9\u30aa\u30f3\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30a2\u30d7\u30ea\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u304b\u3089\u3001\u300c\u30a2\u30af\u30b7\u30e7\u30f3\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u300c\u30a2\u30d7\u30ea\u3092\u524a\u9664\u300d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>MemCachier\u306e\u30a2\u30c9\u30aa\u30f3\u3092\u6574\u7406\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u30a2\u30c9\u30aa\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u6b21\u306bMemCachier\u306e\u30a2\u30c9\u30aa\u30f3\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u6b21\u306b\u300c\u8a2d\u5b9a\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u300c\u524a\u9664\u300d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7121\u6599\u306eMemCachier\u30ad\u30e3\u30c3\u30b7\u30e5\u306f30\u65e5\u9593\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u304c\u306a\u3044\u5834\u5408\u306b\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u304c\u3001\u30c4\u30fc\u30eb\u306e\u6574\u7406\u306f\u826f\u3044\u7fd2\u6163\u3067\u3059\u3002<\/p>\n<h2>\u7d50\u8ad6<\/h2>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Like\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u7d20\u6570\u3092\u898b\u3064\u3051\u308bExpress\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u305d\u306e\u5f8c\u3001\u3053\u306e\u30a2\u30d7\u30ea\u3092GitHub\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u3001Silicon Cloud App Platform\u3067\u5c55\u958b\u3057\u307e\u3057\u305f\u3002\u6700\u5f8c\u306b\u3001MemCachier\u30a2\u30c9\u30aa\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3001\u30ea\u30bd\u30fc\u30b9\u306e\u8ca0\u8377\u306e\u304b\u304b\u308b\u8a08\u7b97\u3001\u8868\u793a\u3055\u308c\u308b\u30d3\u30e5\u30fc\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001Express\u30a2\u30d7\u30ea\u3092\u3088\u308a\u9ad8\u901f\u3067\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306b\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001Silicon Cloud\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u5404\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306b\u304a\u3044\u3066\u3001prime_\u3001view_\u3001session_\u3068\u3044\u3046\u63a5\u982d\u8f9e\u304c\u30ad\u30fc\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002\u540d\u524d\u7a7a\u9593\u306e\u5229\u70b9\u306b\u52a0\u3048\u3066\u3001\u63a5\u982d\u8f9e\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3068\u3044\u3046\u8ffd\u52a0\u306e\u5229\u70b9\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001MemCachier\u306e\u958b\u767a\u8005\u30d7\u30e9\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3057\u305f\u304c\u3001Introspection\u6a5f\u80fd\u30bb\u30c3\u30c8\u304c\u4ed8\u5c5e\u3059\u308b\u5b8c\u5168\u306b\u7ba1\u7406\u3055\u308c\u305f\u30d7\u30e9\u30f3\u3067\u3082\u8a66\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5404\u63a5\u982d\u8f9e\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8ffd\u8de1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001\u4efb\u610f\u306e\u63a5\u982d\u8f9e\u306e\u30d2\u30c3\u30c8\u7387\u3084\u30d2\u30c3\u30c8\u6bd4\u7387\u3092\u76e3\u8996\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u3064\u3044\u3066\u8a73\u7d30\u306a\u60c5\u5831\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002MemCachier\u3067\u4f5c\u696d\u3092\u7d9a\u3051\u308b\u305f\u3081\u306b\u306f\u3001\u5f7c\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>Silicon Cloud\u306eApp Platform\u3067\u7d9a\u3051\u3066\u30d3\u30eb\u30c9\u3092\u884c\u3046\u305f\u3081\u306b\u306f\u3001App Platform\u306e\u300cHow-To\u30ac\u30a4\u30c9\u300d\u3092\u53c2\u7167\u3057\u3066\u3001\u3055\u3089\u306bApp Platform\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u8aad\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b46\u8005\u306f\u300c\u66f8\u3044\u3066\u5bc4\u4ed8\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u300d\u306e\u4e00\u74b0\u3068\u3057\u3066\u3001\u5bc4\u4ed8\u91d1\u3092\u53d7\u3051\u53d6\u308b\u305f\u3081\u306b\u300cFree and Open Source Fund\u300d\u3092\u9078\u3073\u307e\u3057\u305f\u3002 \u3054\u6328\u62f6 Express\u306f\u3001Node\u3092\u4f7f\u7528\u3057\u3066\u9ad8\u901f\u306aWeb\u30a2\u30d7\u30ea\u3084API\u3092\u69cb\u7bc9\u3059\u308b [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26,61],"class_list":["post-458","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-26","tag-61"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/ja\/blog\/\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067express\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\" \/>\n<meta property=\"og:description\" content=\"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/ja\/blog\/\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067express\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-28T09:23:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T14:45:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/32-0.png\" \/>\n<meta name=\"author\" content=\"\u590f\u6a39, \u98a8\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u590f\u6a39, \u98a8\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"79\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/\",\"name\":\"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\"},\"datePublished\":\"2023-06-28T09:23:55+00:00\",\"dateModified\":\"2025-07-31T14:45:07+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/4e591db2661c4cc425470b461259391d\"},\"description\":\"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/ja\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/4e591db2661c4cc425470b461259391d\",\"name\":\"\u590f\u6a39, \u98a8\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/65e0ff40534461b1fa000382dc194e1716f793ab0bcb218ac3c40895551a08c5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/65e0ff40534461b1fa000382dc194e1716f793ab0bcb218ac3c40895551a08c5?s=96&d=mm&r=g\",\"caption\":\"\u590f\u6a39, \u98a8\"},\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/author\/natsukikaze\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5 - Blog - Silicon Cloud","description":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/ja\/blog\/\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067express\/","og_locale":"ja_JP","og_type":"article","og_title":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5","og_description":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","og_url":"https:\/\/www.silicloud.com\/ja\/blog\/\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067express\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-06-28T09:23:55+00:00","article_modified_time":"2025-07-31T14:45:07+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65644b03daa94e2bdf7aedfd\/32-0.png"}],"author":"\u590f\u6a39, \u98a8","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"\u590f\u6a39, \u98a8","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"79\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/","url":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/","name":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website"},"datePublished":"2023-06-28T09:23:55+00:00","dateModified":"2025-07-31T14:45:07+00:00","author":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/4e591db2661c4cc425470b461259391d"},"description":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/ja\/blog\/"},{"@type":"ListItem","position":2,"name":"\u30c7\u30b8\u30bf\u30eb\u30aa\u30fc\u30b7\u30e3\u30f3\u30a2\u30d7\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Express\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001MemCachier\u3067\u30b9\u30b1\u30fc\u30eb\u306e\u65b9\u6cd5"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website","url":"https:\/\/www.silicloud.com\/ja\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/4e591db2661c4cc425470b461259391d","name":"\u590f\u6a39, \u98a8","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/65e0ff40534461b1fa000382dc194e1716f793ab0bcb218ac3c40895551a08c5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/65e0ff40534461b1fa000382dc194e1716f793ab0bcb218ac3c40895551a08c5?s=96&d=mm&r=g","caption":"\u590f\u6a39, \u98a8"},"url":"https:\/\/www.silicloud.com\/ja\/blog\/author\/natsukikaze\/"},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%83%87%e3%82%b8%e3%82%bf%e3%83%ab%e3%82%aa%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%b3%e3%82%a2%e3%83%97%e3%83%aa%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%a7express\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/comments?post=458"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":325795,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/458\/revisions\/325795"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/media?parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/categories?post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/tags?post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}