Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】youtube-transcript-api works locally but fails on the server: why, and how to fix it

2026年10月19日に「Dev.to」が公開したITニュース「youtube-transcript-api works locally but fails on the server: why, and how to fix it」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

`youtube-transcript-api`がローカルで動いてもサーバーで失敗するのは、YouTubeがクラウドIPをブロックするためだ。解決策として、回転する住宅用プロキシを使いIPを回避するか、ブロックされない自宅PCで実行し結果を転送する、またはホスト型文字起こしAPIの利用が効果的だ。

ITニュース解説

プログラム開発において、YouTubeの動画から文字起こし(トランスクリプト)を取得できるyoutube-transcript-apiという便利なライブラリがある。このライブラリを使えば、Pythonの数行のコードで簡単に動画のキャプション情報を取り出せるため、多くの開発者に利用されている。しかし、このツールを使って開発を進める中で、開発者の多くが直面する奇妙な問題がある。それは、自分のパソコン(ローカル環境)では問題なく動作するのに、クラウドサーバー(AWS、Google Cloud、Azure、Vercelなどの各種サービス)にデプロイすると、急に動作しなくなるという現象だ。

この問題の症状はいくつかある。比較的新しいバージョンのライブラリでは、RequestBlockedやIpBlockedといったエラーメッセージが表示される場合がある。また、古いバージョンでは、明らかに字幕があるはずの動画でもTranscriptsDisabledというエラーが出たり、一日に多くのリクエストを送った際に発生する429 Too Many Requestsというエラーや、取得したデータがXMLとして正しく解析できないというエラーが発生したりすることもある。いずれの場合も、自分のパソコンでは同じ動画に対して問題なく文字起こしが取得できるのに、サーバー上では失敗するという点が共通している。

では、なぜこのような現象が起こるのだろうか。その根本的な原因は、YouTube側にある。YouTubeは、不正なアクセスや過剰なデータ収集を防ぐために、特定のIPアドレスからのアクセスをブロックしている。特に、AWSやGoogle Cloudといった大手クラウドプロバイダーが保有するIPアドレスの多くは、自動化されたスクリプトやボットによるアクセスに利用されることが多いため、YouTubeはそのようなIPアドレスからのアクセスを積極的に制限しているのだ。youtube-transcript-apiライブラリの公式ドキュメントにも「IPバン対策」としてこの問題について言及されており、関連する多くの議論が開発者コミュニティで交わされていることからも、これは多くの人が遭遇する既知の問題であることがわかる。つまり、開発したプログラム自体に間違いがあるわけではなく、そのプログラムが動作しているサーバーのIPアドレスがYouTubeによってブロックされているのが原因なのだ。さらに、たとえ自宅や会社のインターネット回線であっても、短時間にあまりに多くのリクエストを連続して送ると、一時的にIPアドレスがブロックされる可能性もある。

この問題を解決する方法はいくつか存在する。

一つ目の解決策は、ライブラリにプロキシを設定し、住宅用プロキシを回転させて利用する方法だ。プロキシとは、インターネット上の代理サーバーのようなもので、プロキシを経由してアクセスすることで、YouTube側にはプロキシのIPアドレスが見えるようになる。youtube-transcript-apiは、このプロキシ機能を直接サポートしている。YouTubeは、データセンターのIPアドレスだけでなく、同じ静的なプロキシIPアドレスも時間とともにブロックしてしまうことがあるため、プロキシサービスの中でも「住宅用プロキシ」と呼ばれる、一般家庭のインターネット回線に割り当てられたIPアドレスを借りる形態のものを利用し、さらにアクセスごとに異なるIPアドレスに切り替える(IP回転)のが推奨される。これにより、YouTubeからブロックされにくくなる。この方法の利点は、文字起こしを継続的に大量に取得したい場合に有効で、すべての処理を自分のコード内で完結させられる点だ。しかし、プロキシサービスの利用には費用がかかり、通信量に応じた料金が発生することが多い。また、プロキシの切り替えや、エラー発生時の再試行(リトライ)のロジックは自分で管理する必要がある。データセンターのプロキシは住宅用プロキシよりも安価だが、クラウドプロバイダーのIPと同様にブロックされやすい点には注意が必要だ。

二つ目の解決策は、YouTubeにブロックされないマシンから文字起こしデータを取得し、その結果をサーバーに送るという方法だ。具体的には、自宅のインターネット回線につながった古いノートパソコンや、安価な小型コンピューターであるRaspberry Piなど、YouTubeがブロック対象としないようなIPアドレスを持つデバイスで、文字起こしスクリプトを実行する。そして、取得したトランスクリプトデータを、APIやファイル転送などの方法で、本来のクラウドサーバーに送るのだ。この方法は、個人的なプロジェクトで、文字起こしの量がそれほど多くない場合に有効である。手軽に試せるという利点がある一方で、処理を専門に行うためのマシンを一台余計に管理する必要があること、そして処理量がスケールしない(大量のリクエストには対応しにくい)という欠点がある。また、自宅のIPアドレスであっても、短時間に過度なリクエストを送信すれば、レート制限(一定時間内のリクエスト数の制限)を受ける可能性がある点も考慮すべきだ。

三つ目の解決策は、ホスト型(サードパーティ)のトランスクリプトAPIサービスを利用する方法だ。これは、文字起こしデータの取得とIPアドレスの管理を専門とする外部のサービスに任せるという考え方である。これらのサービスは、自社で多数のプロキシを運用し、YouTubeのブロックを回避しながらデータを取得する仕組みを構築しているため、開発者は複雑なIPアドレスやプロキシの管理から解放される。外部サービスに対してビデオのURLを渡すだけで、文字起こし結果をHTTP経由で受け取れる。例えば、筆者が開発したApify上の「YouTube Transcript Scraper」のようなサービスがこれにあたる。このようなサービスは、サーバーレス環境でプログラムを動かす場合や、継続的インテグレーション(CI)の自動テスト、またはAIエージェントに組み込む場合など、プロキシ管理の手間を省きたい場合に特に適している。利点はプロキシ管理が不要なことだが、その反面、外部サービスに依存することになり、文字起こしごとに料金が発生するというデメリットがある。多くのサービスには無料枠が設けられているが、利用量が増えれば費用も増加する。

どの解決策を選ぶべきかは、開発の目的や規模によって異なる。個人的なスクリプトで少数の動画の文字起こしが必要な場合は、自分のパソコンで直接実行するか、あるいは自宅の小さなマシンを使う二つ目の方法で十分かもしれない。もし、本番環境で安定した量の文字起こしをPythonで取得し続けたい場合は、一つ目の解決策である、ライブラリに住宅用プロキシを回転させて設定する方法が適しているだろう。そして、サーバーレス環境での利用や、CIによる自動処理、AIエージェントへの組み込み、あるいはプロキシ管理の手間を一切避けたいのであれば、三つ目のホスト型トランスクリプトAPIサービスの利用が最も効率的である。

最後に、どの方法を選択するにしても、一度取得した文字起こしデータはできる限りキャッシュしておくことが非常に重要だ。動画のキャプションは頻繁に変わるものではないため、同じ動画に対して何度もリクエストを送る必要はない。キャッシュしておけば、不要なリクエストを削減でき、YouTubeからのIPブロックやレート制限を受けるリスクを大幅に低減できる。これは、すべての解決策において共通して推奨される、非常に効果的な対策である。

関連コンテンツ

関連IT用語

関連ITニュース