{"id":270,"date":"2026-04-11T14:42:11","date_gmt":"2026-04-11T05:42:11","guid":{"rendered":"https:\/\/blog.andount.com\/index.php\/2026\/04\/22\/270\/"},"modified":"2026-04-22T14:44:37","modified_gmt":"2026-04-22T05:44:37","slug":"%e5%86%99%e7%9c%9f%e3%82%92%e9%80%81%e3%82%8b%e3%81%a8%e6%98%a0%e3%81%a3%e3%81%a6%e3%81%84%e3%82%8b%e9%a3%9f%e6%9d%90%e3%82%92%e5%88%86%e6%9e%90%e3%81%97%e3%81%a6%e3%83%ac%e3%82%b7%e3%83%94%e3%82%92","status":"publish","type":"post","link":"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/","title":{"rendered":"\u5199\u771f\u3092\u9001\u308b\u3068\u6620\u3063\u3066\u3044\u308b\u98df\u6750\u3092\u5206\u6790\u3057\u3066\u30ec\u30b7\u30d4\u3092\u8fd4\u4e8b\u3059\u308bAI\u30dc\u30c3\u30c8\u3092\u8003\u3048\u3066\u307f\u305f\u3002"},"content":{"rendered":"<p>\u7686\u69d8\u3053\u3093\u306b\u3061\u306f\uff01<\/p>\n<p>\u300c\u51b7\u8535\u5eab\u306b\u4f55\u304c\u3042\u308b\u304b\u306f\u308f\u304b\u308b\u3051\u3069\u3001\u4f55\u3092\u4f5c\u308c\u3070\u3044\u3044\u304b\u308f\u304b\u3089\u306a\u3044\u300d\u2014\u2014\u305d\u3093\u306a\u65e5\u5e38\u306e\u3042\u308b\u3042\u308b\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u3001<strong>\u98df\u6750\u306e\u5199\u771f\u3092\u9001\u308b\u3060\u3051\u3067\u30ec\u30b7\u30d4\u3092\u63d0\u6848\u3057\u3066\u304f\u308c\u308bLINE Bot\u300cRecipon\uff08\u30ec\u30b7\u307d\u3093\uff09\u300d<\/strong>\u3092\u8003\u3048\u3066\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%8D%B3_Recipon_%E3%81%A8%E3%81%AF%EF%BC%9F\" >\ud83c\udf73 Recipon \u3068\u306f\uff1f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%94%84_%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E3%83%95%E3%83%AD%E3%83%BC\" >\ud83d\udd04 \u30b7\u30b9\u30c6\u30e0\u306e\u4ed5\u7d44\u307f\u30fb\u30d5\u30ed\u30fc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%92%BB_%E6%8A%80%E8%A1%93%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF\" >\ud83d\udcbb \u6280\u8853\u30b9\u30bf\u30c3\u30af<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%93%82_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%A7%8B%E6%88%90\" >\ud83d\udcc2 \u30d5\u30a1\u30a4\u30eb\u69cb\u6210<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%93%B8_LINE_%E5%86%99%E7%9C%9F_OCR_%E3%81%AE%E8%A9%B3%E7%B4%B0\" >\ud83d\udcf8 LINE \u5199\u771f OCR \u306e\u8a73\u7d30<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%98%85_%E8%8B%A6%E5%8A%B4%E3%81%97%E3%81%9F%E7%82%B9%E3%83%BB%E8%A9%A6%E8%A1%8C%E9%8C%AF%E8%AA%A4\" >\ud83d\ude05 \u82e6\u52b4\u3057\u305f\u70b9\u30fb\u8a66\u884c\u932f\u8aa4<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%E5%95%8F%E9%A1%8C%E2%91%A0%EF%BC%9ALINE_Webhook_%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88\" >\u554f\u984c\u2460\uff1aLINE Webhook \u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%E5%95%8F%E9%A1%8C%E2%91%A1%EF%BC%9A%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AA%E3%81%97%E3%81%A7%E3%83%AC%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9F%E3%83%83%E3%83%88\" >\u554f\u984c\u2461\uff1a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306a\u3057\u3067\u30ec\u30fc\u30c8\u30ea\u30df\u30c3\u30c8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%E5%95%8F%E9%A1%8C%E2%91%A2%EF%BC%9A%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%A8API%E3%82%B3%E3%82%B9%E3%83%88\" >\u554f\u984c\u2462\uff1a\u753b\u50cf\u30b5\u30a4\u30ba\u3068API\u30b3\u30b9\u30c8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%E5%95%8F%E9%A1%8C%E2%91%A3%EF%BC%9Aworkerphp_%E3%81%AE%E5%A4%9A%E9%87%8D%E8%B5%B7%E5%8B%95\" >\u554f\u984c\u2463\uff1aworker.php \u306e\u591a\u91cd\u8d77\u52d5<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%F0%9F%A4%96_ClaudeCode%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F%E6%84%9F%E6%83%B3\" >\ud83e\udd16 ClaudeCode\u3067\u4f5c\u3063\u305f\u611f\u60f3<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/#%E2%9C%85_%E3%81%BE%E3%81%A8%E3%82%81\" >\u2705 \u307e\u3068\u3081<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%8D%B3_Recipon_%E3%81%A8%E3%81%AF%EF%BC%9F\"><\/span>\ud83c\udf73 Recipon \u3068\u306f\uff1f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Recipon \u306f <strong>LINE \u306b\u98df\u6750\u306e\u5199\u771f\u3092\u9001\u308b\u3068\u3001Claude AI \u304c\u98df\u6750\u3092\u8a8d\u8b58\u3057\u3066\u30ec\u30b7\u30d4\u3092\u63d0\u6848\u3057\u3066\u304f\u308c\u308b Bot<\/strong> \u3067\u3059\u3002<\/p>\n<ul>\n<li>\u51b7\u8535\u5eab\u3084\u68da\u306e\u98df\u6750\u3092\u30b9\u30de\u30db\u3067\u64ae\u3063\u3066 LINE \u306b\u9001\u308b\u3060\u3051<\/li>\n<li>Claude Vision API \u304c\u5199\u771f\u304b\u3089\u98df\u6750\u3092\u81ea\u52d5\u8a8d\u8b58<\/li>\n<li>\u64ae\u5f71\u3057\u305f\u98df\u6750\u3060\u3051\u3067\u4f5c\u308c\u308b2\u301c3\u54c1\u306e\u30ec\u30b7\u30d4\u3092\u8fd4\u4fe1<\/li>\n<li>\u300c\u4eca\u591c\u4f55\u4f5c\u308d\u3046\u300d\u304c1\u679a\u306e\u5199\u771f\u3067\u89e3\u6c7a<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%94%84_%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E3%83%95%E3%83%AD%E3%83%BC\"><\/span>\ud83d\udd04 \u30b7\u30b9\u30c6\u30e0\u306e\u4ed5\u7d44\u307f\u30fb\u30d5\u30ed\u30fc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>LINE Webhook \u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\uff0830\u79d2\uff09\u3068 Claude API \u306e\u51e6\u7406\u6642\u9593\uff08\u6700\u592760\u79d2\uff09\u306e\u5236\u7d04\u304c\u3042\u308b\u305f\u3081\u3001<strong>2\u6bb5\u968e\u306e\u975e\u540c\u671f\u51e6\u7406<\/strong>\u3067\u8a2d\u8a08\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre><code>\u3010\u30e6\u30fc\u30b6\u30fc\u304c\u5199\u771f\u3092\u9001\u4fe1\u3011\n        \u2193\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  webhook.php\uff0830\u79d2\u4ee5\u5185\u306b\u5b8c\u4e86\uff09    \u2502\n\u2502  1. LINE\u7f72\u540d\uff08HMAC-SHA256\uff09\u691c\u8a3c   \u2502\n\u2502  2. \u5229\u7528\u56de\u6570\u30c1\u30a7\u30c3\u30af\uff081\u65e55\u56de\u5236\u9650\uff09\u2502\n\u2502  3. LINE Content API\u304b\u3089\u753b\u50cf\u53d6\u5f97  \u2502\n\u2502  4. queue\/ \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58    \u2502\n\u2502  5. \u300c\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f\ud83c\udf73\u300d\u5373\u8fd4\u4fe1   \u2502\n\u2502  6. HTTP 200 \u3092\u5373\u8fd4\u5374            \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n        \u2193\uff08cron \u30671\u5206\u3054\u3068\u306b\u8d77\u52d5\uff09\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  worker.php\uff08\u975e\u540c\u671f\u30d0\u30c3\u30c1\u51e6\u7406\uff09   \u2502\n\u2502  1. \u30ad\u30e5\u30fc\u304b\u3089\u30b8\u30e7\u30d6\u53d6\u5f97          \u2502\n\u2502  2. \u753b\u50cf\u30921000px\u306b\u30ea\u30b5\u30a4\u30ba\uff08GD\uff09 \u2502\n\u2502  3. base64\u30a8\u30f3\u30b3\u30fc\u30c9              \u2502\n\u2502  4. Claude Vision API \u306b\u9001\u4fe1     \u2502\n\u2502  5. \u30ec\u30b7\u30d4\u751f\u6210\uff08\u6700\u592760\u79d2\uff09       \u2502\n\u2502  6. LINE Push API \u3067\u30ec\u30b7\u30d4\u9001\u4fe1   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n        \u2193\n\u30101\u301c2\u5206\u5f8c\u306b\u30e6\u30fc\u30b6\u30fc\u304c\u30ec\u30b7\u30d4\u3092\u53d7\u3051\u53d6\u308b\u3011<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%92%BB_%E6%8A%80%E8%A1%93%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF\"><\/span>\ud83d\udcbb \u6280\u8853\u30b9\u30bf\u30c3\u30af<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<table>\n<tr>\n<th>\u533a\u5206<\/th>\n<th>\u6280\u8853\u30fb\u30b5\u30fc\u30d3\u30b9<\/th>\n<\/tr>\n<tr>\n<td>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/td>\n<td>PHP 7.4+\u3001Apache\uff08\u5171\u6709\u30b5\u30fc\u30d0\u30fc\uff09<\/td>\n<\/tr>\n<tr>\n<td>\u753b\u50cf\u51e6\u7406<\/td>\n<td>PHP GD Library\uff08\u30ea\u30b5\u30a4\u30ba\u30fb\u5727\u7e2e\uff09<\/td>\n<\/tr>\n<tr>\n<td>AI<\/td>\n<td>Anthropic Claude Vision API\uff08claude-opus-4-6\uff09<\/td>\n<\/tr>\n<tr>\n<td>\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0<\/td>\n<td>LINE Messaging API\uff08Reply \/ Push \/ Content\uff09<\/td>\n<\/tr>\n<tr>\n<td>\u30ad\u30e5\u30fc\u7ba1\u7406<\/td>\n<td>\u30d5\u30a1\u30a4\u30eb\u30d9\u30fc\u30b9\uff08queue\/ \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff09<\/td>\n<\/tr>\n<tr>\n<td>\u30ec\u30fc\u30c8\u30ea\u30df\u30c3\u30c8<\/td>\n<td>\u30d5\u30a1\u30a4\u30eb\u30d9\u30fc\u30b9\uff08\u65e5\u4ed8+UserID\u306e\u30d5\u30a1\u30a4\u30eb\u540d\uff09<\/td>\n<\/tr>\n<\/table>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%82_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%A7%8B%E6%88%90\"><\/span>\ud83d\udcc2 \u30d5\u30a1\u30a4\u30eb\u69cb\u6210<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre><code>recipon\/\n\u251c\u2500\u2500 .env                # API\u30ad\u30fc\u30fb\u8a2d\u5b9a\uff08\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3600\uff09\n\u251c\u2500\u2500 .htaccess           # \u5916\u90e8\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\n\u251c\u2500\u2500 config.php          # .env\u8aad\u307f\u8fbc\u307f\u30fb\u5b9a\u6570\u5b9a\u7fa9\n\u251c\u2500\u2500 webhook.php         # LINE\u306eWebhook\u53d7\u4fe1\n\u251c\u2500\u2500 worker.php          # cron\u3067\u52d5\u304f\u30d0\u30c3\u30c1\u51e6\u7406\n\u251c\u2500\u2500 queue\/              # \u30b8\u30e7\u30d6\u30ad\u30e5\u30fc\uff08\u753b\u50cf\uff0bJSON\u30da\u30a2\uff09\n\u2514\u2500\u2500 ratelimit\/          # \u5229\u7528\u56de\u6570\u30ab\u30a6\u30f3\u30c8\u30d5\u30a1\u30a4\u30eb<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%B8_LINE_%E5%86%99%E7%9C%9F_OCR_%E3%81%AE%E8%A9%B3%E7%B4%B0\"><\/span>\ud83d\udcf8 LINE \u5199\u771f OCR \u306e\u8a73\u7d30<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>webhook.php \u3067\u306f\u53d7\u3051\u53d6\u3063\u305f\u753b\u50cf\u3092\u5373\u5ea7\u306b\u30ad\u30e5\u30fc\u306b\u4fdd\u5b58\u3057\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u3059\uff1a<\/p>\n<pre><code class=\"language-php\">\/\/ webhook.php - \u753b\u50cf\u30e1\u30c3\u30bb\u30fc\u30b8\u53d7\u4fe1\nif ($event['message']['type'] === 'image') {\n    $messageId = $event['message']['id'];\n\n    \/\/ LINE Content API \u304b\u3089\u753b\u50cf\u53d6\u5f97\uff0810\u79d2\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\uff09\n    $imageData = fetchLineImage($messageId, $channelToken);\n\n    \/\/ queue\/ \u306b\u4fdd\u5b58\n    $ts        = time();\n    $imgPath   = \"queue\/img_{$ts}_{$messageId}.jpg\";\n    $jobPath   = \"queue\/job_{$ts}_{$messageId}.json\";\n    file_put_contents($imgPath, $imageData);\n    file_put_contents($jobPath, json_encode([\n        'line_user_id' => $userId,\n        'image_path'   => basename($imgPath),\n        'created_at'   => date('Y-m-d H:i:s'),\n    ]));\n\n    \/\/ \u5373\u5ea7\u306b\u8fd4\u4fe1\u3057\u3066200\u3092\u8fd4\u3059\n    replyMessage($replyToken, \"\ud83d\udce5 \u98df\u6750\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f\uff01\u5c11\u3005\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\ud83c\udf73\", $channelToken);\n    http_response_code(200);\n    exit;\n}<\/code><\/pre>\n<p>worker.php \u3067\u306f Claude Vision API \u3067\u98df\u6750\u8a8d\u8b58\u3068\u30ec\u30b7\u30d4\u751f\u6210\u3092\u884c\u3044\u307e\u3059\uff1a<\/p>\n<pre><code class=\"language-php\">\/\/ worker.php - Claude Vision API \u3067\u30ec\u30b7\u30d4\u751f\u6210\n$imageB64 = base64_encode(file_get_contents($job['image_path']));\n\n$payload = [\n    'model'      => 'claude-opus-4-6',\n    'max_tokens' => 1500,\n    'system'     => implode(\"\\\\n\", [\n        '\u3042\u306a\u305f\u306f\u30ec\u30b7\u30d4\u63d0\u6848AI\u3067\u3059\u3002',\n        '\u30fbMarkdown\u3084\u8a18\u53f7\u306f\u4f7f\u308f\u305a\u3001\u7d75\u6587\u5b57\u3067\u8aad\u307f\u3084\u3059\u304f\u3057\u3066\u304f\u3060\u3055\u3044\u3002',\n        '\u30fb\u5199\u771f\u306b\u5199\u3063\u3066\u3044\u308b\u98df\u6750\u3068\u57fa\u672c\u8abf\u5473\u6599\u3060\u3051\u3067\u4f5c\u308c\u308b\u30ec\u30b7\u30d4\u30922\u301c3\u54c1\u63d0\u6848\u3057\u3066\u304f\u3060\u3055\u3044\u3002',\n        '\u30fb\u5404\u30ec\u30b7\u30d4\u306b\u6750\u6599\u30fb\u624b\u9806\uff085\u30b9\u30c6\u30c3\u30d7\u4ee5\u5185\uff09\u30fb\u8abf\u7406\u6642\u9593\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002',\n        '\u30fb\u51fa\u529b\u306f\u65e5\u672c\u8a9e\u3067\u30014900\u6587\u5b57\u4ee5\u5185\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002',\n    ]),\n    'messages' => [[\n        'role'    => 'user',\n        'content' => [\n            ['type' => 'image', 'source' => [\n                'type'       => 'base64',\n                'media_type' => 'image\/jpeg',\n                'data'       => $imageB64,\n            ]],\n            ['type' => 'text', 'text' => '\u3053\u306e\u98df\u6750\u3067\u30ec\u30b7\u30d4\u3092\u63d0\u6848\u3057\u3066\u304f\u3060\u3055\u3044\u3002'],\n        ],\n    ]],\n];\n\n\/\/ Claude API \u547c\u3073\u51fa\u3057\uff0860\u79d2\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\uff09\n$response = callClaudeApi($payload);\n\n\/\/ LINE Push API \u3067\u30ec\u30b7\u30d4\u9001\u4fe1\npushMessage($job['line_user_id'], $response, $channelToken);<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%98%85_%E8%8B%A6%E5%8A%B4%E3%81%97%E3%81%9F%E7%82%B9%E3%83%BB%E8%A9%A6%E8%A1%8C%E9%8C%AF%E8%AA%A4\"><\/span>\ud83d\ude05 \u82e6\u52b4\u3057\u305f\u70b9\u30fb\u8a66\u884c\u932f\u8aa4<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%E5%95%8F%E9%A1%8C%E2%91%A0%EF%BC%9ALINE_Webhook_%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88\"><\/span>\u554f\u984c\u2460\uff1aLINE Webhook \u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u6700\u521d\u306f webhook.php \u306e\u4e2d\u3067\u305d\u306e\u307e\u307e Claude API \u3092\u547c\u307c\u3046\u3068\u3057\u307e\u3057\u305f\u3002\u3057\u304b\u3057 <strong>LINE Webhook \u306e\u5fdc\u7b54\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306f30\u79d2<\/strong>\u3001\u4e00\u65b9 Claude API \u306e\u753b\u50cf\u51e6\u7406\u306b\u306f\u6700\u592760\u79d2\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3059\u308b\u3068LINE\u5074\u3067\u518d\u9001\u304c\u767a\u751f\u3057\u3001\u540c\u3058\u30ea\u30af\u30a8\u30b9\u30c8\u304c2\u56de\u51e6\u7406\u3055\u308c\u308b\u554f\u984c\u3082\u3002<\/p>\n<p><strong>\u89e3\u6c7a\u7b56\uff1a<\/strong>webhook \u306f\u300c\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f\u300d\u3068\u3059\u3050\u8fd4\u4fe1\u3057\u3066\u30ad\u30e5\u30fc\u306b\u4fdd\u5b58\u3059\u308b\u3060\u3051\u306b\u3057\u3066\u3001\u91cd\u3044\u51e6\u7406\u306fcron\u3067\u52d5\u304f worker.php \u306b\u5206\u96e2\u3057\u307e\u3057\u305f\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E5%95%8F%E9%A1%8C%E2%91%A1%EF%BC%9A%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AA%E3%81%97%E3%81%A7%E3%83%AC%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9F%E3%83%83%E3%83%88\"><\/span>\u554f\u984c\u2461\uff1a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306a\u3057\u3067\u30ec\u30fc\u30c8\u30ea\u30df\u30c3\u30c8<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u5171\u6709\u30b5\u30fc\u30d0\u30fc\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u308f\u305a\u306b\u300c1\u65e55\u56de\u307e\u3067\u300d\u306e\u5236\u9650\u3092\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n<p><strong>\u89e3\u6c7a\u7b56\uff1a<\/strong>\u30d5\u30a1\u30a4\u30eb\u540d\u3092 <code>{YYYY-MM-DD}_{userId}.txt<\/code> \u306b\u3059\u308b\u3053\u3068\u3067\u3001\u65e5\u4ed8\u304c\u5909\u308f\u308b\u3060\u3051\u3067\u81ea\u52d5\u30ea\u30bb\u30c3\u30c8\u3002\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u8eab\u306f\u30ab\u30a6\u30f3\u30c8\u6570\u306e\u307f\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u8a2d\u8a08\u3067\u3059\u3002<\/p>\n<pre><code class=\"language-php\">\/\/ \u30ec\u30fc\u30c8\u30ea\u30df\u30c3\u30c8\u306e\u30c1\u30a7\u30c3\u30af\n$rateFile = \"ratelimit\/\" . date('Y-m-d') . \"_{$userId}.txt\";\n$count    = file_exists($rateFile) ? (int)file_get_contents($rateFile) : 0;\n\nif ($count >= DAILY_LIMIT) {\n    replyMessage($replyToken, \"\u672c\u65e5\u306e\u5229\u7528\u4e0a\u9650\uff08\" . DAILY_LIMIT . \"\u56de\uff09\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u307e\u305f\u660e\u65e5\u3069\u3046\u305e\ud83d\ude0a\", $channelToken);\n    exit;\n}\nfile_put_contents($rateFile, $count + 1);<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E5%95%8F%E9%A1%8C%E2%91%A2%EF%BC%9A%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%A8API%E3%82%B3%E3%82%B9%E3%83%88\"><\/span>\u554f\u984c\u2462\uff1a\u753b\u50cf\u30b5\u30a4\u30ba\u3068API\u30b3\u30b9\u30c8<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u5143\u306e\u30b9\u30de\u30db\u5199\u771f\u3092\u305d\u306e\u307e\u307e\u9001\u308b\u3068\u753b\u50cf\u30c8\u30fc\u30af\u30f3\u6570\u304c\u5897\u3048\u3066API\u30b3\u30b9\u30c8\u304c\u8df3\u306d\u4e0a\u304c\u308a\u307e\u3059\u3002GD Library \u3067\u6700\u59271000px\u30fbJPEG 85% \u306b\u5727\u7e2e\u3059\u308b\u3053\u3068\u3067\u30011\u30ea\u30af\u30a8\u30b9\u30c8\u3042\u305f\u308a\u7d041,600\u30c8\u30fc\u30af\u30f3\u306b\u6291\u3048\u3089\u308c\u307e\u3057\u305f\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E5%95%8F%E9%A1%8C%E2%91%A3%EF%BC%9Aworkerphp_%E3%81%AE%E5%A4%9A%E9%87%8D%E8%B5%B7%E5%8B%95\"><\/span>\u554f\u984c\u2463\uff1aworker.php \u306e\u591a\u91cd\u8d77\u52d5<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>cron\u304c1\u5206\u3054\u3068\u306b\u8d77\u52d5\u3059\u308b\u305f\u3081\u3001\u524d\u306e\u51e6\u7406\u304c\u7d42\u308f\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u306b\u591a\u91cd\u5b9f\u884c\u3055\u308c\u308b\u30ea\u30b9\u30af\u304c\u3042\u308a\u307e\u3059\u3002\u30ed\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\uff0890\u79d2\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\uff09\u3067\u6392\u4ed6\u5236\u5fa1\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%A4%96_ClaudeCode%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F%E6%84%9F%E6%83%B3\"><\/span>\ud83e\udd16 ClaudeCode\u3067\u4f5c\u3063\u305f\u611f\u60f3<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Recipon \u3092\u4f5c\u308b\u969b\u3082 ClaudeCode \u3068\u4e00\u7dd2\u306b\u8a2d\u8a08\u3057\u307e\u3057\u305f\u3002\u7279\u306b\u826f\u304b\u3063\u305f\u306e\u306f\uff1a<\/p>\n<ul>\n<li><strong>\u8a2d\u8a08\u306e\u77db\u76fe\u3092\u6307\u6458\u3057\u3066\u304f\u308c\u308b<\/strong>\uff1a\u300cLINE \u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u5236\u7d04\u304c\u3042\u308b\u306e\u3067\u30ad\u30e5\u30fc\u8a2d\u8a08\u304c\u5fc5\u8981\u3067\u3059\u300d\u3068\u81ea\u5206\u304b\u3089\u63d0\u6848\u3057\u3066\u304f\u308c\u305f<\/li>\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u81ea\u52d5\u7684\u306b\u7d44\u307f\u8fbc\u3080<\/strong>\uff1a.htaccess \u306b\u3088\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4fdd\u8b77\u3001HMAC-SHA256 \u691c\u8a3c\u3001\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306a\u3069<\/li>\n<li><strong>\u30b3\u30b9\u30c8\u8a66\u7b97\u307e\u3067\u8003\u3048\u3066\u304f\u308c\u308b<\/strong>\uff1aAPI\u306e\u5229\u7528\u30b3\u30b9\u30c8\u3092\u30c8\u30fc\u30af\u30f3\u6570\u304b\u3089\u6982\u7b97\u3057\u3066\u3001\u30ec\u30fc\u30c8\u30ea\u30df\u30c3\u30c8\u306e\u8a2d\u8a08\u6839\u62e0\u3092\u793a\u3057\u3066\u304f\u308c\u305f<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%E2%9C%85_%E3%81%BE%E3%81%A8%E3%82%81\"><\/span>\u2705 \u307e\u3068\u3081<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u300c\u51b7\u8535\u5eab\u306e\u5199\u771f\u3092\u9001\u308b\u3060\u3051\u3067\u30ec\u30b7\u30d4\u304c\u6765\u308b\u300d\u3068\u3044\u3046\u30b7\u30f3\u30d7\u30eb\u306a\u30a2\u30a4\u30c7\u30a2\u3067\u3059\u304c\u3001LINE \u306e\u5236\u7d04\u30fbAI\u306e\u30b3\u30b9\u30c8\u30fb\u5171\u6709\u30b5\u30fc\u30d0\u30fc\u306e\u5236\u9650\u306a\u3069\u3001\u5b9f\u88c5\u306b\u306f\u610f\u5916\u3068\u8003\u616e\u70b9\u304c\u591a\u304f\u3042\u308a\u307e\u3057\u305f\u3002\u305d\u308c\u3067\u3082 ClaudeCode \u306e\u30b5\u30dd\u30fc\u30c8\u3067\u8a2d\u8a08\u304b\u3089\u5b9f\u88c5\u307e\u3067\u4e00\u6c17\u306b\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u65e5\u5e38\u306e\u3061\u3087\u3063\u3068\u3057\u305f\u300c\u56f0\u3063\u305f\u300d\u3092AI\u3067\u89e3\u6c7a\u3059\u308b\u306e\u306f\u3001\u3053\u308c\u304b\u3089\u3082\u7d9a\u3051\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7686\u69d8\u3053\u3093\u306b\u3061\u306f\uff01 \u300c\u51b7\u8535\u5eab\u306b\u4f55\u304c\u3042\u308b\u304b\u306f\u308f\u304b\u308b\u3051\u3069\u3001\u4f55\u3092\u4f5c\u308c\u3070\u3044\u3044\u304b\u308f\u304b\u3089\u306a\u3044\u300d\u2014\u2014\u305d\u3093\u306a\u65e5\u5e38\u306e\u3042\u308b\u3042\u308b\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u3001\u98df\u6750\u306e\u5199\u771f\u3092\u9001\u308b\u3060\u3051\u3067\u30ec\u30b7\u30d4\u3092\u63d0\u6848\u3057\u3066\u304f\u308c\u308bLINE Bot\u300cRecipon\uff08\u30ec\u30b7\u307d\u3093\uff09\u300d\u3092\u8003\u3048\u3066\u4f5c\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.andount.com\/index.php\/2026\/04\/11\/270\/\">Read More: \u5199\u771f\u3092\u9001\u308b\u3068\u6620\u3063\u3066\u3044\u2026 &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":271,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,7],"tags":[],"class_list":["post-270","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-webapp","category-lifehack","category-ai"],"_links":{"self":[{"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/posts\/270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/comments?post=270"}],"version-history":[{"count":1,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/posts\/270\/revisions"}],"predecessor-version":[{"id":272,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/posts\/270\/revisions\/272"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/media\/271"}],"wp:attachment":[{"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/media?parent=270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/categories?post=270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.andount.com\/index.php\/wp-json\/wp\/v2\/tags?post=270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}