{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/create-cheap-apps-about-girlish-number/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"e9b4b5ba-6a5c-5f35-8ab0-cb2505eecee8","excerpt":"この記事は12/8 クソアプリ Advent Calendarの記事です。 表題のとおりです。 はい。 はいじゃないが。ということでアプリの紹介と内部で使用した技術の紹介をしようと思います。 アプリの概要 URLはこちらです。 なお、 PC版Chrome…","html":"<p>この記事は<a href=\"http://qiita.com/advent-calendar/2016/kusoapp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">12/8 クソアプリ Advent Calendar</a>の記事です。</p>\n<p>表題のとおりです。 <strong>はい。</strong></p>\n<p>はいじゃないが。ということでアプリの紹介と内部で使用した技術の紹介をしようと思います。</p>\n<!--more-->\n<h2 id=\"アプリの概要\" style=\"position:relative;\"><a href=\"#%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E6%A6%82%E8%A6%81\" aria-label=\"アプリの概要 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>アプリの概要</h2>\n<p>URLはこちらです。 なお、 <strong>PC版Chromeでしか動作確認してません。</strong></p>\n<blockquote>\n<p>— <a href=\"http://closet.leko.jp/2016/gahaha/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">難波社長と「勝ったな ガハハ」</a> > ※予告なしに非公開にする恐れがあります。あらかじめご了承ください。</p>\n</blockquote>\n<p>スクショはこんな感じ。</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 668px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/940fbb7537e13a687dae18a820a42d32/ae694/Screen-Shot-2016-11-27-at-10.22.44-PM.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 137.125748502994%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'549\\'%20viewBox=\\'0%200%20400%20549\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M5%2023l-2%201-2%201%202%201%202%202-2%201c-3%200-1%206%203%207l3%201H5l-3%201%203%201%202%201-3%201c-3%201-3%202%200%203l2%201-2%201-2%203c0%202%203%201%205-1l1-3%203%202c4%203%206%202%203-1l-2-2h2l2-1c0-1-1-2-3-2l-3-1%203-1%203-1-3-1h-3l2-1%204-2c1-2%201%201%201%207l1%2010%202-1%206-1%205-1-2-2c-2%200-3-1-3-2l2-2%202-1-2-2-2-2%202-2%202-1-2-1-2-2c0-1%201-2%203-2%203%200%203-2%200-3l-2-2c1-3-2-4-2-1l-3%203v-2l-1-3c-1%200-2%201-2%203-2%204-6%207-6%204l2-2%202-1-2-1-2-1-1-2-2%202-1%201-1-1-1-2-2%202m46%200c0%202-1%202-4%202h-4v9l-2%2012-1%204c2%201%204-3%205-9l1-5%202%204c3%204%203%204-3%208v2c2%200%203%200%205-2l3-2%204%202c3%202%204%202%205%201s0-1-2-3c-5-2-5-2-2-6%203-5%202-7-1-7s-3%200-3-2%201-3%202-3c2%200%203%200%202%202%200%203%202%202%203-1%202-3%202-4-3-4-3%200-4%200-4-2l-1-2-2%202m19%201c1%202%200%202-2%202l-2%202%204%201c5%200%205%201-1%206-3%203-4%205-3%206l2-1c2-2%203-1%203%205l1%206%201-7c0-6%200-6%202-4h3c1-1%201-1-1-3l-3-2%202-3c2-4%202-6-1-6l-2-2c0-2-1-3-2-3l-1%203m14%202c0%204-1%205-3%205-4%200-4%203%200%203%202%200%203%200%203%206v6h-4c-3%200-4%200-4%202l10%201%209-1c0-2-1-2-4-2h-4V33h3l4-1-3-1h-4v-5c0-7-3-7-3%200m127-3c0%204-1%204-3%201-1-3-3-3-3%200v3c-2%201%200%203%202%203h2c0%201-1%202-3%202l-3%201V22h-8v12a260%20260%200%20010%2016l2-5c0-4%201-5%202-5%202%200%202%201%202%204l-1%203-2%202%202%201c2%200%203-1%203-5s1-5%205-3l2%201-3%202c-3%203-4%205-2%205s7-5%207-7l3-1c2%200%202%200%202%202l-1%202-2%201-2%202c0%201%204%202%206%200l1-5%201-4c3%201%203-1%201-3l-2-2h2l2-1c0-1-1-2-3-2-4%200-5-2-1-2%203-1%204-3%201-3-2%200-2%200-1-1l1-3c0-2-2-1-3%202-2%203-4%203-4-1%201-2%201-3-1-3l-1%202m-108%206c0%207%200%207-3%207l-3%201%203%201c3%200%203%200%203%205%200%204%200%204-2%204s-3%201-3%202%202%201%209-1l6-3c0-1%201-1%203%201%205%203%209%205%2010%203a2234%202234%200%2001-5-4l-3-1%202-2c2-1%203-3%202-3l2-1%202-1-10-1-10-1%208-1c6%200%208-1%209-2l-8-1-9-1%208-1%209-1-8-1-9-1%209-1c13%200%2011-2-2-2h-10v6m35-6l1%206c1%204%201%204-2%207-5%204-5%206-2%209%202%203%203%203%2011%203s9%200%209-2l-7-1c-9%200-11%200-11-3s3-5%2011-8l6-3c0-2-2-2-6%200l-5%201-1-5c-1-4-4-7-4-4m127%202c0%203%200%203-3%203-2-1-3-1-3%201l3%201c3%200%203%202%200%2011-3%206-3%2010%200%207l5-15c0-2%202-3%204-3%204-1%204-4%200-3-3%200-3%200-2-2%200-4-3-4-4%200m33%200c-1%203-1%203-4%203-2-1-3-1-3%201l3%201c3%200%203%201-1%208l-2%206c2%201%204-1%206-8%202-4%203-6%206-6%203-1%204-3%200-3-2%200-3%200-2-2l-1-3c-1%200-2%201-2%203m44%201v3h-4l-5%201%204%201%204%201c1%201-2%209-6%2012-2%202-3%203-2%204%202%203%2010-6%2011-14%201-3%201-3%205-3h4v4c0%208-1%2011-4%2010-3%200-4%203-1%204%205%202%208-4%208-15v-5h-5c-5%200-6-1-6-4%200-4-3-4-3%201m-108%207l-5%203h7c7-2%2011%200%2011%203%200%204-3%206-8%207-4%200-6%203-2%203%207%200%2013-5%2013-10%200-6-6-8-16-6m74%203c0%203%200%203-3%203s-7%203-7%205c0%205%2010%207%2012%203l2-3%202%201c2%202%204%202%204%200l-3-3c-4-2-4-3-4-6l-1-4c-2%200-2%201-2%204M198%20138l-8%203c-3%202-5%203-10%203-11%200-19%205-31%2017l-13%2013-5%206-7%206-4%204v12c0%2013%200%2015-5%2016-2%201-5-1-5-4l-1-1c-4%200%201%2010%205%2012%205%201%200%208-6%208-4%200-4%201%200%204%205%204%2014%205%2019%202l4-6%202-4%201%203c2%203%204%205%204%203l-2-4-2-3%202-5c3-5%208-8%2014-8%205%200%205-1%200-3-6-3-8-2-11%202l-2%203v-17l4-4c3-2%205-3%208-3s3%200%203-2c-1-1%200-1%202-1h4l4-1%206-2%203-2%2013-5c6-2%2014-3%2022-1%206%202%2010%204%207%204s-2%202%202%204l4%203%205%205c4%204%207%207%204%206-2-2-1%201%202%205l3%205%201%209c1%208%200%2014-2%2017-2%202-3%201-7-1-7-5-6-2%204%2011l8%208c1%201%204-2%206-5%200-2%202-3%203%200l-2%203v3l-1%203c-2%202-3%205-1%205l2-2%206-7c6-6%207-8%204-12-2-2-3-1-2%201%202%203%201%205-2%209-4%204-6%204-3%200l2-3-2-3-2-2%202-6c3-5%205-6%207-3l2%202c4-2%203%206%200%2014-8%2016-7%2015-12%2016h-5v27c-1%203-12%2011-16%2013-2%200-3-8-3-20v-19c-1-11-1-11-11-13-7%200-8%201-2%203%203%201%205%204%205%208h-2c-2-2-3-2-4-1l-14%201-13%201%2014%201c19-1%2018%201-3%205-18%202-25%205-25%207%200%201-6%202-6%200-1-1%204-6%209-8%203-1%204-3%202-3s-9%205-13%209l-5%205%202%201c1%201%204%204%206%209l5%208v-2c-2-3-1-3%202-1%205%202%2016%200%2028-6%208-5%209-5%206-1-2%203-14%209-23%2010-9%202-11%204-2%203%2018-2%2028-10%2034-25%202-6%202-6%203-4v12l-1%2010-5%204c-10%209-24%2016-26%2014-1-2-1-3%201-3l2-2-2-1-7%202c-6%200-8%202-3%202%203%200%204%201%202%204-2%202-9%203-15%202-6-2-6-2-9-17-3-14-3-20%200-25%204-8%201-8-4-1l-3%204-1-4-2-12c-2-7-2-10-2-18v-9l-2%2013v14c0%202-4%201-6-1-3-3-4-1-2%204l8%2011%206%206%201%2011%201%2018v6l6%203%2012%206%207%204-1%204c0%205%200%206%203%203%203-2%205-1%205%201l-4%205-6%205c0%201-6%208-14%2015a210%20210%200%2000-11%2013c1-1%202-1%203%202l5%205c2%202%203%203%202%205-3%208%204%202%2010-9l3-5%202%204%202%205v4c-1%204%200%204%209%201%205-1%206-2%204-5-1-2%200-3%204-7l6-4c2%201%200-4-6-15l-6-10%203-3a337%20337%200%200176-44%20205%20205%200%2000-46%2022l-28%2017-3%203-3-4c-2-4-1-7%201-5%201%201%203-1%208-4l19-13c21-11%2033-19%2035-22s2-3%201-15v-12c1%200%203%203%203%2010l6%2022c1%201%201%200%202-1%201-3%202-3%208-2%206%200%208-1%204-2-2-1-2-1%201-2%207-1%2013-6%2019-14%203-5%204-12%202-12l-1%201c0%203-10%208-14%208l2-4%202-3h-3c-4%202-7%201-9-1-4-3-1-10%208-26%204-8%205-8%205-5%200%202%201%202%202-2%202-6%202-15%201-22-1-6-9-22-13-26l-3-4h3c2%200%202%200-1-2-7-3-8-4-10-10-4-11-23-28-35-31-11-4-13-4-16-4h-7m-41%2017c-7%207-8%2012-2%2021l4%206-1-9c-2-5-1-11%201-16%202-6%202-6-2-2m44%201c-6%201-19%208-18%209l8-2c10-3%2018-4%2029-1%2010%202%2026%209%2032%2014%206%206%204%202-5-6-14-15-28-19-46-14m-24%2043c-7%206-7%209%202%203%206-5%2013-6%2020-3l6%201c0-2-9-5-16-6h-7l-5%205m70%20118a230%20230%200%2000-54%2059l-1%202-1%204c-3%204%200%203%209-5a321%20321%200%200057-68l-10%208M89%20406v31l110%201h110v-33l-110-1c-99%200-110%200-110%202m25%209c-1%202%200%2012%202%2011h3c1%201%207%200%207-1h-1l-1-1%201-1v-7c0-2-2-3-2-1l-1%201c-1-2-7-2-8-1m42%203l-1%202v6l6-1h1l3%201c2%200%202%200%201-1-2-1-2-2-1-2v-5c0-3%200-3-5-3-4%200-4%200-4%203\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/940fbb7537e13a687dae18a820a42d32/5251b/Screen-Shot-2016-11-27-at-10.22.44-PM.webp 167w,\n/static/940fbb7537e13a687dae18a820a42d32/7390e/Screen-Shot-2016-11-27-at-10.22.44-PM.webp 334w,\n/static/940fbb7537e13a687dae18a820a42d32/7c056/Screen-Shot-2016-11-27-at-10.22.44-PM.webp 668w,\n/static/940fbb7537e13a687dae18a820a42d32/10237/Screen-Shot-2016-11-27-at-10.22.44-PM.webp 850w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/940fbb7537e13a687dae18a820a42d32/21521/Screen-Shot-2016-11-27-at-10.22.44-PM.png 167w,\n/static/940fbb7537e13a687dae18a820a42d32/86d36/Screen-Shot-2016-11-27-at-10.22.44-PM.png 334w,\n/static/940fbb7537e13a687dae18a820a42d32/74866/Screen-Shot-2016-11-27-at-10.22.44-PM.png 668w,\n/static/940fbb7537e13a687dae18a820a42d32/ae694/Screen-Shot-2016-11-27-at-10.22.44-PM.png 850w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/940fbb7537e13a687dae18a820a42d32/74866/Screen-Shot-2016-11-27-at-10.22.44-PM.png\"\n            alt=\"Scree\"\n            title=\"Scree\"\n            loading=\"lazy\"\n            decoding=\"async\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>声と音を使うアプリなので、 <strong>あらかじめスピーカーの音量は最大にしておいてください。</strong> 「おだててもらう」ボタンを押すと録音が開始されます。</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 668px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/ce8c7c1d167db4ff68666ff5e80ec143/ae694/Screen-Shot-2016-11-27-at-10.22.55-PM.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 26.34730538922156%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'106\\'%20viewBox=\\'0%200%20400%20106\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M0%2067v39h401V26l-1%2038c0%2033%200%2038-2%2038l-1-37V27H0v40m180-16v6c0%203%200%203%204%203h7v-1c-1-2%200-5%202-5%201%200%202%201%201%204v3h9v-3l1-4v-1c-2%200-3-2-1-2l-1-1h-6c-3%200-3%200-1%202%201%201%201%201-1%201s-3-1-3-2l-3-2-3%201h-1c-2-1-2-1-4%201m-59%2019l-1%206c0%203%200%204%203%204l4-1h1c1%202%203%200%204-3l-1-4v-2c0-1-2-2-5-2-5%200-5%200-5%202\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/ce8c7c1d167db4ff68666ff5e80ec143/5251b/Screen-Shot-2016-11-27-at-10.22.55-PM.webp 167w,\n/static/ce8c7c1d167db4ff68666ff5e80ec143/7390e/Screen-Shot-2016-11-27-at-10.22.55-PM.webp 334w,\n/static/ce8c7c1d167db4ff68666ff5e80ec143/7c056/Screen-Shot-2016-11-27-at-10.22.55-PM.webp 668w,\n/static/ce8c7c1d167db4ff68666ff5e80ec143/10237/Screen-Shot-2016-11-27-at-10.22.55-PM.webp 850w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/ce8c7c1d167db4ff68666ff5e80ec143/21521/Screen-Shot-2016-11-27-at-10.22.55-PM.png 167w,\n/static/ce8c7c1d167db4ff68666ff5e80ec143/86d36/Screen-Shot-2016-11-27-at-10.22.55-PM.png 334w,\n/static/ce8c7c1d167db4ff68666ff5e80ec143/74866/Screen-Shot-2016-11-27-at-10.22.55-PM.png 668w,\n/static/ce8c7c1d167db4ff68666ff5e80ec143/ae694/Screen-Shot-2016-11-27-at-10.22.55-PM.png 850w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/ce8c7c1d167db4ff68666ff5e80ec143/74866/Screen-Shot-2016-11-27-at-10.22.55-PM.png\"\n            alt=\"Scree\"\n            title=\"Scree\"\n            loading=\"lazy\"\n            decoding=\"async\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>赤いバーが出てる間に、例えば「勝った？ 勝った！ ？ これ勝った！」と喋ってみてください。</p>\n<p>…</p>\n<p>…</p>\n<p>はい、そんなアプリです。 ヘルプを見て頂ければ他に地味にバリエーションがあることがわかると思います。 以下の内容は後語り的なやつです。</p>\n<h2 id=\"企画した背景\" style=\"position:relative;\"><a href=\"#%E4%BC%81%E7%94%BB%E3%81%97%E3%81%9F%E8%83%8C%E6%99%AF\" aria-label=\"企画した背景 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>企画した背景</h2>\n<p>ガーリッシュナンバー、割と言葉選びが過激で１話で切ろうと思ったんですが、 九頭Pと難波社長の「勝ったな、ガハハ」がツボすぎて、それだけのために見てます。</p>\n<p>３話くらいで千歳ちゃんも「勝ったなガハハ」と言い出すんですが、 <strong>僕は千歳ちゃんではなく難波社長の「勝ったな、ガハハ」のためにこのアニメを見てるんです。</strong></p>\n<p>ということで難波社長が好きすぎて、俺も社長と一緒にガハハしたい…という欲望を叶えてみました。</p>\n<h2 id=\"内部技術\" style=\"position:relative;\"><a href=\"#%E5%86%85%E9%83%A8%E6%8A%80%E8%A1%93\" aria-label=\"内部技術 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>内部技術</h2>\n<p>このアプリの内部技術の話も簡単にしておきます。 難波社長の画像がリポジトリに入っちゃっているので、ソースの公開はやめておこうと思います。</p>\n<h3 id=\"音声解析\" style=\"position:relative;\"><a href=\"#%E9%9F%B3%E5%A3%B0%E8%A7%A3%E6%9E%90\" aria-label=\"音声解析 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>音声解析</h3>\n<p>以前調べたまとめ資料があるので、こちらを御覧ください。</p>\n<blockquote>\n<p>— <a href=\"https://gist.github.com/Leko/ae8c2b31454453a16204\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Chromeでの音声解析について調べてみた · GitHub</a></p>\n</blockquote>\n<h3 id=\"公式のyoutubeから音だけ再生する\" style=\"position:relative;\"><a href=\"#%E5%85%AC%E5%BC%8F%E3%81%AEyoutube%E3%81%8B%E3%82%89%E9%9F%B3%E3%81%A0%E3%81%91%E5%86%8D%E7%94%9F%E3%81%99%E3%82%8B\" aria-label=\"公式のyoutubeから音だけ再生する permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>公式のYouTubeから音だけ再生する</h3>\n<p>アニメ本編から音声を抽出して…とかやったら確実に消されるので、 公式が公開している<a href=\"https://www.youtube.com/watch?v=G9zyLfez5sM\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">アニメ2話予告</a>の動画を埋め込んで、動画は非表示にして、再生する秒数をいじることで難波社長の声を手に入れています。</p>\n<p>この技はMMDのダンスBGMでも使用させてもらっています。 よろしければこの記事も合わせて御覧ください。</p>\n<blockquote>\n<p>— <a href=\"/post/how-to-use-mmdjs/\">MMDのモデルにブラウザで踊って頂いた | WEB EGG</a></p>\n</blockquote>\n<p>で、本編に戻しますが、 内部でReact使ってるので、<code>react-youtube</code>というライブラリがいい感じに馴染んでくれました。</p>\n<blockquote>\n<p>— <a href=\"https://github.com/troybetz/react-youtube\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub – troybetz/react-youtube: react.js powered YouTube player component</a></p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> Component <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span>\n<span class=\"token keyword\">import</span> Youtube <span class=\"token keyword\">from</span> <span class=\"token string\">'react-youtube'</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TextToSpeech</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">handleReady</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">playerVars<span class=\"token punctuation\">,</span> e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">player</span><span class=\"token punctuation\">(</span>playerVars<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>  \n  <span class=\"token function\">player</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">playerVars<span class=\"token punctuation\">,</span> player</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> start <span class=\"token operator\">=</span> playerVars<span class=\"token punctuation\">.</span>start <span class=\"token operator\">||</span> <span class=\"token number\">0</span>\n\n    player<span class=\"token punctuation\">.</span><span class=\"token function\">seekTo</span><span class=\"token punctuation\">(</span>start<span class=\"token punctuation\">)</span>\n    player<span class=\"token punctuation\">.</span><span class=\"token function\">playVideo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">stopper</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">playerVars<span class=\"token punctuation\">,</span> e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>data <span class=\"token operator\">!==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span>  \n    <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      e<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span><span class=\"token function\">pauseVideo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>playerVars<span class=\"token punctuation\">.</span>end <span class=\"token operator\">-</span> playerVars<span class=\"token punctuation\">.</span>start<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">getPlayerOptions</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> base <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n      autoplay<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n      controls<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n      disablekb<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n      fs<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n      rel<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n      showinfo<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n      loop<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n      modestbranding<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n      origin<span class=\"token operator\">:</span> location<span class=\"token punctuation\">.</span>origin\n    <span class=\"token punctuation\">}</span>  \n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>text <span class=\"token operator\">===</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> base\n    <span class=\"token punctuation\">}</span>  \n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>text<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">'勝ったな、ガハハ'</span><span class=\"token operator\">:</span>\n        <span class=\"token keyword\">return</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>base<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> start<span class=\"token operator\">:</span> <span class=\"token number\">2.3</span><span class=\"token punctuation\">,</span> end<span class=\"token operator\">:</span> <span class=\"token number\">4</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">'かっぱな、アハハハハ'</span><span class=\"token operator\">:</span>\n        <span class=\"token keyword\">return</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>base<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> start<span class=\"token operator\">:</span> <span class=\"token number\">7.7</span><span class=\"token punctuation\">,</span> end<span class=\"token operator\">:</span> <span class=\"token number\">9.6</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">default</span><span class=\"token operator\">:</span>\n        <span class=\"token keyword\">return</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>base<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> start<span class=\"token operator\">:</span> <span class=\"token number\">17.3</span><span class=\"token punctuation\">,</span> end<span class=\"token operator\">:</span> <span class=\"token number\">20.8</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>  \n  <span class=\"token function\">render</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> playerVars <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getPlayerOptions</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>  \n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Youtube</span></span>\n        <span class=\"token attr-name\">ref</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">'</span>player<span class=\"token punctuation\">'</span></span>\n        <span class=\"token attr-name\">videoId</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token string\">'G9zyLfez5sM'</span><span class=\"token punctuation\">}</span></span>\n        <span class=\"token attr-name\">opts</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> playerVars<span class=\"token operator\">:</span> _<span class=\"token punctuation\">.</span><span class=\"token function\">omit</span><span class=\"token punctuation\">(</span>playerVars<span class=\"token punctuation\">,</span> <span class=\"token string\">'start'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'end'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span>\n        <span class=\"token attr-name\">onReady</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">handleReady</span><span class=\"token punctuation\">.</span><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">,</span> playerVars<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span>\n        <span class=\"token attr-name\">onStateChange</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">stopper</span><span class=\"token punctuation\">.</span><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">,</span> playerVars<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span>\n        <span class=\"token attr-name\">onError</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span>\n      <span class=\"token punctuation\">/></span></span>\n    <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n</youtube>\n<p>大枠の処理はこんな感じです。 <strong><a href=\"https://developers.google.com/youtube/player_parameters?playerVersion=HTML5#Parameters\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">埋め込みプレイヤーのパラメータ</a>では開始位置、終了位置ともに整数以外が指定できない</strong> ので、結構な確率で不必要な部分が混じります。 ですがjsのAPIを利用することで小数点以下のシークバー移動が可能になります。</p>\n<p>あとは微調整しながら難波社長の声だけが入るようにすれば音声素材の用意は完了です。</p>\n<p>音声解析して、特定のキーワードにマッチしたら喋らせるパーツは説明しました。 他の部分はごく普通なReactアプリです。という感じです。</p>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p>これから毎晩欠かさず難波社長とガハハしてから寝ます。嘘です。</p>\n<p>勢いでゴリゴリと作ってしまいましたが、なにげに音声利用するアプリをReactで作るの初めてでした。 タグで表現できないオブジェクトもコンポーネントとしてラップできる抽象概念は素晴らしいな、とあらためて感じつつ、いつか使えるスニペットとして蓄積できそうです。 YouTubeのjs APIの扱いにもかなり詳しくなったし、後々に役立つ知見が色々たまったと思います。</p>","timeToRead":5,"frontmatter":{"title":"難波社長と「勝ったな ガハハ」できるクソアプリ作った","tags":["React","Youtube"],"date":"December 08, 2016","featuredImage":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='544'%20viewBox='0%200%20400%20544'%20preserveAspectRatio='none'%3e%3cpath%20d='M198%2013c-3%200-9%203-13%206l-8%204h-11c-11%200-11%200-19%204l-12%205c-5%202-41%2039-44%2045-1%202-4%205-9%208a55%2055%200%2000-16%2015l-3%203v43l-3%203c-5%205-11%204-14-2l-3-4c-4%206%204%2020%2011%2020%204%200%203%205-3%2012-2%203-3%203-8%203-6%200-7%202-2%206%207%205%2016%208%2025%206%208-1%2012-3%2016-11%204-9%204-9%207-2%203%205%205%208%205%205l-5-11c-2-1%200-8%203-11l1-2%203-5c5-5%2011-7%2020-7l7-1c0-1-2-3-4-3l-7-3c-7-3-11-1-18%209l-2%204%201-3v-17l1-13%204-3c7-6%209-8%2015-8%205-1%205-1%205-3-1-2%200-2%205-2l6-1%206-1c4%201%206%200%2011-3l7-3%205-2%206-3%2011-4c8-4%208-4%2019-4s20%202%2030%206l6%203h-4c-5%201-5%202%201%205s10%206%2010%208l7%207c9%208%2010%2010%207%2010s-3%202%201%205l8%2013v8c4%2016%202%2034-3%2038-3%202-9%200-14-4-4-4-6-3-3%202a149%20149%200%200026%2034c0%201%200%202%201%201%203-1%2011-12%2011-14s0-2%203%200c3%203%203%204-1%209-3%204-3%205-2%205%202%200%202%201%200%203-3%204-4%2011-2%2011l3-5c1-3%203-5%207-8%2013-10%2016-15%2011-23-3-5-6-4-3%202%202%206%201%209-6%2015-6%205-9%206-5%202%205-7%206-8%202-12l-4-5c0-4%209-19%2011-19l4%203c4%205%204%205%206%204%201-2%201-1%202%202%202%208%201%2012-3%2020l-8%2018c-6%2013-6%2013-13%2013l-8-1c-3-1-4%202-3%208l3%2021%201%2016-3%204c-1%203-4%205-6%207l-7%205-18%2010-1-42c-1-46%200-44-9-46-7-3-21-4-21-2l4%203c6%202%2010%205%2011%2011%201%207%201%207-3%204s-4-3-6-2c-4%202-16%203-30%202l-17%201-2%202c9%201%2044%200%2050-2%203-1%203%202-1%204s-7%203-24%205l-27%205c-11%202-28%208-23%208%204%200%201%203-3%203-12%201-7-8%2011-16%204-2%205-4%204-4-3-4-32%2018-32%2024%200%202%200%202%202%202%202-1%205%202%208%2010%205%2011%208%2017%2010%2018%203%203%203%201%201-5-3-5-3-7%200-3%203%203%206%204%2015%204%2013%200%2027-4%2046-15%207-5%208-4%202%203-5%205-16%2011-26%2014l-24%205c-3%200-5%202-2%203%205%202%2028-4%2039-10%2016-8%2028-26%2032-47%201-4%202%2030%201%2037v8l-9%207c-13%2011-36%2025-42%2025s-7-5-1-7c5-2%204-3-2-3l-10%202c-9%200-11%201-11%203l6%201%204%201c0%202-5%209-7%2010-4%201-16%200-22-1-7-2-10-3-10-7l-2-6-6-40v-12l4-9%203-10c-2-1-14%2012-14%2016s-3-4-4-13l-4-18c-3-13-4-19-2-33%201-10%201-13-1-11-1%200-2%206-2%2013l-1%2013v7c4%2015-2%2022-11%2013-6-6-7-4-3%205%205%2011%2017%2026%2023%2028l5%2048v15l6%204%2016%209%2015%207%206%203-1%208c0%209%200%209%206%206%204-4%206-4%208-1%201%203%201%203-12%2014l-5%205a829%20829%200%2001-45%2049c3-3%203-2%207%203l8%209%204%204-1%206-2%206c3%202%2013-10%2020-24%205-9%206-9%207-4l4%207c2%204%202%204%200%209-2%2011-1%2011%2016%205%209-3%2010-3%207-9l-2-3%2010-10c9-9%209-9%2010-7%202%203%203%200%201-3l-3-5c-1-5-11-22-16-30-4-6-4-6%204-13a504%20504%200%2001133-72c-3-2-3-2-12%202a512%20512%200%2000-71%2035c-20%2010-36%2020-49%2030-7%206-7%206-7%202l-3-6c-3-4-3-4-1-6%201-2%204-3%204-1s3%201%2010-6c7-6%2017-13%2019-13l10-6%2025-14c18-10%2017-10%2033-21%208-5%2013-10%2013-14a427%20427%200%2000-4-41l4%201c3%200%203%200%203%205%200%2012%209%2051%2012%2051l3-5c3-3%204-4%205-3%206%202%2015%203%2018%201%201-2%201-2-2-3-4-2-5-5-2-4%204%201%2011-1%2017-5s15-12%2015-14l4-6c4-5%206-11%206-16-1-5-3-6-3-2-1%205-17%2014-24%2014-4%200-4%200%201-5%206-6%205-10-1-6-6%203-16%200-18-6a54%2054%200%200110-32l8-12c7-13%208-14%207-7%200%204%200%204%201%203%206-6%209-27%205-43-3-15-18-44-25-51-4-3-4-4%201-3%205%200%205-2%200-3-7-2-15-9-17-14l-3-7v-3l-4-6-12-14a92%2092%200%2000-53-32l-12-2c-8-2-12-2-19%200m-70%2028c-10%209-13%2018-10%2028l14%2021-3-18c-3-10-1-22%204-32%203-5%201-5-5%201m90%200c-16%201-25%204-40%2014-12%208-12%209%200%204%2029-12%2062-10%2095%208l23%2014c6%205%2011%209%2011%207l-1-1-19-18c-16-16-19-19-24-21l-8-3c-3-3-23-5-37-4m-46%2069l-11%209c-11%2011-9%2013%204%205%2015-10%2025-11%2042-4%205%202%206%201%203-2-8-6-29-10-38-8m10%2037l-12%209%201%202c2%202%202%202%207-1%209-6%2022-8%2028-5%204%202%206%202%205%201-1-3-14-8-21-8l-8%202m103%2022c-4%203-7%209-7%2017v8l3-6%207-10%204-4%203%202%205%205c2%203%202%203%202%201s-7-12-10-14c-3-1-4-1-7%201m-178%201c-5%202-8%207-8%2012%200%207%201%207%205%202%205-7%2011-9%2019-7h3c0-5-12-9-19-7m25%2012l-2%207-5%2012c-4%207-4%208%200%2012%205%206%2022%2014%2022%2011l-11-7c-10-5-11-7-7-15%203-6%206-18%205-20h-2m166%20131a450%20450%200%2000-109%20116c1%202%200%204-2%207-3%206-3%208%202%204a398%20398%200%200078-81%201474%201474%200%200031-46m-140%2060c-5%204-5%205%200%207%203%201%204%203%205%2011l3%201c4%200%204%200%200-6-5-6-5-6-2-8%202-2%202-3%201-5-2-4-3-4-7%200m-10%208l-2%206-5%2010c-4%207-4%2010-1%206l8-6c4-3%205-4%205-8l3-4c3%200%202-2-1-3-4-2-5-2-7-1m-12%2030c0%204-6%2021-13%2033-4%208-4%2013%200%206a287%20287%200%200113-21l3-6-1-8c-2-7-2-8-2-4M11%20476l-1%2029c0%2027%200%2028%202%2029h377l3-1v-28l-1-29c-2-2-378-2-380%200m43%2019l-1%202%202%201-1%201-1%204v5c-1%201%200%201%201%202l1%201-2%202c0%202%201%202%203%200h7l-1-2v-1l2%202c0%203%200%203%205%202%205%200%208-2%204-3-2%200-3-2%200-2l1-2-1-1-2-1%202-1c1%200%201-2-1-3l1-2v-2l-1-2c0-3-2-3-3%200l-1%202v-2c0-2-2-3-3%200%200%201-1%201-3-1h-4c0-2-2-1-4%201m35-1v1H78c-1%201%203%204%204%203l1%205c0%205%200%205-2%204-1-1-1-2-3%203-2%204%200%207%202%203%201-2%201-2%201%200%201%202%204%202%208%200h5c2%202%202%202%203%201v-2c-3-1-4-3-3-6l3-9-3-1-3-1c0-2-2-3-2-1m14%201c1%201%200%201-1%202-3%200-2%202%202%203l2%201-3%202c-3%203-4%205-1%205l1%202c0%204%201%204%202%205l1-4c0-4%200-4%202-3%203%200%203-2%200-4v-2h1l2%201c2-1%202%200%202%204%200%203%200%204-3%204-5%201-2%203%205%203l7-1-3-2c-4%200-4-8%200-8l2-1-2-2c-3%200-3%200-3-3l-1-4c-2%200-2%201-2%204%200%202%200%203-2%203l-2-1-1-2-2-3-2-1-1%202m24%203c0%204%200%205-2%205-2%201-2%203%201%203l1%203-1%203-2%202c0%201%204%201%209-2%203-1%203-1%207%201l4%201c2-1%201-2-2-3-2-1-2-1-1-3l3-2c2%200%201-2-1-3l-1-5%201-4h-16v4m50-2c0%201-1%202-3%202-3%200-2%202%201%203%203%200%203%202%200%204-4%203-4%206-1%208%204%202%206%200%206-4%200-2%201-3%203-4%203%200%206%202%205%204-1%203-3%202-4%200%200-3-3-3-3%200%200%204%204%206%208%203%205-3-1-12-7-9l-2-1%202-2%202-2-2-1c-1%201-2%200-2-1l-1-2-2%202m95%200c0%202%200%202-2%202-3-1-3%201-1%202%203%201%203%203%200%203l-2%201%202%202%202%203c0%205%208%207%2012%203s2-9-5-9h-4c0-2%201-2%203-2l3-1c0-1-1-2-3-2s-2%200-2-2c1-1%200-2-1-2l-2%202m-48%201c-4%200-5%201-5%202h5c5%200%205%200%204%202-4%204-3%209%203%2012%204%201%204%201%204-1%200%200-1-2-3-2-6-2-2-11%204-11l2-1c0-2-1-2-14-1m24%200c-4%200-5%201-5%202h10l-2%203c-4%205-1%209%206%2012%202%200%202%200%202-2l-3-2c-6-1-4-8%203-10l3-3h-14m45%203v8l2-1c1-1%207-2%208-1%205%201%200%205-6%204-4%200-5%201-2%203%206%203%2015-2%2013-8-1-2-6-3-10-2-3%201-3%201-2-2%200-4-2-4-3-1m44-1c-2%202-1%205%202%209l4%205%206-11c0-2-3-4-5-3h-7'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":0.73568281938326,"src":"/static/69f469dd761d7cab7592cf205d75a602/c5e32/featured-image.png","srcSet":"/static/69f469dd761d7cab7592cf205d75a602/1ec58/featured-image.png 334w,\n/static/69f469dd761d7cab7592cf205d75a602/c5e32/featured-image.png 488w","srcWebp":"/static/69f469dd761d7cab7592cf205d75a602/753a5/featured-image.webp","srcSetWebp":"/static/69f469dd761d7cab7592cf205d75a602/cd98f/featured-image.webp 334w,\n/static/69f469dd761d7cab7592cf205d75a602/753a5/featured-image.webp 488w","sizes":"(max-width: 488px) 100vw, 488px"}}}}}},"pageContext":{"slug":"/create-cheap-apps-about-girlish-number/","previous":{"fields":{"slug":"/how-to-use-mmdjs/"},"frontmatter":{"title":"MMDのモデルにブラウザで踊って頂いた","tags":["JavaScript","MikuMikuDance","Three.js"]}},"next":{"fields":{"slug":"/use-chatwork-like-slack/"},"frontmatter":{"title":"ChatWorkだってSlackしたい！！","tags":["Advent Calendar","Chrome extension","JavaScript"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}