最新技術を音声で学ぶ！AIラジオ「Tech Post Cast」で情報収集を効率化

## 📝 1. はじめに

日々、技術記事を読むのが大変だと感じたことはありませんか？
筆者は以前、通勤時間に技術記事を読むのを習慣にしていましたが、リモートワークが続いていることで、まとまった時間を取りづらくなっていました。

そこで個人開発した Web サービスが「[Tech Post Cast](https://techpostcast.com/)」です。

毎朝7時に AI の MC が Qiita で話題の技術記事を解説するラジオ番組を配信するサービスです。技術記事を「耳で楽しむ」ことで、移動中や作業中でも情報をキャッチアップできます。

2025年1月1日から番組を生成して配信していますので、まずは一度聴いてみてください！

https://techpostcast.com/

この記事では、最新の技術記事を簡単に情報収集できる **[Tech Post Cast](https://techpostcast.com/)** を紹介します！  

## 🎙️ 2. Tech Post Cast とは？

実は Tech Post Cast は、 `zenncast` というサービスからインスパイアを受けて開発しています。 `zenncast` は、Zenn の人気記事を AIが音声で読み上げるという私の悩みをバッチリ解決してくれるのはもちろん、生成AIを上手く利用した素晴らしいサービスです。

https://zenncast-web.vercel.app/

そこからリスナーがより使いやすい形を目指したのが「Tech Post Cast」です。
あと、`zenncast` が Zenn 記事を配信しているなら、Qiita 版があってもいいじゃないか、という単純な思いもありました。

以下では、Tech Post Cast のコンセプトや、こだわって開発した点を紹介します。

### 話題の記事をAIが解説したラジオ番組を毎朝配信

Tech Post Cast のメインコンセプトです。毎朝決まった時間に、話題の記事をAIが解説したラジオ番組を作成して配信しています。
毎日、決まった時間に配信する事でリスナーは習慣化しやすくなり、音声番組なので通勤途中はもちろん、家事や散歩、車の運転中でも気軽に聞いていただけます。

また、番組の長さは5分から10分ほどに収めて、ちょっとしたスキマ時間でも聞き終えるようにしています。

### 最新の話題の記事を自動的にピックアップ

Tech Post Cast では、ここ数日で話題になっている記事だけをピックアップしてお届けしますので、最新技術のキャッチアップに最適です！

### メジャーな Podcast サービスでも配信

音声番組といえば Podcast を利用されている方も多いと思います。そんな方々には使い慣れた Podcast サービスやPodcast アプリで Tech Post Cast の番組を聞いてもらえるように、下記4つのメジャーサービスでも配信しています。

- [Spotify](https://open.spotify.com/show/5RpulDOnvdqKdZc5rZ9jzD?si=c1qN4IknSVeLZYZRUGVz_A&nd=1&dlsi=a091ba4643004f59)
- [Amazon Music](https://music.amazon.co.jp/podcasts/edd04dca-b387-41a3-9bb2-fbd183f01f5d/techpostcast)
- [Apple podcasts](https://podcasts.apple.com/us/podcast/tech-post-cast/id1790035669)
- [YouTube](https://www.youtube.com/playlist?list=PLtafUFEHRNL_yFrmYht9Bw1Sec2T8m2Sv)

### チャプター機能で自由にスキップ

記事ごとにチャプターを設定し、リスナーが興味のある内容へすぐにジャンプできる仕組みを導入しました。

チャプターがあると「この部分は聞かなくてもいい」と思ったらスキップできるため、リスナーは効率よく番組を聞けます。
Tech Post Cast では、生成AIを使って一記事を1分程度で聞けるように要約しています。それでも興味がない記事に時間をかけたくないと思う人はいるでしょうし、興味がある記事だけをもう一度聞きたいと思う事があるでしょう。そんな時にチャプターを使って聞きたい箇所へ1アクションでスキップできるようにしました。

![スクリーンショット 2025-01-28 0.48.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154381/2450542e-690f-cdef-4247-5824184bfb40.png)

ご覧のとおり、再生中のチャプターが一目でわかる UI なので直感的に操作していただけると思います。

チャプターはリスナーにとって非常に重要な機能だと思うのですが、多くの Podcast サービスで利用できないのは残念です。そのような背景もあってチャプターは必ず付けたいと思っていました。

### 番組の配信は完全自動化

筆者はとても面倒くさがりなので定期的に番組を生成して公開する、といったことを毎日続ける自信はありません。

そんな性格ですので、毎日の配信をサボらないように「Tech Post Cast」での番組生成は完全自動化しています。
以下のような流れで配信を自動化しています。

1. Amazon EventBridge が毎朝7時前にラジオ番組生成処理を起動する
1. Qiita から人気の記事を取得してラジオ番組を生成する
    - ラジオ番組生成の流れは後で少し触れます
1. 生成したラジオ番組を Cloudflare R2 に配置する
1. サイトを再生成するため Cloudflare Pages のデプロイフックを実行する
1. サイトと併せて RSS フィードを更新し、それを各 Podcast サービスが検知して番組を配信する
1. 新しい番組が配信されたことを X でポストする

このような配信作業を毎朝、手作業で行うのは大変ですので完全自動化にはこだわっています。

### リスナーからのリクエストによる特集番組の配信（予定）

ラジオといえばリスナーからのリクエストやお便りが欠かせませんよね！
リスナーから番組で取り上げて欲しい記事のリクエストや感想などのお便りを募集し、それらを集めた番組を定期的に配信することを検討しています。

[番組の LINE 公式アカウント](https://lin.ee/a1dD32a) からリクエストを送られるようにする予定ですので、ぜひ友だち登録をしてお待ちください！

https://lin.ee/a1dD32a

## 📻️ 3. ラジオ番組に仕立てる

リスナーが聞きやすいように実際のFMラジオ番組を意識して番組を作るように工夫しています。

記事の要約を単純に読み上げるだけでは味気ないですし、実際すぐに飽きてしまいました。
そこで、前述の `zenncast` や実際のラジオ番組を参考にして MC が技術記事を解説するという形にしました。また、イントロやエンディングのトーク、BGM などの変化を入れてリスナーが聞きやすいラジオ番組として仕立てることにしました。

### MC キャラクター「ポステル」

番組台本を生成するプロンプトで番組 MC である「ポステル」のキャラクター設定をしています。

```txt
- ラジオ番組のMCは1人で、名前は「ポステル（Postel）」です
- 「ポステル」の由来はインターネットの基礎を築いたジョン・ポステル（Jon Postel）で、技術系リスナーへのオマージュを込めています
- ポステルは知的で物静かな人物で、エンジニアをリスペクトしています
- 口調は優しく丁寧です
```

この設定により生成される台本のトーンが統一され、よりラジオらしくなりました。

### BGM・ジングルの活用

実際のラジオ番組では、番組の最初と最後に流れる音楽（オープニングテーマ、エンディングテーマ）や、話題が切り替わる際に流れるジングル、BGM などの音楽が効果的に使われています。

Tech Post Cast では、これらの音楽を重要視しており番組で使う音源は時間をかけて探しました。

そんな中で、[MusMus さん](https://musmus.main.jp/) が製作されている音楽のイメージがピッタリでしたので、合成しているすべての音楽は [MusMus さん](https://musmus.main.jp/) のオリジナル楽曲を使わせていただいてます。本当にありがとうございます！

## 🤖 4. 番組生成の流れ

おおまかな番組生成の流れは下記となっています。

1. 番組で取り上げる記事のピックアップする
2. ピックアップした記事を生成AIで要約する
3. 当日の日付と、記事の要約を基に番組の台本を生成AIが作成する
4. 台本から音声ファイルを生成する
5. 台本の音声ファイルと各種音楽（導入・終了音楽、BGM、ジングル）を合成する
6. チャプターを付与する

番組生成処理の詳細は、機会があれば別の記事で解説したいと思います。

## 🔧 5. Tech Post Cast のシステム構成

ここでは、Tech Post Cast のシステム構成を少し紹介します。

### フロントエンド

サービスサイトは、Nuxt3 の SSG 機能を利用して静的サイトを生成し、Cloudflare Pages を利用して公開しています。
毎朝のラジオ番組生成後に Cloudflare Pages のデプロイフックを実行し、サービスサイトを最新状態に更新しています。

生成した番組音声ファイルは Cloudflare R2 の CDN を利用して公開しています。最初は Amazon S3 + Amazon CloudFront を利用する予定だったのですが、Cloudflare R2 は **データエグレス料金が無料** ということで、個人開発のお財布にも優しいであろうという理由で決めました。また、バケットやオブジェクトの操作が **S3互換API** であることは S3 からの切り替えでは非常に助かりました。

### バックエンド

バックエンドは、AWS Lambda 上で TypeScript の優れた Web アプリケーションフレームワーク「NestJS」を実行しています。NestJS は DI や Middleware, Guards などの充実した機能があり、ディレクトリ構成もある程度の開発ルールがあるので構築はもちろん、保守がしやすいフレームワークです。

今回のバックエンドはバッチ処理が主体なので即時性や大量アクセスといった要件がほぼないため、コールドスタンバイにより多少の起動時間がかかっても問題がありません。それよりは、開発や保守がしやすい仕組みであることを優先しました。

また、Lambda で NestJS を実行するにあたっては [Lambda Web Adapter](https://github.com/awslabs/aws-lambda-web-adapter) という仕組みを使って、Lambda 上にコンテナーを乗せています。
なぜコンテナーを使うのか？という疑問があると思いますが、今回は音声ファイルの合成をいくつか行うので、ffmpeg を使えるようにコンテナーイメージを利用しています。

### 音声合成

番組音声の生成では [Google Cloud の Text-to-Speech API](https://cloud.google.com/text-to-speech?hl=ja) を利用しています。
当初は OpenAI API の `Text to speech` を利用していたのですが、いくつかの課題があり [Google Cloud の Text-to-Speech API](https://cloud.google.com/text-to-speech?hl=ja) へ乗り換えました。

大きな理由として SSML を使える点があります。
各種 Text-to-Speech サービスの AI がいかに優秀とはいえ、用語の読み間違いは必ず発生します。とくに最新技術の用語は AI でも読み間違えることが多いです。そこで読み方を補正できるよう、設定した用語の読み方を SSML で指示できることが重要でした。

OpenAI API の `Text to speech` で生成される音声は抑揚が効いていて、とても FM ラジオの MC っぽい音声を生成してくれるのですが、用語を誤って読まれてしまうと内容が頭に入ってこなくなるので、やむなく切り替えました。

## 💡 6. まとめ & フィードバック募集

まだまだ色々と書きたい気持ちはあるのですが、長くなりすぎると読みづらいので、今回はこの辺りで終わりにしたいと思います。

### IT技術記事のAIラジオ配信サービス **Tech Post Cast** まとめ

- **Tech Post Cast** は **最新の技術記事を耳で簡単に情報収集できるツール** です
- 毎朝決まった時間に話題の IT 技術記事を AI が解説したラジオ番組を配信しています
- リスナーが聞きやすいようにチャプター機能などで工夫しています

### 最後にお願い

ぜひ [Tech Post Cast](https://techpostcast.com/) を使っていただき、コメントなどで感想を教えてください！
X でシェア＆フィードバックも大歓迎です！ハッシュタグ `#TechPostCast` を付けてポストしていただけると大喜びします！