{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/gatsby-remark-discoverable-oembed/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"754a3cef-4203-536f-a0d1-37bf0b326cca","excerpt":"（※↑ はただの記事用のサムネイル画像です） 記事の中に URL を書くだけで oEmbed 準拠のコンテンツを埋め込めるようにしました。 oEmbed を聞いたことない方はまずデモを見てみてください。 oEmbed…","html":"<p>（※↑ はただの記事用のサムネイル画像です）</p>\n<p>記事の中に URL を書くだけで oEmbed 準拠のコンテンツを埋め込めるようにしました。<br>\noEmbed を聞いたことない方はまずデモを見てみてください。</p>\n<p>oEmbed は結構身近なサービスたちも対応している便利で面白い仕様なのですが、あまり有名ではない（日本語の情報も少ない）ようです。<br>\n記事に活用できそうな面白いものだったので、デモを交えつつ紹介します。</p>\n<p>なおこの記事では oEmbed のデモと紹介をメインに記載します。ソースは公開してありますが Gatsby の remark プラグインの作り方解説的なのはこの記事では割愛します。</p>\n<h2 id=\"oembed-の埋め込みデモ\" style=\"position:relative;\"><a href=\"#oembed-%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%87%E3%83%A2\" aria-label=\"oembed の埋め込みデモ 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>oEmbed の埋め込みデモ</h2>\n<p>国内のサービスだと、はてなブログの記事が有名だと思います。<br>\n記事の URL を markdown に書くと以下のような表示になります。<br>\n（自分がはてなブログの記事をもってないので最近読んだ記事で失礼します）。</p>\n<p>markdown（以後省略）:</p>\n<div class=\"gatsby-highlight\" data-language=\"md\"><pre class=\"language-md\"><code class=\"language-md\">https://mizchi.hatenablog.com/entry/2018/10/23/221446</code></pre></div>\n<p>ビルド結果:\n<html><head></head><body><iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmizchi.hatenablog.com%2Fentry%2F2018%2F10%2F23%2F221446\" title=\"大量のテキストを食っても速い Markdown Editor 作った - mizchi's blog\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe></body></html></p>\n<p>他に有名なものだと Speaker Deck なども oEmbed に対応しています。</p>\n<p><html><head></head><body><iframe id=\"talk_frame_429779\" class=\"speakerdeck-iframe\" src=\"//speakerdeck.com/player/fa08c7181acc46428e5860d868fceaab\" width=\"668\" height=\"375\" style=\"aspect-ratio:668/375; border:0; padding:0; margin:0; background:transparent;\" frameborder=\"0\" allowtransparency=\"true\" allowfullscreen=\"allowfullscreen\"></iframe>\n</body></html></p>\n<p>他には npm の DL 数の遷移を複数パッケージで比較できる npmcharts や、</p>\n<p><html><head></head><body><iframe style=\"width: 100%; overflow: hidden;\" src=\"https://npmcharts.com/compare/express,koa,nest,@adonisjs/framework,connect,@nestjs/core,fastify,hapi,loopback?minimal=true\" width=\"668\" height=\"500\" frameborder=\"0\" scrolling=\"no\"></iframe></body></html></p>\n<p>Node.js のコードが実行できるプロトタイピングツール runkit などがあります。</p>\n<p><html><head></head><body><iframe style=\"padding: 0; margin: 0; background: transparent;\" src=\"https://runkit.com/e/oembed-iframe?target=%2Fusers%2Fleko%2Frepositories%2Ffor-oembed-test%2Fdefault&amp;referrer=\" height=\"40\" width=\"668\" scrolling=\"no\" frameborder=\"0\" allowfullscreen=\"\"></iframe></body></html></p>\n<p>他には Twitter や Flickr、Instagram なども oEmbed に対応してるんですが、iframe 大量に埋め込んでも表示が遅くなるだけなので割愛します。</p>\n<h2 id=\"gatsby-プラグイン-gatsby-remark-discoverable-oembed\" style=\"position:relative;\"><a href=\"#gatsby-%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3-gatsby-remark-discoverable-oembed\" aria-label=\"gatsby プラグイン gatsby remark discoverable oembed 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>Gatsby プラグイン: gatsby-remark-discoverable-oembed</h2>\n<p>って感じのことができる Gatsby プラグイン「gatsby-remark-discoverable-oembed」を作りました。</p>\n<p><a href=\"https://github.com/Leko/WEB-EGG/blob/master/plugins/gatsby-remark-discoverable-oembed/index.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/Leko/WEB-EGG/blob/master/plugins/gatsby-remark-discoverable-oembed/index.js</a></p>\n<p>まだ納得できる使用感になってないので、とりあえずローカルプラグインとしてブログと同じリポジトリにおいてあります。<br>\n何記事か書いてみて使用感をもんで、設定やパフォーマンスも問題ないと判断したら publish して Gatsby プラグインの仲間入りさせる予定です。</p>\n<p>ざっくり中身を紹介すると、markdown の AST を探索してホワイトリストで許可したパターンにマッチする URL を抽出し、oEmbed の表示用データを入手し展開後の HTML を markdown に挿入するプラグインになっています。\nこのプラグインの作成に関しては Gatsby と remark の固有知識が多大に含まれるので、別途記事を書きます。</p>\n<p>以降の内容は、oEmbed の紹介になります。</p>\n<h2 id=\"oembed-の仕組み\" style=\"position:relative;\"><a href=\"#oembed-%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF\" aria-label=\"oembed の仕組み 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>oEmbed の仕組み</h2>\n<p>そもそも oEmbed とは、2008 年に Slack の中の人<a href=\"https://github.com/iamcal\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Cal Henderson</a>氏によって提案されたコンテンツ埋め込みのためのオープンな規格です。公式サイトはこちら。</p>\n<blockquote>\n<p>— <a href=\"https://oembed.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">oEmbed</a></p>\n</blockquote>\n<p>2008 年当時のお披露目の記事がこちら。</p>\n<blockquote>\n<p>— <a href=\"https://blog.leahculver.com/2008/05/announcing-oembed-an-open-standard-for-embedded-content.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Announcing OEmbed - An Open Standard for Embedded Content - Leah Culver’s Blog</a></p>\n</blockquote>\n<p>Wordpress に oEmbed に関連するプラグインがあるらしく、日本では主に Wordpress 界隈の情報が多く見つかります。\nドキュメントは全部英語ですが短いのでサラッと読めると思います。</p>\n<h2 id=\"oembed-discovery\" style=\"position:relative;\"><a href=\"#oembed-discovery\" aria-label=\"oembed discovery 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>oEmbed Discovery</h2>\n<p>仕様の中から抜粋して紹介したいのが、<a href=\"https://oembed.com/#section4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Discovery</a>という仕様です。</p>\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>link</span>\n  <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>alternate<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>application/json+oembed<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>http://flickr.com/services/oembed?url=http%3A%2F%2Fflickr.com%2Fphotos%2Fbees%2F2362225867%2F&amp;format=json<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Bacon Lollys oEmbed Profile<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span>\n  <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>alternate<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text/xml+oembed<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>http://flickr.com/services/oembed?url=http%3A%2F%2Fflickr.com%2Fphotos%2Fbees%2F2362225867%2F&amp;format=xml<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Bacon Lollys oEmbed Profile<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">/></span></span></code></pre></div>\n<p>以下のような HTML をレスポンスに含めておくことで、oEmbed をサポートしていることを明示できます。<br>\nHTML をパースし、書いてある URL に対してリクエストをすることで、埋め込み用のデータを入手できます。例えば上記の HTML の JSON の方の URL にリクエストするとこんな JSON が手に入ります。</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"photo\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"flickr_type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"photo\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Bacon Lollys\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"author_name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"‮‭‬bees‬\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"author_url\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://www.flickr.com/photos/bees/\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"width\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1024\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"height\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"768\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"url\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_b.jpg\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"web_page\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://www.flickr.com/photos/bees/2362225867/\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"thumbnail_url\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_q.jpg\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"thumbnail_width\"</span><span class=\"token operator\">:</span> <span class=\"token number\">150</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"thumbnail_height\"</span><span class=\"token operator\">:</span> <span class=\"token number\">150</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"web_page_short_url\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://flic.kr/p/4AK2sc\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"license\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"All Rights Reserved\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"license_id\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"html\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;a data-flickr-embed=\\\"true\\\" href=\\\"https://www.flickr.com/photos/bees/2362225867/\\\" title=\\\"Bacon Lollys by ‮‭‬bees‬, on Flickr\\\">&lt;img src=\\\"https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_b.jpg\\\" width=\\\"1024\\\" height=\\\"768\\\" alt=\\\"Bacon Lollys\\\">&lt;/a>&lt;script async src=\\\"https://embedr.flickr.com/assets/client-code.js\\\" charset=\\\"utf-8\\\">&lt;/script>\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1.0\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"cache_age\"</span><span class=\"token operator\">:</span> <span class=\"token number\">3600</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"provider_name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Flickr\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"provider_url\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://www.flickr.com/\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>本来的にはサービス提供者は oEmbed の仕様に沿った API を実装し<a href=\"https://github.com/iamcal/oembed\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">iamcal/oembed</a>に PR を送り oEmbed API のメタ情報を登録しておき、埋め込みしたい oEmbed API 利用者側はそのメタ定義に応じてリクエストして埋め込み用のメタデータを得るという仕様です。しかしサービス提供者と provider のメンテナ（＝仕様策定者）が異なるため「Provider にメタデータの定義はないが oEmbed Discovery に対応したサービス」が存在します。<br>\n先程のデモで言うとはてなブログと runkit、npmcharts がこれに該当します。<br>\nSpeaker Deck や Flickr などはメタデータの定義もあるし、HTML でも Discover できることを明示してあります。<br>\n一方 Twitter や YouTube などはメタデータの定義だけ存在し、Discover できません。</p>\n<p>Discover 用の HTML を追加するとレスポンスサイズが多少なり増えるので、1byte でも多く削りたいってレベルのパフォーマンスを追求すると Discover 用の HTML は削減対象になる得るのかなと思います。</p>\n<h2 id=\"セキュリティ上の懸念\" style=\"position:relative;\"><a href=\"#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E4%B8%8A%E3%81%AE%E6%87%B8%E5%BF%B5\" 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 を問答無用で埋め込むようにしてしまうと、埋め込んだ側のサイトに対してサービス提供者が（JavaScript でできることの限りだけど）任意のコードを実行できるようになってしまいます。</p>\n<blockquote>\n<p>— <a href=\"https://oembed.com/#section4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">3. Security considerations | oEmbed</a></p>\n</blockquote>\n<blockquote>\n<p>— <a href=\"https://codex.wordpress.org/Embeds#What_About_oEmbed_Discovery.3F\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">What About oEmbed Discovery? | Embeds « WordPress Codex</a></p>\n</blockquote>\n<p>oEmbed の利用者は、信頼できるサイトだけを明示的にホワイトリストで許可すると良いと思います。</p>\n<h2 id=\"活用例\" style=\"position:relative;\"><a href=\"#%E6%B4%BB%E7%94%A8%E4%BE%8B\" 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<ul>\n<li>npm パッケージを比較検討した記事とか書くときに npmcharts が使えそう</li>\n<li>カンファレンス/勉強会のレポート記事書くときに SpeakerDeck の oEmbed が使えそう</li>\n<li>Node のコードを動かしてながら説明するような記事や、ライブラリについてサラッとデモしたときに runkit が使えそう</li>\n</ul>\n<p>とかとか、oEmbed の埋め込みを活用できれば記事でできることの幅が広がりそうです。<br>\niframe が大量に読み込まれることでロードが重くなる問題に関しては遅延ロードなどを検討中です。。。</p>\n<p>Gatsby のように自由度の高いビルドツールを使っているならこの記事のように自前で仕組みが作れます。<br>\nMedium では記事や URL のプレビューに<a href=\"https://embed.ly\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Embedly</a>を介して oEmbed をりようしているようです。Embedly というサービスも oEmbed の仕様に対応しています。</p>\n<p>oEmbed に対応した面白いサービスを見つけたらぜひ Twitter 等でご連絡いただければと思います。</p>","timeToRead":7,"frontmatter":{"title":"Gatsbyの記事にoEmbed準拠のコンテンツを埋め込めるようにした","tags":["JavaScript","Gatsby","oEmbed","AST","remark"],"date":"January 10, 2019","featuredImage":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='202'%20viewBox='0%200%20400%20202'%20preserveAspectRatio='none'%3e%3cpath%20d='M357%20145v10h16l17-1c2%200%202-2%202-10v-9h-35v10M20%20162c-2%200-1%209%201%209%207%203%2011-2%208-8-1-2-6-3-9-1m33%2016v5c0%203%201%204%206%204h5v-9l-5-1-6%201m14%2015v5c0%203%201%204%206%204h5v-9l-5-1-6%201'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.9880952380952381,"src":"/static/e5fd5f0d1c0b43905519a63730f60aa0/7d603/featured-image.png","srcSet":"/static/e5fd5f0d1c0b43905519a63730f60aa0/1ec58/featured-image.png 334w,\n/static/e5fd5f0d1c0b43905519a63730f60aa0/ccb4a/featured-image.png 668w,\n/static/e5fd5f0d1c0b43905519a63730f60aa0/7d603/featured-image.png 992w","srcWebp":"/static/e5fd5f0d1c0b43905519a63730f60aa0/34d2b/featured-image.webp","srcSetWebp":"/static/e5fd5f0d1c0b43905519a63730f60aa0/cd98f/featured-image.webp 334w,\n/static/e5fd5f0d1c0b43905519a63730f60aa0/7535d/featured-image.webp 668w,\n/static/e5fd5f0d1c0b43905519a63730f60aa0/34d2b/featured-image.webp 992w","sizes":"(max-width: 992px) 100vw, 992px"}}}}}},"pageContext":{"slug":"/gatsby-remark-discoverable-oembed/","previous":{"fields":{"slug":"/nodejs-is-now-supported-brotli-compression/"},"frontmatter":{"title":"Node.jsの11.7.0からzlibモジュールでBrotli圧縮が使えるようになりました","tags":["Node.js"]}},"next":{"fields":{"slug":"/benchmark-of-lazy-frame-loading/"},"frontmatter":{"title":"ChromeのBlink LazyLoadを有効にしたらページのロード時間が約10倍早くなった","tags":["JavaScript","Google Chrome"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}