{"data":{"site":{"siteMetadata":{"title":"bauhausify","siteUrl":"https://www.bauhausify.com","subtitle":"美大出身のWEBエンジニアリング奮闘記","descriptionMyself":"\n多摩美術大学<br>プロダクトデザイン専攻卒業 -> <br>GUIデザイン会社勤務 -><br>\n現在フロントエンジニア<br>\n<br>\nMy site -><br>\n<a href=\"http://www.mwrote.com\">www.mwrote.com</a>\n"}},"markdownRemark":{"id":"2e52640f-36d6-5268-99ea-9d58492ffec5","html":"<h2 id=\"前提知識-p5jsの書き方とその特徴\"><a href=\"#%E5%89%8D%E6%8F%90%E7%9F%A5%E8%AD%98-p5js%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%A8%E3%81%9D%E3%81%AE%E7%89%B9%E5%BE%B4\" aria-label=\"前提知識 p5jsの書き方とその特徴 permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>前提知識 p5.jsの書き方とその特徴</h2>\n<p>p5.jsはその書き方に着目すると2パターンあります。</p>\n<h3 id=\"標準の書き方グローバルモード\"><a href=\"#%E6%A8%99%E6%BA%96%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89\" aria-label=\"標準の書き方グローバルモード permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>標準の書き方(グローバルモード)</h3>\n<p>まず<a href=\"https://p5js.org/get-started/\" target=\"_blank\" rel=\"noopener noreferrer\">公式のGet Startedページ</a>に記載されている書き方です。<br>\n後で登場するインスタンスモードと区別するためにこの記事では<em>グローバルモード</em>と呼ばせてください。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">createCanvas</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">draw</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">background</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">fill</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">noStroke</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">ellipse</span><span class=\"token punctuation\">(</span>width<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> height<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">50</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>本家の<a href=\"https://processing.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Processing</a>の書き方にできるだけ似せており非常に書きやすいです。<br>\n簡単にsketchを書きたい場合、プロトタイプや研究用として暫定的に使いたい場合、他のJSライブラリを使わない小規模なサイトの場合に向いています。<br>\nしかし、グローバル領域を汚染している(windowオブジェクトの中に直接p5.jsが定義されている)ので、他のJSファイルや今後書いていくJSファイルと定義がコンフリクトする可能性があり、プロダクションビルドではあまり使いたくない方法です。</p>\n<h3 id=\"インスタンスモード\"><a href=\"#%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89\" aria-label=\"インスタンスモード permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>インスタンスモード</h3>\n<p><a href=\"https://p5js.org/examples/instance-mode-instance-container.html\" target=\"_blank\" rel=\"noopener noreferrer\">公式のInstance Containerページ</a>に記載されています。</p>\n<div class=\"gatsby-code-title gatsby-remark-code-titles\">index.html</div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">'</span>container<span class=\"token punctuation\">'</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<div class=\"gatsby-code-title gatsby-remark-code-titles\">index.js</div>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">sketch</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">p</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  p<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">setup</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    p<span class=\"token punctuation\">.</span><span class=\"token function\">createCanvas</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  p<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">draw</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    p<span class=\"token punctuation\">.</span><span class=\"token function\">background</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    p<span class=\"token punctuation\">.</span><span class=\"token function\">fill</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    p<span class=\"token punctuation\">.</span><span class=\"token function\">noStroke</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    p<span class=\"token punctuation\">.</span><span class=\"token function\">ellipse</span><span class=\"token punctuation\">(</span>width<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> height<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">50</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n\n<span class=\"token keyword\">new</span> <span class=\"token class-name\">p5</span><span class=\"token punctuation\">(</span>sketch<span class=\"token punctuation\">,</span> <span class=\"token string\">'contaienr'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>グローバルモードと比べると、表示結果は同じなのですが、明らかに記述量が多く<em>書きづらい</em>ですね。<br>\nただしこの場合、グローバル領域を汚染しているのは<code class=\"language-text\">p5</code>という関数のみです。<br>\nなので、こちらは少し書きづらいけど、安全な書き方です。さらに、p5を実行する場所も指定できます。</p>\n<p>注意点として、window直下に<code class=\"language-text\">setup</code>もしくは<code class=\"language-text\">draw</code>関数を定義しないことです。<br>\nもし定義してしまうと、インスタンスモードではなくなりグローバルモードになります。</p>\n<p>ちなみにBabelなどのES6環境下であれば、<code class=\"language-text\">function</code>を省略できる文、少しコード量は減ります。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">const sketch = p => {\n  p.setup = () => {\n    p.createCanvas(100, 100);\n  }\n\n  p.draw = () => {\n    p.background(0);\n    p.fill(100);\n    p.noStroke();\n    p.ellipse(width/2, height/2, 50);\n  }\n}</code></pre></div>\n<h2 id=\"p5js具体的な読み込ませ方\"><a href=\"#p5js%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E6%96%B9\" aria-label=\"p5js具体的な読み込ませ方 permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>p5.js具体的な読み込ませ方</h2>\n<p>ざっと考えると以下のパターンが考えられます。</p>\n<ol>\n<li>scriptタグで読み込ませ、グローバルモードで実行</li>\n<li>作品ごとに別URLで準備しておき、使いたいページ内でiframeとして実行する</li>\n<li>scriptタグで読み込ませ、インスタンスモードで実行</li>\n</ol>\n<h3 id=\"scriptタグで読み込ませグローバルモードで実行\"><a href=\"#script%E3%82%BF%E3%82%B0%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C\" aria-label=\"scriptタグで読み込ませグローバルモードで実行 permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>scriptタグで読み込ませ、グローバルモードで実行</h3>\n<p>小規模なサイトや他のJSライブラリを使っていなく、自由にJSを書ける環境であればおすすめです。<br>\nしかし、大概の本番サイトの場合、グローバル汚染するのでおすすめしません。</p>\n<h3 id=\"作品ごとに別urlで準備しておき使いたいページ内でiframeとして実行する\"><a href=\"#%E4%BD%9C%E5%93%81%E3%81%94%E3%81%A8%E3%81%AB%E5%88%A5url%E3%81%A7%E6%BA%96%E5%82%99%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8D%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%A7iframe%E3%81%A8%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B\" aria-label=\"作品ごとに別urlで準備しておき使いたいページ内でiframeとして実行する permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>作品ごとに別URLで準備しておき、使いたいページ内でiframeとして実行する</h3>\n<p>ハック的なやり方です。<br>\nただサイト構造やサーバーサイドを設計する必要があり、iframeをページ内で扱う必要があるため、扱いづらく複雑です。<br>\niframeを前提とした環境を整備できるのであれば、おそらく一番スマートなやり方ですが、導入の敷居が高いです。</p>\n<h3 id=\"scriptタグで読み込ませインスタンスモードで実行\"><a href=\"#script%E3%82%BF%E3%82%B0%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C\" aria-label=\"scriptタグで読み込ませインスタンスモードで実行 permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>scriptタグで読み込ませ、インスタンスモードで実行</h3>\n<p>書きづらさを除けば、導入の敷居が低く、グローバル汚染もほぼなく一番現実的な方法です。<br>\nいきなりインスタンスモードで書いてもいいですが、ローカルや<a href=\"https://editor.p5js.org/\" target=\"_blank\" rel=\"noopener noreferrer\">公式のp5.jsのブラウザ実行環境</a>でグローバルモードで最終的なコードを完成させたあと、インスタンスモードに変換するのがおすすめです。<br></p>\n<h2 id=\"まとめ\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>まとめ</h2>\n<ul>\n<li><code class=\"language-text\">setup</code>か<code class=\"language-text\">draw</code>関数をグローバルスコープで定義するとグローバルモードになる、それ以外だとインスタンスモード</li>\n<li>グローバルモードは書きやすいけど、グローバル汚染する</li>\n<li>インスタンスモードは書きづらいけど、グローバル汚染しない</li>\n<li>練習、プロトタイプ、研究では、書きやすいグローバルモードがおすすめ</li>\n<li>本番サイトではグローバル汚染を避けるため、インスタンスモードかおすすめ</li>\n<li>サーバーサイドも手を出せるのであれば、グローバルモードでiframeもあり</li>\n<li>ReactやVueのコンポーネントとして使う場合は後日、別記事でご紹介</li>\n</ul>","fields":{"slug":"/2019-09-14_p5-jsを本番サイトで使う方法/"},"tableOfContents":"<ul>\n<li>\n<p><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#%E5%89%8D%E6%8F%90%E7%9F%A5%E8%AD%98-p5js%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%A8%E3%81%9D%E3%81%AE%E7%89%B9%E5%BE%B4\">前提知識 p5.jsの書き方とその特徴</a></p>\n<ul>\n<li><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#%E6%A8%99%E6%BA%96%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89\">標準の書き方(グローバルモード)</a></li>\n<li><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89\">インスタンスモード</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#p5js%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E6%96%B9\">p5.js具体的な読み込ませ方</a></p>\n<ul>\n<li><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#script%E3%82%BF%E3%82%B0%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C\">scriptタグで読み込ませ、グローバルモードで実行</a></li>\n<li><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#%E4%BD%9C%E5%93%81%E3%81%94%E3%81%A8%E3%81%AB%E5%88%A5url%E3%81%A7%E6%BA%96%E5%82%99%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8D%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%A7iframe%E3%81%A8%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B\">作品ごとに別URLで準備しておき、使いたいページ内でiframeとして実行する</a></li>\n<li><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#script%E3%82%BF%E3%82%B0%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C\">scriptタグで読み込ませ、インスタンスモードで実行</a></li>\n</ul>\n</li>\n<li><a href=\"/2019-09-14_p5-js%E3%82%92%E6%9C%AC%E7%95%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/#%E3%81%BE%E3%81%A8%E3%82%81\">まとめ</a></li>\n</ul>","frontmatter":{"date":"2019.09.14","title":"p5.jsを本番サイトで使う方法","cover":"","category":"Coding","excerpt":"p5.jsをいざプロダクションビルド(本番サイト向け)で使う場合、一体どのような方法で使うのが最適でしょうか。p5.jsの特徴を踏まえ、代表的な使い方をご紹介します。"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"2e52640f-36d6-5268-99ea-9d58492ffec5","next":{"path":"/2019-09-11_p5-jsスケッチトレーニング-円弧の線を円周上に沿って動かす/","title":"p5.jsスケッチトレーニング -円弧の線を円周上に沿って動かす-","category":"Coding"},"prev":{"path":"/2019-09-17_p5-jsをreactのコンポーネントとして実行する方法/","title":"p5.jsをReactのコンポーネントとして実行する方法","category":"Coding"},"relatedPosts":[{"id":"d5a69a1d-62b7-5a8b-8f18-975dfee3ae96","fields":{"slug":"/2019-09-11_p5-jsスケッチトレーニング-円弧の線を円周上に沿って動かす/"},"frontmatter":{"title":"p5.jsスケッチトレーニング -円弧の線を円周上に沿って動かす-","date":"2019-09-11T00:00:00.000Z","excerpt":"p5.jsのarcと簡単なEasing式を使い、円弧の線を動かします。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"1eb35481-156d-520b-ab66-a911316fe17b","fields":{"slug":"/2019-07-03_Webで簡単にコードで絵を描くp5-js/"},"frontmatter":{"title":"Webで簡単にコードで絵を描くp5.js","date":"2019-07-03T14:15:51.667Z","excerpt":"描画ライブラリp5.jsとCodepenを使い、ブラウザ上で簡単にスケッチを描く方法を紹介します。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"aa5f4477-fc03-52d8-a793-d1abdb3a7ecd","fields":{"slug":"/2019-09-02_p5jsのコードをsketchファイル上で実行する方法/"},"frontmatter":{"title":"p5jsのコードをsketchファイル上で実行する方法","date":"2019-09-02T00:00:00.000Z","excerpt":"Sketchで幾何学的なパターンを描くのに最適な、Processing(p5js)のコードをSketch上で実行できるPluginを紹介します。","templateKey":"post","category":"Coding","propertags":["p5js","sketch"],"commontags":["javascript"]}},{"id":"b24fa0f2-8884-5053-9f12-a2dbc1ab9fc6","fields":{"slug":"/2019-09-17_p5-jsをreactのコンポーネントとして実行する方法/"},"frontmatter":{"title":"p5.jsをReactのコンポーネントとして実行する方法","date":"2019-09-17T07:53:50.970Z","excerpt":"p5.jsを直接ページ内に読み込ませるのではなく、Reactなどのコンポーネントの中で実行する方法をコードベースでご紹介します。","templateKey":"post","category":"Coding","propertags":["p5js","react"],"commontags":["component","javascript"]}},{"id":"a9f2125a-caa7-5d36-a7d1-c68b1a35d0fa","fields":{"slug":"/2019-07-15_Ptsjsによる実践ジェネラティブアート/"},"frontmatter":{"title":"Pts.jsによる実践ジェネラティブアート","date":"2019-07-15T00:00:00.000Z","excerpt":"Ptsという幾何学的な図形を描画するのに特化したJavaScriptライブラリをご紹介します。","templateKey":"post","category":"Coding","propertags":["ptsjs"],"commontags":["generative","javascript"]}}]}}