1. >
  2. Blog
  3. >
  4. Nuxt ContentブログにYouTubeを埋め込む
2023年1月29日2024年2月15日
Nuxt ContentブログにYouTubeを埋め込む

Nuxt ContentブログにYouTubeを埋め込む

Nuxt ContentブログにYouTubeを埋め込む


イントロダクション

この記事では、Nuxt 3 と TypeScript を使用して、Nuxt ContentブログにYouTubeビデオを埋め込む方法を紹介します。lite-youtube-embedを利用することで、パフォーマンスを損なうことなく、YouTubeビデオを埋め込むことができます。

YouTubeを埋め込む

  1. lite-youtube-embedのインストール
    まず、lite-youtube-embedパッケージをプロジェクトに追加します。
bash
pnpm add lite-youtube-embed
  1. LiteYoutubeコンポーネントの作成
    次に、YouTubeビデオを表示するためのVueコンポーネントを作成します。
components/LiteYoutube.vuevue
<template>
 <div class="youtube">
   <lite-youtube :videoid="id"  :playlabel="label" ></lite-youtube>
 </div>
</template>
<script setup lang="ts">
defineProps<{
 id: String;
 label: String;
}>();

fetchOnServer: false;

 const target = document.getElementsByClassName("youtube");
 setTimeout(() => {
   // target を unknown 型にキャストする
   const unknownTarget = target as unknown;
   // unknownTarget を HTMLIFrameElement 型にキャストする
   const iframeTarget = unknownTarget as HTMLIFrameElement;
   // iframeTarget.contentWindow が null でないことを確認する
   // if (iframeTarget.contentWindow) {
   //   iframeTarget.contentWindow.focus();
   // }
   // オプショナルチェーン演算子(?.)を使って null の場合は focus() メソッドを呼び出さない
   iframeTarget.contentWindow?.focus();
 }, 0);
</script>

このコードでは、lite-youtubeコンポーネントを使用してYouTubeビデオを表示しています。idlabelはプロパティとして外部から受け取ります。

  1. nuxt.configの更新
nuxt.config.tsts
css: [
  .......
 '@/node_modules/lite-youtube-embed/src/lite-yt-embed.css',
 ],
vue: {
  .......
   compilerOptions: {
     isCustomElement: (tag) => ['lite-youtube'].includes(tag),
   },
 },
  1. プラグインの作成

Nuxt 3でlite-youtube-embedを使用するためのプラグインを作成します。

plugins/youtube.client.tsts
  import 'lite-youtube-embed'
  // eslint-disable-next-line no-undef
  export default defineNuxtPlugin(() => {})

markdownファイルに埋め込む

ブログ記事内で直接YouTubeビデオを埋め込む場合は、以下のHTMLまたはカスタムVueコンポーネントを使用します。

html
<iframe width="720" height="405" src="https://www.youtube.com/embed/OrT0tHGXyqE"
 title="Vue: What to Expect in 2023 by Evan You - Vue.js Nation 2023"
 frameborder="0" allow="accelerometer; autoplay;
  clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
  allowfullscreen></iframe>

または、

md
<lite-youtube id="OrT0tHGXyqE" label="Vue: What to Expect in 2023 by Evan You - Vue.js Nation 2023" params="rel=0&start=0">
</lite-youtube>

参考リンク