codepenでライブラリ利用サンプルを作ってQiitaに埋め込むまでの手順解説

# 概要
[ぼっち(´・ω・`) Advent Calendar 2018](https://qiita.com/advent-calendar/2018/botti)の6日目の記事です。
書こうと思っていたElement UIのTipsが既にQiita記事があることが分かり、急遽別ネタを用意しました。
上記Tipsの記事を書こうと準備していた際に[codepen](https://codepen.io/)に挑戦したのでそれをまとめます。

# codepenとは
* HTML, JS, CSSの三要素をブラウザ上でコード編集しつつ、結果も表示されて確認もできる、というサービスです 

# なぜCodepenなのか
* JsFiddle等似たサービスがありますが、2018/12/06現在は一番人気のサービスのようです
  * google trendの結果
 
    ![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/24254287-77a2-b509-3a2c-e1ca5f264381.png)

* CDNから読み込みができて、いろんなライブラリが使えます
  * 制約としてライブラリがCDN対応していないと使えません
  * トリーッキーなことをすれば対応させれそうですが、それは後日やってみます
  
* [Qiitaが埋め込み](https://qiita.com/Qiita/items/edae7417214c8e957f54)に対応しています



# 実際にやってみる

## codepenにアカウント用意
* Qiitaへの埋め込みをする際に必要になります
  * アカウントがないと埋め込み用htmlタグが生成できないみたいです 
* [https://codepen.io/accounts/signup](https://codepen.io/accounts/signup)からできます
  * 「Free」の「Sign Up」を選びます。
       
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/f4f97fee-3853-6f6f-e0dd-04fd1b375fff.png)

* お好きな方法でサインアップしてください
    
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/b5a55e2d-83e0-705c-896d-89c5ad936291.png)

* プロフィール入力が出てきますが、無視して右上の「Create」へ移ります

![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/46ccac9f-885c-7eb9-67d9-3f227b223742.png)

## Penの作成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/98d34faf-4bd1-79dc-c976-9b91403ecb8c.png)

* 「New Pen」を選択します。次の画面が出てきます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/51d6d5e8-3058-394d-1021-068da6a1235c.png)

  * この画面でコードの編集ができ、下半分の白い部分に結果が表示されます

## 使いたいライブラリの登録
* ![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/80db34fd-62f3-0777-2d70-4961476f3c66.png)の:gear:を押します。次のポップアップが出ます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/6a3ee0fb-bdbd-e995-b671-a6a468c58b00.png)

* 使うのは
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/152cc144-1191-543b-16a4-127bb5e75f77.png)
の部分です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/18ee5aa6-f22c-779f-e732-7f0b63977b88.png)
の機能で検索も出来るのですが、出てくるものが古かったりするのでお勧めはしません

* CDNのURLを張り付けていく
  * 今回は[React](https://reactjs.org/docs/cdn-links.html), [Material-UI](https://material-ui.com/), [react-vis](https://www.npmjs.com/package/react-vis)を使ってみます。各マニュアルを読んで、ライブラリのCDNを入力していきます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/5387d71b-0e4f-24b5-a3ba-8a1716e064f6.png)


* CSSも同様に入力します

![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/1f406c23-4e07-7384-74b4-583cc21fe4c5.png)

## コード編集
* 左上![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/38fc7d32-ce5a-1ec0-861d-8545eb723de6.png)の右の:pen_ballpoint:マークでタイトルをいじれます 

* 各ウィンドウにコードを入れていきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/face5060-fddf-fecf-d506-b698998f8b9f.png)


* コードは[ここ](https://codepen.io/ozota/pen/qQzJLR)でも見れますし、この記事の一番下にも張り付けてあります
  * react-visでグラフを表示し、material-uiでコンポーネント配置を整えたり、グラフのデータをランダムに変更するボタンを表示しています
  * この記事のメインではないので、細かい解説は割愛します 
* 気を付けるのは、ライブラリの読み込み部分です。ライブラリによって読み込み方が微妙に違うのでマニュアルを読まないといけません

```javascript
// react-visの読み込み
const {XYPlot,HorizontalGridLines, LineSeries,XAxis,YAxis} = reactVis;
// material-uiの読み込み
const {Button, Grid} =  window['material-ui']
```

## 保存とQiitaへの貼り付け
* 右上の![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/009eb660-f223-3475-32e0-6552e17d3aef.png)を押すと保存でき、さらに右下にいろいろ表示が追加されます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/25de5844-8a01-87c0-b644-dc45312f70a5.png)

  * ![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/e5fb1af3-46d2-dd1e-3fb5-b39c77919ea5.png)を押すと次のポップアップが出ます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/73d0cf2a-2834-8181-bdfa-2fe2aa2b5bf8.png)


  * Copy & Pasete Code　の部分をQiitaにコピペします。Markdownの途中に突然HTMLを張り付けるのは少し違和感ありますが大丈夫です。
  * Qiitaの編集画面ではこんな感じになります。
  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/304012/40bc13c5-f201-a98d-9de0-21392d442863.png)

  * プレビューにはcodepenの貼り付け結果は表示されないので、限定共有投稿して結果確認します。
  * 貼り付けた結果↓

<p data-height="543" data-theme-id="0" data-slug-hash="qQzJLR" data-default-tab="js,result" data-user="ozota" data-pen-title="Untiteled" class="codepen">See the Pen <a href="https://codepen.io/ozota/pen/qQzJLR/">Untiteled</a> by ozota (<a href="https://codepen.io/ozota">@ozota</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>