{"id":5420,"date":"2023-04-20T12:07:48","date_gmt":"2023-04-20T03:07:48","guid":{"rendered":"https:\/\/engineering.webstudio168.jp\/?p=5420"},"modified":"2023-04-20T16:47:06","modified_gmt":"2023-04-20T07:47:06","slug":"chatgpt-matrix-javascript","status":"publish","type":"post","link":"https:\/\/engineering.webstudio168.jp\/blog\/chatgpt-matrix-javascript\/","title":{"rendered":"ChatGPT\u3068\u5bfe\u8a71\u3057\u3066JavaScript\u3067\u6620\u753b\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u98a8\u306e\u30a8\u30d5\u30a7\u30af\u30c8Text Rain\u3092\u30d6\u30e9\u30c3\u30b7\u30e5\u30a2\u30c3\u30d7\u3057\u305f\u8a71\u3010\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u5bfe\u5fdc\u3011"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 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\">\u76ee\u6b21<\/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:\/\/engineering.webstudio168.jp\/blog\/chatgpt-matrix-javascript\/#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89\" >\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">\u3082\u3046\u306d\u3001\u30a8\u30f3\u30b8\u30cb\u30a2\u306e\u5b58\u5728\u610f\u7fa9\u304c\u554f\u308f\u308c\u308b\u6642\u4ee3\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3092\u75db\u611f\u3057\u3066\u307e\u3059\u3002\u306a\u304b\u306a\u304b\u518d\u73fe\u304c\u96e3\u3057\u304b\u3063\u305f\u6620\u753b\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u306e\u3042\u306e\u30a8\u30d5\u30a7\u30af\u30c8\uff08\u901a\u79f0\u3001Matrix text rain\uff09\u3092\u3069\u3046\u3084\u3063\u3066\u8868\u73fe\u3057\u3066\u3044\u308b\u306e\u304b\u6c17\u306b\u306a\u3063\u3066ChatGPT\u306b\u52b9\u3044\u3066\u307f\u305f\u3093\u3067\u3059\u3088\u3002\u5358\u7d14\u306b\u4ed5\u7d44\u307f\u3092\u77e5\u308a\u305f\u304b\u3063\u305f\u3060\u3051\u306a\u3093\u3067\u3059\u3051\u3069\u3001\u3044\u308d\u3044\u308d\u6539\u826f\u70b9\u3092\u6307\u6458\u3057\u3066\u3044\u3063\u305f\u3089\u307b\u307c\u307b\u307c\u5b8c\u6210\u7248\u3068\u3057\u3066\u52d5\u4f5c\u3059\u308b\u3082\u306e\u304c\u51fa\u6765\u3066\u3057\u307e\u3063\u305f\u3093\u3067\u3059\u2026\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3068\u308a\u3042\u3048\u305a\u3067\u304d\u305f\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u63b2\u8f09\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<style>\n      #canvas-container {\n        position: relative;\n        width: 100%;\n        height: 0;\n        padding-bottom: 60%;\n        \/* \u30ad\u30e3\u30f3\u30d0\u30b9\u306e\u7e26\u6a2a\u6bd4\u306f 5:3 \u3068\u3059\u308b *\/\n        background-color: black;\n      }\n\n      #canvas {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n      }\ncanvas {\n  width: 100%;\n  height: 100%;\n  display: block;\n}\n    <\/style>\n<div id=\"canvas-container\">\n      <canvas id=\"canvas\"><\/canvas>\n    <\/div>\n\n<script>\nconst canvas = document.getElementById('canvas');\nconst ctx = canvas.getContext('2d');\nconst fontFamily = 'Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace';\nlet fontSize = 10;\nlet columns = Math.floor(canvas.width \/ fontSize);\nlet drops = [];\n\nfunction draw() {\n  \/\/ \u80cc\u666f\u3092\u63cf\u753b\n  ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';\n  ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n  \/\/ \u6587\u5b57\u5217\u3092\u63cf\u753b\n  ctx.font = `${fontSize}px ${fontFamily}`;\n  ctx.fillStyle = '#0f0';\n  for (let i = 0; i < drops.length; i++) {\n    const text = String.fromCharCode(Math.random() * (0x30a0 - 0x3040) + 0x3040);\n    const x = i * fontSize;\n    const y = drops[i] * fontSize;\n    ctx.fillText(text, x, y);\n    if (y > canvas.height && Math.random() > 0.975) {\n      drops[i] = 0;\n    }\n    drops[i]++;\n  }\n}\n\nfunction resizeCanvas() {\n  const container = document.getElementById('canvas-container');\n  canvas.width = container.clientWidth;\n  canvas.height = canvas.width * 0.6; \/\/ \u30ad\u30e3\u30f3\u30d0\u30b9\u306e\u7e26\u6a2a\u6bd4\u306f 5:3 \u3068\u3059\u308b\n  columns = Math.floor(canvas.width \/ fontSize);\n  drops.length = columns;\n  drops.fill(0);\n}\n\nfunction loop() {\n  draw();\n  requestAnimationFrame(loop);\n}\n\nwindow.addEventListener('resize', () => {\n  fontSize = Math.max(Math.floor(canvas.width \/ 100), 5); \/\/ 100px\u672a\u6e80\u306b\u306f\u3057\u306a\u3044\n  resizeCanvas();\n});\nresizeCanvas();\nloop();\n\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\">\u521d\u7a3f\uff08\u6700\u521d\u306b\u51fa\u6765\u4e0a\u304c\u3063\u305fJavaScript\u306e\u30b3\u30fc\u30c9\uff09\u3067\u3082\u5341\u5206\u4ed5\u7d44\u307f\u304c\u7406\u89e3\u51fa\u6765\u305f\u306e\u3067\u3059\u304c\u3001\u7a81\u304d\u8a70\u3081\u3066\u3044\u304f\u3068\u3061\u3087\u3053\u3061\u3087\u3053\u4e0d\u5177\u5408\u304c\u3042\u3063\u305f\u306e\u3067\u305d\u308c\u3092\u5c11\u3057\u305a\u3064\u76f4\u3057\u3066\u3044\u304d\u307e\u3057\u305f\u3002\u305f\u3063\u305f30\u5206\u304f\u3089\u3044\u3067\u3059\u3088\u2026\u2026\u3067\u3001\u3053\u306e\u4ed5\u4e0a\u304c\u308a\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3068\u308a\u3042\u3048\u305a\u3001\u6587\u5b57\u306e\u63cf\u753b\u304c\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5e45\u306e100%\u307e\u3067\u3055\u308c\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u6307\u6458\u3057\u3066\u3001\u305d\u306e\u3042\u3068\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u306b\u3082\u5bfe\u5fdc\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u306fChatGPT\u306e\u4e0a\u624b\u3044\u4f7f\u3044\u65b9\u306a\u306e\u3060\u308d\u3046\u304b\u2026\u2026\u305d\u308c\u3068\u3082\u7981\u65ad\u306e\u6249\u3092\u958b\u3051\u3066\u3057\u307e\u3063\u305f\u306e\u3060\u308d\u3046\u304b\u2026\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3068\u308a\u3042\u3048\u305a\u52d5\u4f5c\u78ba\u8a8d\u6e08\u306e\u30b3\u30fc\u30c9\u3092\u63b2\u8f09\u3057\u3066\u304a\u304d\u307e\u3059\u6ce3<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89\"><\/span>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-html\" data-file=\"matrix.html\" data-lang=\"HTML\"><code>&lt;div id=&quot;canvas-container&quot;&gt;\n  &lt;canvas id=&quot;canvas&quot;&gt;&lt;\/canvas&gt;\n&lt;\/div&gt;<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-css\" data-file=\"matrix.css\" data-lang=\"CSS\"><code>#canvas-container {\n  position: relative;\n  width: 100%;\n  height: 0;\n  padding-bottom: 60%;\n  \/* \u30ad\u30e3\u30f3\u30d0\u30b9\u306e\u7e26\u6a2a\u6bd4\u306f 5:3 \u3068\u3059\u308b *\/\n  background-color: black;\n}\n#canvas {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-js\" data-file=\"matrix.js\" data-lang=\"JavaScript\"><code>const canvas = document.getElementById(&#39;canvas&#39;);\nconst ctx = canvas.getContext(&#39;2d&#39;);\nconst fontFamily = &#39;Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace&#39;;\nlet fontSize = 10;\nlet columns = Math.floor(canvas.width \/ fontSize);\nlet drops = [];\n\nfunction draw() {\n    \/\/ \u80cc\u666f\u3092\u63cf\u753b\n    ctx.fillStyle = &#39;rgba(0, 0, 0, 0.1)&#39;;\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n    \/\/ \u6587\u5b57\u5217\u3092\u63cf\u753b\n    ctx.font = `${fontSize}px ${fontFamily}`;\n    ctx.fillStyle = &#39;#0f0&#39;;\n    for (let i = 0; i &lt; drops.length; i++) {\n        const text = String.fromCharCode(Math.random() * (0x30a0 - 0x3040) + 0x3040);\n        const x = i * fontSize;\n        const y = drops[i] * fontSize;\n        ctx.fillText(text, x, y);\n        if (y &gt; canvas.height && Math.random() &gt; 0.975) {\n            drops[i] = 0;\n        }\n        drops[i]++;\n    }\n}\n\nfunction resizeCanvas() {\n    const container = document.getElementById(&#39;canvas-container&#39;);\n    canvas.width = container.clientWidth;\n    canvas.height = canvas.width * 0.6; \/\/ \u30ad\u30e3\u30f3\u30d0\u30b9\u306e\u7e26\u6a2a\u6bd4\u306f 5:3 \u3068\u3059\u308b\n    columns = Math.floor(canvas.width \/ fontSize);\n    drops.length = columns;\n    drops.fill(0);\n}\n\nfunction loop() {\n    draw();\n    requestAnimationFrame(loop);\n}\n\nwindow.addEventListener(&#39;resize&#39;, () =&gt; {\n    fontSize = Math.max(Math.floor(canvas.width \/ 100), 5); \/\/ 100px\u672a\u6e80\u306b\u306f\u3057\u306a\u3044\n    resizeCanvas();\n});\nresizeCanvas();\nloop();\n<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u3082\u3046\u306d\u3001\u30a8\u30f3\u30b8\u30cb\u30a2\u306e\u5b58\u5728\u610f\u7fa9\u304c\u554f\u308f\u308c\u308b\u6642\u4ee3\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3092\u75db\u611f\u3057\u3066\u307e\u3059\u3002\u306a\u304b\u306a\u304b\u518d\u73fe\u304c\u96e3\u3057\u304b\u3063\u305f\u6620\u753b\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u306e\u3042\u306e\u30a8\u30d5\u30a7\u30af\u30c8\uff08\u901a\u79f0\u3001Matrix text rain\uff09\u3092\u3069\u3046\u3084\u3063\u3066\u8868\u73fe\u3057\u3066\u3044\u308b\u306e\u304b\u6c17\u306b\u306a\u3063\u3066Chat [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5440,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[8,92],"class_list":["post-5420","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-javascript","tag-92"],"_links":{"self":[{"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/posts\/5420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/comments?post=5420"}],"version-history":[{"count":22,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/posts\/5420\/revisions"}],"predecessor-version":[{"id":5450,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/posts\/5420\/revisions\/5450"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/media\/5440"}],"wp:attachment":[{"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/media?parent=5420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/categories?post=5420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/engineering.webstudio168.jp\/blog\/wp-json\/wp\/v2\/tags?post=5420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}