Don't Marry Your Podcasting Platform: Host Your Own Podcast Feed

Michael Lynch

ポッドキャスト配信プラットフォームに縛られるな:RSSフィードは自分でホストしよう

原文は Michael Lynch により に公開されました。 このブログを購読する

LibsynやPodbeanのようなプラットフォームでポッドキャストを配信しているとします。途中で別のプラットフォームに乗り換えることになったらどうなるでしょうか?すでにリスナー全員に、古いプラットフォームを指すRSSのURLを渡してしまっています。

例えば、LibsynではポッドキャストのRSS URLは次のような形になります。

  • https://feeds.libsyn.com/12345/rss

Apple Podcastsにポッドキャストを登録したり、リスナーにRSS URLを共有したりしたとき、直接ポッドキャスト配信プラットフォームを指すURLを教えてしまっていることになります。

引っ越しをすると、リスナーのポッドキャストアプリはすべて、古いURLのままあなたの番組を探し続けることになります。

リダイレクトに頼るべきではない

多くのポッドキャストがプラットフォームを乗り換える際、古いプラットフォームにリダイレクトの設定を依頼します。例えばLibsynからPodbeanに移行する場合、Libsynの設定画面で新しいポッドキャストのURLへ転送するように設定します。

そうすれば、リスナーが古いLibsynのRSS URLにアクセスするたびに、移転したことが通知される仕組みです。

しかし、この方法には2つの問題があります。

  1. すべてのポッドキャストプレーヤーがリダイレクトを見てURLを更新してくれるわけではないため、古いフィードをいつまでもチェックし続けるものが出てきます。
  2. 古いホストが今後もリダイレクトを提供し続けてくれる保証はありません。

特に(2)は重要です。ポッドキャストのホスティングプラットフォームの立場になって考えてみてください。顧客がプラットフォームから離れるのを助ける機能を、なぜわざわざ提供したいと思うでしょうか?そのプラットフォームが経営に行き詰まれば、リダイレクトは真っ先に廃止されかねない機能です。

では、どうすればいいのでしょうか?リスナーにポッドキャストのURLを渡す必要はあるのに、この問題をどう回避すればいいのでしょうか?

RSSフィードは自分でホストする

ポッドキャスト配信プラットフォームは、一見同じものに見えますが、実際には2つの異なるサービスをホストしています。

LibsynやPodbeanでポッドキャストをホストすると、実際には次の2種類のファイルを代わりにホストしてもらっていることになります。

  1. 音声・動画の収録ファイル
  2. すべての収録ファイルをまとめたインデックスである、ポッドキャストのRSSフィード

しかし、この2つのサービスは本来まったく独立したものです。必要であれば、別々のベンダーでホストしても何の問題もなく動作します。実際、私自身がそうしていますし、他のポッドキャスト運営者にもそうすることを勧めています。

どちらのホスティングも技術的に特に難しいことはありませんが、特に(2)は驚くほど安価に実現できます。

ポッドキャストの収録ファイルは、長さや品質、動画の有無にもよりますが、一般的に50MBから5GBにもなる大きなファイルです。一方、ポッドキャストのRSSフィードは非常に小さく、通常は1MB未満です。ホスティングコストで言えば、リスナーがフィードを1万回チェックしても、かかる費用は1セント程度です。

RSSフィードは、ポッドキャストプロバイダーの前面にCDNを設置することで、シンプルかつ安価にホストできます。CDNが担うのはRSSフィードの配信だけで、ポッドキャストプレーヤーは従来どおり、サイズの大きな音声・動画ファイルは直接ポッドキャストプロバイダーから取得します。

フィード

独自ドメインのURLだけを配布する

https://feeds.libsyn.com/12345/rssのようなURLをリスナーやポッドキャストディレクトリに配布してしまうと、Libsyn(あるいは利用中のホスティングプロバイダー)に縛られることになります。

そうではなく、自分が所有するドメイン名のRSS URLだけを配布すべきです。

例えば、ポッドキャストのタイトルが「My Awesome Dinosaur Podcast」であれば、番組用に次のようなドメインを取得できます。

  • myawesomedinosaurpodcast.com

補足:ドメイン名の購入方法については本記事の範囲外なので説明は省きますが、どのドメイン名プロバイダーでも構いません。個人的にはDNSimpleを気に入って使っています。

リスナーやポッドキャストディレクトリに渡すポッドキャストフィードのURLは、次のようになります。

ポッドキャストホストを乗り換えても、リスナーは何もする必要がありません。同じfeeds.myawesomedinosaurpodcast.comのURLから聴き続ければいいだけです。彼らはLibsynやPodbeanのURLを一度も目にすることすらありません。

自前でRSSフィードをホストする

この例では、次の値を例として使います。

  • https://feeds.libsyn.com/12345/rss: ポッドキャストホストから指定されたRSSフィード
  • https://feeds.myawesomedinosaurpodcast.com: 実際に使うURL

BunnyCDNのアカウントを作成する

まず、BunnyCDNでアカウントを作成します。

どのCDNを使っても構いませんが、Bunnyはシンプルで安価なので私は気に入っています。

Pull Zoneを追加する

Bunnyのアカウントで、CDN > Add Pull Zoneに進みます。

Pull Zoneに名前を付けます。名前は何でも構いません。この例ではexample12345という名前を使います。

Origin Typeでは「Origin URL」を選択し、利用中のベンダーのポッドキャストRSS URLを入力します。

「Standard Tier」を選択します。

「Pricing Zones」では、最も安いオプションだけを選んで他は外してください。RSSフィードがすべての地域で超高速である必要はありません。リスナーの体験には影響しないからです。

最後に「Add Pull Zone」をクリックします。

URLをテストする

BunnyがPull Zoneを作成したら、上部に表示されるb-cdn.netのURLにアクセスしてみてください。

うまくいっていれば、そのリンクにアクセスしたときにポッドキャストのRSSフィードが表示されるはずです(ブラウザによってはファイルが自動的にダウンロードされます)。

すべて正常に動作していれば、難しい部分は終わりです。あとはカスタムドメイン名を設定するだけです。

カスタムドメインを紐付ける

作成したPull Zoneで、General > Hostnamesに進みます。

次のように、ポッドキャストのドメインを入力します。

  • feeds.myawesomedinosaurpodcast.com

補足:サブドメインは必ずしもfeedsである必要はありません。好きなものにして構いませんが、私はfeedsが分かりやすい慣例だと思っています。

Bunnyから、ドメインレジストラ側で設定する必要のあるDNSレコードが提示されます。

ドメインを取得したサービスに戻り、Bunnyに表示されたDNSエントリを追加します。

ドメインレジストラでCNAMEレコードの追加が完了したら、Bunnyの画面に戻り、「Verify & Activate SSL」をクリックします。

キャッシュを上書きする

Bunny(そしてすべてのCDN)はデータを積極的にキャッシュします。他のサーバーの負荷を軽減するように設計されているため、Bunnyはデフォルトでは「Origin URL」(ポッドキャストプロバイダー)の更新を時々しかチェックしません。

これが、リスナーがタイムリーに更新を受け取る妨げになることがあります。ポッドキャストを更新したのに、Bunnyが古いコピーを配信し続けるせいで1〜2日誰にも届かない、という事態は避けたいはずです。

Pull ZoneのCaching > Generalに進むことで、Bunnyが古いコピーのポッドキャストフィードを配信するのを防ぐことができます。

「Cache Expiration Time」を「Override: 20 minutes」に変更します。

これで、Bunnyがポッドキャストのフィードのコピーを保持するのは最大20分までになります。好みに応じて、この時間は長くしたり短くしたりできます。

「Do not cache」はおすすめしません。人気のポッドキャストで数百人のリスナーが同時にフィードをチェックするような場合、Bunnyがポッドキャストプロバイダーに一斉に数百件のリクエストを送ることになり、プロバイダー側がBunnyからのリクエストをブロックして、リスナーにエラーメッセージが表示される原因になりかねません。

正規URLを置き換える

RSSフィードの細かい点として、次のようなselfタグが含まれていることがあります。

<atom:link href="https://feeds.libsyn.com/12345/rss" rel="self" type="application/rss+xml"/>

https://feeds.myawesomedinosaurpodcast.comのURLを配布していても、一部のポッドキャストプレーヤーは元のURLよりもselfタグの方を優先するため、CDNでホストしているバージョンがバイパスされてしまいます。

これを防ぐには、Bunnyのカスタムエッジスクリプトを使う必要があります。

  1. Edge Platfrom > Scriptingに移動し、「Add Script」をクリックします。
  2. 「Deploy and edit on Bunny.net」を選択します。
  3. スクリプト名を「Replace RSS self tag」にします。
  4. Typeを「Middleware」に変更します。
  5. 「Add Script」をクリックします。
  6. コードエディタに次のコードを入力します。
import * as BunnySDK from "https://esm.sh/@bunny.net/[email protected]";

// Replace with the vendor-specific URL to your RSS feed.
const SOURCE_URL = "https://feeds.libsyn.com/12345/rss";

// Replace with the domain name that you own.
const TARGET_URL = "https://feeds.myawesomedinosaurpodcast.com";

/**
 * Modifies the response from the origin to replace a specific URL.
 *
 * @param {Context} context - The context of the middleware.
 * @param {Request} request - The current request done to the origin.
 * @param {Response} response - The HTTP response or string.
 */
async function onOriginResponse(context: { request: Request, response: Response }): Promise<Response> | Response | void {
  const responseText = await context.response.text();

  // Replace the URL with simple string replacement
  const modifiedText = responseText.replace(SOURCE_URL, TARGET_URL);

  // Create a new response with the modified text
  return new Response(modifiedText, {
    status: context.response.status,
    statusText: context.response.statusText,
    headers: context.response.headers
  });
}

BunnySDK.net.http.servePullZone()
  .onOriginResponse(onOriginResponse);

最後に「Connect Pull Zone」ボタンを押して、このスクリプトをRSSフィードに紐付けます。

完了です!

正しく設定できていれば、これでポッドキャストフィードを配信するカスタムURLができたはずです。

これで、あなたが管理するURLを手に入れました。将来ポッドキャストプラットフォームを乗り換えることになっても、BunnyCDNのPull Zoneの「Origin」フィールドを更新するだけで済みます。リダイレクトに対応したり、古いプラットフォームに囲い込まれることを心配したりする必要はもうありません。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント