YouTube埋め込みプレーヤーの関連動画やアレコレを非表示にしたいあなたに贈る処方箋💊

クライアント「このページで、**メインビジュアルか背景に動画**を採用したいです」

クライアント「その**動画にかぶせて**、お客様へのお知らせを掲載したいです」

ディレクター「でしたら**YouTube**に動画をあげて、それを**埋め込んで**使いましょうか」

クライアント「関連動画とか動画タイトルとかシークバーとか、非表示にできるんですか？」

ディレクター「制作に確認してみますね」

---

ディレクター「…という要件なんですけど、どうでしょう？」

開発者「はい、消せますね」

ワイ「いやいやいや消せないですよ！」

謎の人物｢え？？？`rel=0`で関連動画は消せるし、`showinfo=0`でタイトルとかユーザとか非表示にできますよ？？？？｣

ワイ「」

## 時は、大令和時代。

APIの仕様というのは時間とともに変わっていくものです。

たとえば、先述の2つのパラメータは次のように仕様が変わっています。

|値|変更前|変更後|
|:-:|:--|:--|
|`rel=1`|関連動画を表示する|関連動画を表示する|
|`rel=0`|関連動画を表示**しない**|再生した動画と同じチャンネルから関連動画を表示**する**|
|`showinfo=1`|動画再生前に動画のサムネやタイトル、ユーザ情報を表示する|**廃止**|
|`showinfo=0`|動画再生前に何も表示しない|**廃止**|

それぞれは**2018年9月時点の変更**です。

しかしながら未だに「`rel=0`で消せましたよね？」という質問が後を絶ちません🙄
それだけ動画を使用するシーンでは、YouTube埋め込みプレーヤーが活用されてきたということなのでしょう。

## YouTube IFrame Player APIの仕様を確認してみる

YouTube埋め込みプレーヤーは、埋め込み用`iframe`要素の`src`属性値にURLクエリパラメタを付与することで動作が変わります。

https://developers.google.com/youtube/player_parameters?hl=ja#Parameters

:::note warn
**注意**
日本語ページと英語ページで情報量が結構違うようです。
記事執筆時点では最終更新が2018年8月でした。[英語版はこちら](https://developers.google.com/youtube/player_parameters?hl=en#Parameters)。
:::

### クエリを何も指定しないと…

単純に埋め込もうとするとこんなイメージで表示されます[^1]。

[^1]: 埋め込まれるサービス（Qiitaなど）によって`iframe`要素自体の見た目は異なる場合があります。

```html
<iframe width="756" height="425" src="https://www.youtube.com/embed/O4MlCVVHJ6E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
```

<iframe width="756" height="425" src="https://www.youtube.com/embed/O4MlCVVHJ6E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

### いろいろパラメタを持たせてみよう

たとえば、メインビジュアルや背景に使うことを想定してパラメタを付与すると、こんな感じでしょうか👀（サイズはCSSでの調整が前提）

```html
<iframe src="https://www.youtube.com/embed/?autoplay=1&controls=0&disablekb=1&loop=1&mute=1&playlist=O4MlCVVHJ6E&playsinline=1&rel=0" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
```

|パラメタ|効果|備考|
|:--|:--|:--|
|`autoplay=1`|自動再生する||
|`controls=0`|プレイヤーのコントローラ（UI）を非表示にする||
|`disablekb=1`|キーボード操作を無効にする||
|`loop=1`|ループ再生する|`playlist`が必要|
|`mute=1`|無音にする|:warning:仕様ページに載っていない|
|`playlist=動画ID`|指定されたID順に動画を再生する|カンマ区切り|
|`playsinline=1`|iOSでもインライン再生する||
|`rel=0`|一時停止時に表示される関連動画を同じチャンネルに限定する||

<iframe width="756" height="425" src="https://www.youtube.com/embed/?autoplay=1&controls=0&disablekb=1&loop=1&mute=1&playlist=O4MlCVVHJ6E&playsinline=1&rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
　
非表示にできるものをできる限り非表示にしてみました。

でもやっぱり初期ロード時とループ時にいろいろ見えちゃいますね…👀🥒

## じゃあ隠しちゃえばいいんじゃないの？

たとえばSVGやCSSをつかって、IFrameを囲んじゃうとか…🙄
雲見たいに囲んだらかわいいし、スタイリッシュなフレームで飾ればかっこよさそうです！

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142709/0197f9a0-47a2-e646-2ea7-cbdecd5b0885.png)

背景動画にするとき、「CSSでYouTubeのUIは見えないように調整しちゃうから平気！」とか、
「`filter`でぼかしちゃえば見えてても気にならないかも？」というケースも考えられますね…👀

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142709/5847c57e-fb49-736a-eb80-6b6de9a41505.png)

しかし思わぬ落とし穴が…( ˘ω˘ )

## 残念ですが、隠すのはガイドライン違反です…😩

**YouTube API Services - Required Minimum Functionality**というドキュメントがあります。
これによると、YouTube動画プレーヤーの上に何か要素を重ねてはならないようです…🙈

https://developers.google.com/youtube/terms/required-minimum-functionality#overlays-and-frames

このドキュメントは、[YouTube API利用規約](https://developers.google.com/youtube/terms/api-services-terms-of-service-apac)の一部であり、APIクライアントの開発および実装において遵守する必要がある要件がまとめられたものです。

ここでいうAPIクライアントとは、YouTube IFrame Playerを埋め込むWebページのことも含みます[^2]。
「Overlays and frames」という節にはこのように書かれていました。

[^2]: <q cite="https://developers.google.com/youtube/terms/api-services-terms-of-service-apac#youtube-api-services-terms-of-service">API Client means a website or software application (including a mobile application) developed by you that accesses, or uses, the YouTube API Services.</q><br>https://developers.google.com/youtube/terms/api-services-terms-of-service-apac#youtube-api-services-terms-of-service

> **Overlays and frames**
>
> You must not display overlays, frames, or other visual elements in front of any part of a YouTube embedded player, including player controls. Similarly, you must not use overlays, frames or other visual elements to obscure any part of an embedded player, including player controls.

日本語訳すると次のようになります（[DeepLを使用しました](https://www.deepl.com/translator#en/ja/You%20must%20not%20display%20overlays%2C%20frames%2C%20or%20other%20visual%20elements%20in%20front%20of%20any%20part%20of%20a%20YouTube%20embedded%20player%2C%20including%20player%20controls.%20Similarly%2C%20you%20must%20not%20use%20overlays%2C%20frames%20or%20other%20visual%20elements%20to%20obscure%20any%20part%20of%20an%20embedded%20player%2C%20including%20player%20controls.)）。

> オーバーレイ、フレーム、その他の視覚的要素を、プレーヤーコントロールを含むYouTube埋め込みプレーヤーの一部の前に表示しては**いけません**。同様に、オーバーレイ、フレーム、その他の視覚的要素を使用して、プレーヤーコントロールを含む埋め込みプレーヤーのいかなる部分も見えなくしては**なりません**。

つまり、次のようなパターンはすべてNGということです。

![独自の再生ボタン、独自のコントローラ、独自の蓋絵（サムネ）、飾り付け、文字をかぶせる、一部だけしか見えない](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142709/7a4e2016-6b35-2f4a-95a9-c345968bdada.png)


これらはあくまでも一例です。実装するときは、ほかのUIが被らないように気を付けたほうがよさそうですね。
「**視覚的要素**」ということなので、プレーヤーをクリックさせないための透明な疑似要素や透明な画像を重ねるのは例外…？👀

### Q. YouTube動画をYouTube埋め込みプレーヤーに見えない形で埋め込む方法はないの…？

**A. 残念ながらありません。**

それができてしまうと、YouTubeがただの動画ストレージサービスになってしまいます。
これは推測ですが`rel`や`showinfo`パラメタの仕様が変わったのは、YouTubeを真っ当に動画SNSとして利用してほしいという考えがあったからなのかもしれません。

`modestbranding=1`を付与するとYouTubeのロゴを消せるのですが、`controls=0`でコントローラ自体を非表示にしたときには`modestbranding`は無視されてロゴが表示されます。
このような仕様になっているのも、そういった背景があったからなのかもしれませんね。

💡 素直に、独自サーバか専用のCDNに載せて配信するようにしましょう。

#### [技術的には可能](https://wa3.i-3-i.info/word18400.html)な対応策

JavaScriptを使えば、やりたいことができるかもしれません。

1. YouTube IFrame APIで動画プレーヤーを**非表示の状態で**埋め込む
2. 自動で再生を開始する
3. 開始イベントから4秒ほど待つ（UIが消える）
4. 埋め込んだ動画プレーヤーを表示させる

という手順を踏めば、YouTube埋め込みプレーヤーに見えないように動画を自動再生させることができます。
ただ、Webサイト回遊中のユーザにとって4秒というのはかなり長い時間です。

そこまでするなら、素直にYouTube埋め込みプレーヤーであることを隠さないほうがいいと私は思います🥒

## 最後に

業務でYouTube埋め込みプレーヤーを扱うことになったので改めて腰を据えてガイドラインを読んでみると、いくつか疑問が出てきました👀

### 隠しパラメータ？

埋め込みプレーヤーを無音にするためのパラメタに「`mute`」がありますが、みなさんはどこで知ったんでしょうか？
私もいつの間にか知っていましたが、[YouTubeプレーヤーのデモページ](https://developers.google.com/youtube/youtube_player_demo)でも確認できませんでした。
ご存じの方はお知らせいただけるとうれしいです！🥒

> Attributes and parameters of the YouTube player – including, for example, the appearance of YouTube branding in the player – are specified in YouTube API documentation and specifications (<https://developers.google.com/youtube>). You must not make changes to the YouTube player that are not explicitly described by the API documentation.

とあるので、`mute`を使うのは厳密にはNGなのかも…？

### YouTube埋め込みプレーヤーがあるページは手前に浮き出てくるUIを実装できない？

ガイドラインを見ると「Webページ中のYouTube埋め込みプレーヤーのいかなる部分も、視覚的要素で見えなくしてはならない（要約）」とのことでした。
YouTube埋め込みプレーヤーがあるページで[ツールチップ](https://www.w3.org/TR/wai-aria-practices-1.1/#tooltip)を実装するとき、ツールチップがプレーヤーに重ならないように気を付けたほうがよさそうです。

個人的に気になるのはダイアログ、特に[モーダルダイアログ](https://www.w3.org/TR/wai-aria-practices-1.1/#dialog_modal)です。
モーダルなダイアログを実装するときは、たいていオーバーレイがダイアログウィンドウの後ろにしかれます。

そのダイアログウィンドウやオーバーレイが動画プレーヤーに重なるのはどう判断されるのでしょうか。

ガイドラインの意図を察すると、YouTube埋め込みプレーヤーのアイソレーションゾーンを確保するというよりも、YouTube埋め込みプレーヤーがコンテンツの一部として利用される際、それが「YouTube埋め込みプレーヤーであるとわかること」と、YouTubeが意図する動画プレーヤーとしてのUIが改変されないことを目的としいるように感じるので、その周辺のUIについては制限しないようにも感じます。

このあたりについて、引き続き情報を探してみます🔍👀

何か情報をお持ちの方はコメントいただけるとうれしいです！

Happy hacking!🥒