{"id":4463,"date":"2021-01-25T12:00:07","date_gmt":"2021-01-25T03:00:07","guid":{"rendered":"\/media\/?p=4463"},"modified":"2024-12-17T08:36:34","modified_gmt":"2024-12-16T23:36:34","slug":"spatie-browsershot","status":"publish","type":"post","link":"https:\/\/www.flying-h.co.jp\/media\/2021\/01\/25\/spatie-browsershot\/","title":{"rendered":"\u30b7\u30b9\u30c6\u30e0\u958b\u767a &#8211; spatie\/browsershot\u306e\u8a2d\u5b9a\u306e\u899a\u66f8"},"content":{"rendered":"<p><img decoding=\"async\" class=\"aligncenter wp-image-4465 size-full\" src=\"\/media\/wp-content\/uploads\/2021\/02\/3753817_s.jpg\" alt=\"\" width=\"100%\" srcset=\"https:\/\/www.flying-h.co.jp\/media\/wp-content\/uploads\/2021\/02\/3753817_s.jpg 640w, https:\/\/www.flying-h.co.jp\/media\/wp-content\/uploads\/2021\/02\/3753817_s-300x200.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001Web\u30da\u30fc\u30b8\u3092\u753b\u50cf\u53c8\u306fPDF\u306b\u5909\u63db\u3057\u307e\u3059\u3002<br \/>\u80cc\u5f8c\u3067\u306f\u3001\u30d8\u30c3\u30c9\u30ec\u30b9\u306eGoogle Chrome\u3092\u6271\u3046Puppeteer\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>Puppeteer\u306f\u3001JS\u304b\u3089\u5b9f\u884c\u3057\u307e\u3059\u304c\u3001Browsershot\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u306b\u3088\u308aPHP\u304b\u3089\u30d8\u30c3\u30c9\u30ec\u30b9Chrome\u3092\u5236\u5fa1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u3053\u3053\u3067\u3044\u304f\u3064\u304b\u306f\u307e\u3063\u305f\u306e\u3067\u899a\u66f8\u3068\u3057\u3066\u6b8b\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<h2>\u7528\u4ef6<\/h2>\n<p>\u4e0b\u8a18\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>Puppeteer \uff65\uff65\uff65 Chrome\u307e\u305f\u306fChrominium\u3092\u5236\u5fa1\u3059\u308bNode\u30e9\u30a4\u30d6\u30e9\u30ea<\/li>\n<li>Node7.6.x\u4ee5\u964d<\/li>\n<\/ul>\n<h3>\u8a2d\u5b9a\u74b0\u5883<\/h3>\n<ul>\n<li>AWS EC2<\/li>\n<li>Laravel 6.\uff58<\/li>\n<li>nvm\u3092\u4f7f\u7528\u3057\u3066npm\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<br \/>\u203b\u3053\u3053\u306b\u4eca\u56de\u306e\u554f\u984c\u306e\u539f\u56e0\u304c\u3042\u3063\u305f\u306e\u304b\u3082\u2026<\/li>\n<\/ul>\n<h2>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n<p>\u7d30\u304b\u3044\u8aac\u660e\u306f\u5272\u611b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">npm install puppeteer\ncomposer\u00a0require\u00a0spatie\/browsershot<\/pre>\n<h3>\u4f7f\u7528\u6cd5<\/h3>\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u7c21\u5358\u306a\u8a18\u8ff0\u3067\u4f7f\u7528\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u304c\u3002\u3002\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">use Spatie\\Browsershot\\Browsershot;\n\n\/\/ \u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\nBrowsershot::url('https:\/\/example.com')-&gt;save($pathToImage);\n\n\/\/ PDF\u4f5c\u6210\nBrowsershot::url('https:\/\/example.com')-&gt;save('example.pdf');<\/pre>\n<h2>\u6700\u521d\u306e\u30a8\u30e9\u30fc<\/h2>\n<p>\u307e\u305a\u306f\u4e0b\u8a18\u3092\u5b9f\u884c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">Browsershot::url('http:\/\/www.yahoo.co.jp')-&gt;save('.\/test.pdf');<\/pre>\n<p>\u3059\u308b\u3068<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"nginx\">The command \"PATH=$PATH:\/usr\/local\/bin NODE_PATH=`npm root -g` node '\/var\/www\/vendor\/spatie\/browsershot\/src\/..\/bin\/browser.js' '{\"url\":\"http:\\\/\\\/www.yahoo.co.jp\",\"action\":\"pdf\",\"options\":{\"path\":\"\\.\/test.pdf\",\"args\":[],\"viewport\":{\"width\":800,\"height\":600}}}'\" failed.\n\nExit Code: 127(Command not found)\n\nWorking directory: \/var\/www\/html\n\nOutput:\n================\n\n\nError Output:\n================\nsh: npm: command not found\nsh: node: command not found<\/pre>\n<p>\u4e0a\u8a18\u304b\u3089\u300cnpm\u300d\u3068\u300cnode\u300d\u306e\u30b3\u30de\u30f3\u30c9\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u3089\u3057\u3044\u3002\u3002\u3002<\/p>\n<p>\u8272\u3005\u8abf\u3079\u305f\u3089\u4e0b\u8a18\u306e3\u3064\u306e\u65b9\u6cd5\u3067node\u306e\u30d1\u30b9\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3068\u3044\u3046\u3053\u3068\u304c\u5206\u304b\u3063\u305f\u304c\u3001\u3069\u308c\u304c\u672c\u5f53\u306a\u306e\u304b\uff1f<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ npm root -g\n\/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/lib\/node_modules\n\n$ npm bin -g\n\/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/bin\n\n$ node\n&gt; global.module.paths\n[ '\/home\/ec2-user\/.npm\/_logs\/repl\/node_modules',\n  '\/home\/ec2-user\/.npm\/_logs\/node_modules',\n  '\/home\/ec2-user\/.npm\/node_modules',\n  '\/home\/ec2-user\/node_modules',\n  '\/home\/node_modules',\n  '\/node_modules',\n  '\/home\/ec2-user\/.node_modules',\n  '\/home\/ec2-user\/.node_libraries',\n  '\/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/lib\/node' ]<\/pre>\n<p>\u69d8\u3005\u78ba\u304b\u3081\u305f\u7d50\u679c\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u306b\u306a\u3063\u305f\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">Browsershot::url('http:\/\/www.yahoo.co.jp')\n                   -&gt;setNodeBinary('\/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/bin\/node')\n                   -&gt;save('.\/test.pdf');<\/pre>\n<p>\u305d\u3057\u3066\u5b9f\u884c\u3057\u305f\u3068\u3053\u308d\u6b21\u306e\u30a8\u30e9\u30fc\u304c\u51fa\u305f<\/p>\n<h2>2\u56de\u76ee\u306e\u30a8\u30e9\u30fc<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">local.ERROR: The command \"PATH=\/var\/www\/ NODE_PATH='\/var\/www\/node_modules' \/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/bin\/node '\/var\/www\/app\/Libs\/browser.js' '{\"url\":\"https:\\\/\\\/www.google.com\\\/?hl=ja\",\"action\":\"pdf\",\"options\":{\"path\":\"\\\/var\\\/www\\\/html\\\/test.pdf\",\"args\":[\"--no-sandbox\",\"--disable-web-security\"],\"viewport\":{\"width\":800,\"height\":600}}}'\" failed.\n\nExit Code: 126(Invoked command cannot execute)\n\nWorking directory: \/var\/www\/html\n\nOutput:\n================\n\n\nError Output:\n================\nsh: \/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/bin\/node: Permission denied<\/pre>\n<p>node\u3092\u5b9f\u884c\u3059\u308b\u6a29\u9650\u304c\u7121\u3044\u3089\u3057\u3044\u2026<\/p>\n<p>node\u306e\u5b9f\u884c\u6a29\u9650\u3092\u8abf\u3079\u3066\u307f\u308b\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ ls -la \/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/bin\/\n\u5408\u8a08 40260\ndrwxrwxr-x 2 ec2-user ec2-user       40  2\u6708  8 08:44 .\ndrwxrwxr-x 6 ec2-user ec2-user      108  2\u6708  8 08:42 ..\n-rwxrwxr-x 1 ec2-user ec2-user 41226208  1\u6708 27 00:59 node\nlrwxrwxrwx 1 ec2-user ec2-user       38  2\u6708  8 08:44 npm -&gt; ..\/lib\/node_modules\/npm\/bin\/npm-cli.js\nlrwxrwxrwx 1 ec2-user ec2-user       38  2\u6708  8 08:44 npx -&gt; ..\/lib\/node_modules\/npm\/bin\/npx-cli.js<\/pre>\n<p>\u7279\u306b\u554f\u984c\u306f\u306a\u3044\u3002<\/p>\n<p>\u4e00\u3064\u305a\u3064\u968e\u5c64\u3092\u4e0a\u304c\u3063\u3066\u307f\u308b<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ ls -la \/home\/ec2-user\/.nvm\/versions\/node\/v10.23.2\/\n\uff65\uff65\uff65\n$ ls -la \/home\/ec2-user\/.nvm\/versions\/node\/\n\uff65\uff65\uff65\n$ ls -la \/home\/ec2-user\/.nvm\/versions\/\n\uff65\uff65\uff65\n$ ls -la \/home\/ec2-user\/.nvm\/\n\uff65\uff65\uff65\n$ ls -la \/home\/ec2-user\/\n\uff65\uff65\uff65<\/pre>\n<pre wp-pre-tag-8=\"\"><\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">nbsp;ls\u00a0-la\u00a0\/home\/ \u5408\u8a08 0 drwxr-xr-x 5 root root 55 1\u6708 21 09:02 . dr-xr-xr-x 18 root root 257 2\u6708 3 16:29 .. drwx------ 9 ec2-user ec2-user 293 2\u6708 7 11:40 ec2-user<\/pre>\n<p>\u3053\u3053\u3067\u521d\u3081\u3066\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u3057\u304b\u5b9f\u884c\u6a29\u9650\u304c\u306a\u3044\u72b6\u614b\u3092\u767a\u898b\u3059\u308b\u3002<\/p>\n<p>\u78ba\u8a8d\u306e\u305f\u3081\u3001\u5f53\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u300c\u305d\u306e\u4ed6\u300d\u306e\u6a29\u9650\u3092\u5909\u66f4\u3057\u3066\u307f\u308b\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ chmod 705 \/home\/ec2-user<\/pre>\n<p>\u30d5\u30a9\u30eb\u30c0\u306e\u5b9f\u884c\u6a29\u9650\u3092\u5909\u66f4\u3057\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3057\u305f\u3068\u3053\u308d\u3001\u30a8\u30e9\u30fc\u304c\u3067\u306a\u304b\u3063\u305f\u3002<\/p>\n<p><\/p>\n<p>\u6700\u5f8c\u306e\u51e6\u7406\u304c\u6b63\u3057\u3044\u304b\u308f\u304b\u3089\u306a\u3044\u304c\u3001\u305d\u3046\u3044\u3046\u3053\u3068\u3060\u3063\u305f\u3089\u3057\u3044\u3002<\/p>\n\n<div data-post-id=\"6328\" class=\"insert-page insert-page-6328 \">\n<h2 class=\"wp-block-heading\">\u30d5\u30e9\u30a4\u30f3\u30b0\u30fb\u30cf\u30a4\u30fb\u30ef\u30fc\u30af\u30b9\u306e\u7d39\u4ecb<\/h2>\n\n\n\n<p class=\"has-small-font-size\"><a href=\"https:\/\/www.flying-h.co.jp\/\" target=\"_blank\" rel=\"noopener\" title=\"\u30d5\u30e9\u30a4\u30f3\u30b0\u30fb\u30cf\u30a4\u30fb\u30ef\u30fc\u30af\u30b9\">\u30d5\u30e9\u30a4\u30f3\u30b0\u30fb\u30cf\u30a4\u30fb\u30ef\u30fc\u30af\u30b9<\/a>\u306f\u3001\u6771\u4eac\u306e\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u5236\u4f5c\u30fbWeb\u5236\u4f5c\u4f1a\u793e\u30fbWeb\u30b7\u30b9\u30c6\u30e0\u5236\u4f5c\u4f1a\u793e\u3067\u3059\u3002\u6771\u4eac\u90fd\u53ca\u3073\u305d\u306e\u8fd1\u90ca\uff08\u9996\u90fd\u570f\uff09\u3092\u4e2d\u5fc3\u3068\u3057\u3066\u3001SEO\u5bfe\u7b56\u3092\u610f\u8b58\u3057\u305fPC\u53ca\u3073\u30b9\u30de\u30db\u306e\u30b5\u30a4\u30c8\u3092\u30ef\u30f3\u30bd\u30fc\u30b9\uff08\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u5bfe\u5fdc\uff09\u3067\u5236\u4f5c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u5b9f\u7e3e<\/h4>\n\n\n\n<p class=\"has-small-font-size\">\u30c7\u30b6\u30a4\u30ca\u30fc\u30c1\u30fc\u30e0\u306f\u3001\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30c7\u30b6\u30a4\u30f3\u3084\u30a4\u30e9\u30b9\u30c8\u306e\u5236\u4f5c\u3082\u5f97\u610f\u3068\u3057\u3066\u304a\u308a\u3001\u8457\u4f5c\u6a29\u3092\u610f\u8b58\u3057\u306a\u3044\u7d20\u6750\u306e\u63d0\u4f9b\u304c\u53ef\u80fd\u3067\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u30fb\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30c1\u30fc\u30e0\u3067\u306f\u3001Laravel\u306a\u3069\u3092\u4f7f\u7528\u3057\u305f\u30b9\u30af\u30e9\u30c3\u30c1\u304b\u3089\u306e\u30aa\u30ea\u30b8\u30ca\u30eb\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u3092\u59cb\u3081\u3001WordPress\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u5f97\u610f\u3068\u3057\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"has-small-font-size\">\u307e\u305f\u3001SEO\u3084\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\u30da\u30fc\u30b8\uff08LP\uff09\u3001\u5e83\u544a\u5411\u3051\u30d0\u30ca\u30fc\u306a\u3069\u3092\u4ed6\u793e\u69d8\u3067\u3084\u3063\u3066\u3044\u305f\u4f5c\u696d\u306e\u5f15\u7d99\u304e\u3067\u3082\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u5236\u4f5c\u5b9f\u7e3e\u306f\u591a\u6570\u3054\u3056\u3044\u307e\u3059\u306e\u3067\u3001\u304a\u5ba2\u69d8\u306b\u5408\u308f\u305b\u305f\u3054\u63d0\u6848\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"has-small-font-size\">500\u70b9\u4ee5\u4e0a\u306e<a href=\"https:\/\/www.flying-h.co.jp\/works\" target=\"_blank\" rel=\"noopener\" title=\"\u30d5\u30e9\u30a4\u30f3\u30b0\u30fb\u30cf\u30a4\u30fb\u30ef\u30fc\u30af\u30b9\u306e\u5236\u4f5c\u5b9f\u7e3e\">\u30d5\u30e9\u30a4\u30f3\u30b0\u30fb\u30cf\u30a4\u30fb\u30ef\u30fc\u30af\u30b9\u306e\u5236\u4f5c\u5b9f\u7e3e<\/a>\u30da\u30fc\u30b8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001Web\u30da\u30fc\u30b8\u3092\u753b\u50cf\u53c8\u306fPDF\u306b\u5909\u63db\u3057\u307e\u3059\u3002\u80cc\u5f8c\u3067\u306f\u3001\u30d8\u30c3\u30c9\u30ec\u30b9\u306eGoogle Chrome\u3092\u6271\u3046Puppeteer\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002 Puppeteer\u306f\u3001JS\u304b\u3089\u5b9f\u884c\u3057\u307e\u3059\u304c\u3001Browsershot\u3092 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4465,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,4,134],"tags":[],"class_list":["post-4463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-website","category-markup","category-system"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/posts\/4463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/comments?post=4463"}],"version-history":[{"count":1,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/posts\/4463\/revisions"}],"predecessor-version":[{"id":9684,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/posts\/4463\/revisions\/9684"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/media\/4465"}],"wp:attachment":[{"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/media?parent=4463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/categories?post=4463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flying-h.co.jp\/media\/wp-json\/wp\/v2\/tags?post=4463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}