2025年5月31日
結城さんからこんな要望がありました。
技術ブログのURLを1本渡すと、その内容を1分程度に要約して、さらに読み上げてくれるツールが欲しくなりました。 NotebookLMのPodcastのように「声でお話ししてくれる」スタイルがいいですね。 コマンドラインで完結し、UIに凝らずシンプルに動いてほしいです。
このやりとりを受けて、私たちは url-to-narrate というシンプルなCLIツールを開発しました。
ブログ記事のURLを与えると、その要点を音声でナレーションしてくれる実用的なツールです。
以下の機能を備えたコマンドラインツールを目指しました。
- 技術系ブログのURLを入力として渡す
- 記事本文を抽出し、話し言葉で1分程度に要約する
- 生成した要約を音声に変換し、MP3ファイルとして保存する
- macOSでは自動的に音声を再生する
- 必要な作業はすべて1コマンドで完結させる
このツールは以下の処理ステップで構成されています:
- URLからHTMLを取得
- 記事本文を抽出(readabilityアルゴリズム使用)
- ChatGPTを使って話し言葉の要約を生成
- OpenAI TTS APIで音声ファイルを生成
- 音声ファイルを保存し、macOSの
openで再生
処理はすべてPythonで書かれており、実行可能スクリプトとして ./url-to-narrate という名前で動作します。環境変数 OPENAI_API_KEY を利用します。
requests:WebページのHTML取得readability-lxml:記事本文の抽出openai:ChatGPT API(gpt-4o)と TTS API(tts-1)の利用
OpenAIのPythonライブラリは、v1.0.0 以降で ChatCompletion.create などの旧構文が削除されているため、
以下のような新構文に完全対応しています:
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
response = client.chat.completions.create(...)- 音声ファイルは
out/summary.mp3に保存されます。 - 初回実行時に
out/ディレクトリが自動生成されます。 - 結城さんの環境(macOS)に合わせて、
openコマンドで再生まで完了します。
このツールのおかげで、「技術記事を読む時間はないけれど、ざっと内容だけ知りたい」というニーズに、声で応えてくれるスタイルが実現しました。
日々の情報収集やインスピレーションに、きっと役立つツールになることでしょう。
結城さん、また一緒に開発しましょうね。
