📑 目次
正直に書くと、2026年4月23日の夜、俺は Claude Code というのが何なのか、よく分かっていなかった。インストールしてターミナルから動かせる、ぐらいまでは知っていた。でも、何を頼めばいいのか、どこまで頼めるのか、見当がついていなかった。
そのときやりたかったことは、頭の中ではかなりシンプルだった。妻はフィリピン人だが英語が一番得意で、日本語のニュースや録音した知人の話を英語で聞かせてあげたい。だが毎回、手動で文字起こしして、Google翻訳にかけて、というのが面倒で続かない。文字起こしから英語翻訳まで一気にやってくれるツールがあればいい——そのくらいの解像度だった。
とりあえずターミナルを開いて、頭にあったことをそのまま打ち込んだ。
妻がフィリピン人なんだけど、日本語の音声を英語にして
読ませてあげたい。日本語の音声を文字起こしして、
それを英語に翻訳してくれるツールを作ってほしい。
本当にこれだけだ。設計図もない。技術スタックの選定もない。文字起こしの仕組みは聞いたことがあった程度で、自分で動かすのは初めてだった。音声ファイルを作る、というところまでは、その時点ではまだ考えていない。
そうしたら、動いた。
これが正直な感想で、その夜は驚いていた。
「とりあえず動いた」第一版
最初の版は本当に荒削りだった。日本語 m4a を投げると、文字起こしされた日本語テキストと英語に翻訳されたテキストが出てくる、という小さなスクリプトだった。
俺がやったのは、Claude Code に頼んで、勧められた通りに pip install を打ち、出てきたエラーを Claude に投げ返して直してもらう、それだけだった。
3層構造(音声→テキスト→翻訳→音声)になっているとか、そんなことは最初は何も考えていなかった。あとで完成したものを見返したときに「あ、3層構造になっているな」と気づいた、という順番だ。
会話の中で機能が育っていった
最初に作ったテキストツールを実際に使ってみて、俺は妻に英語のテキストを送ってみた。返事は鈍かった。読んでくれていなかった。「長文のテキストはちょっと読まない」と妻は正直に言った。
そこで Claude にこう聞いてみた。「これ、読み上げして音声ファイルにすることってできる?」
できた。edge-tts という Microsoft の無料 TTS が紹介され、英語のボイス(en-US-JennyNeural)が使えると分かった。半日で mp3 出力まで動くようになった。
しかし出てきた mp3 を再生してみて、新しい問題に気づいた。日本語で30分の話を英語の音声にすると、20分くらいになってしまう。英語は日本語より単位時間あたりの情報密度が高い構造らしく、自然に縮む。
これだと運転中に聞いている妻が、元の話のリズムを失ってしまう。「元の音声と同じ尺に合わせられない?」と Claude に相談したら、二段構えの auto モード(標準速で仮生成 → 実測 → 比率で再計算 → 本生成)が出てきた。これも俺が考えた設計じゃない。「合わせられない?」と聞いただけで、解き方が返ってきた。
こうして機能を一個ずつ足していった結果、タイムラインはこうなっている。
- 4月23日:日本語音声 → 日本語テキスト → 英語テキストの翻訳まで
- 4月24日:「読まれない」問題が発覚 → edge-tts で英語の読み上げ mp3 出力を追加
- 4月27日:「運転中に聞くと英語版が短くなる」問題 → auto 速度調整を実装
- 4月後半:英語が苦手な妻のフィリピン人の友人にも聞かせたい、ということでタガログ語版を追加。動かしてみるとタガログ語は日本語とほぼ同じ尺で出てくることが分かった(英語ほど縮まない)
- 4月28日:Flask の Web 版にも手を出した。文字起こしと校正まで作ったが、「ターミナルから打つほうが早い」と気づいて結局 CLI に戻った
- 5月初旬:逆方向(タガログ語 → 日本語)の対応を追加。フィリピン人の友人が話した動画を理解したいとき用
つまり、最初から「全自動パイプラインを作ろう」と決めていたわけではない。動くものができてから、「こうしたい」という気持ちが次に出てきて、それを Claude にまた相談する、という積み重ねだった。
コマンドが嫌いな俺に、メニュー形式が生えてきた
機能が増えるにつれて、もう一つ問題が出た。実行時のオプションが煩雑になってきた。
./run.py --input audio.m4a --src ja --target tl \
--tts --voice fil-PH-BlessicaNeural --rate auto ...
これが俺は本当に嫌いだった。覚えられないし、オプションを1つ間違えるだけで動かない。
だから Claude にこう言った。「複雑なコマンドを打つの嫌だよ。番号で選べるメニューにしてほしい」
そうしたら、こうなった。
音声処理パイプライン
入力音声の言語を選択してください
1. 日本語音声
2. タガログ語音声
(Enter で 1 を選択)
番号: 1
モードを選択してください
1. 全自動 (音声 → 文字起こし → 翻訳 → 音声ファイル)
2. 文字起こし+翻訳 (音声 → 文字起こし → 翻訳テキスト、音声合成なし)
3. 文字起こしのみ (音声 → テキスト)
4. 翻訳・音声のみ (テキスト → 翻訳 → 音声ファイル)
5. 音声のみ (テキスト → 音声ファイル)
(Enter で 1 を選択)
番号:
番号を選んでいくだけで、必要な処理が走る。これが今でも俺の使い方だ。Web 版を作りかけたが、ターミナルでこのメニューを出すほうが結局1秒早い。
結果として組まれていた構造
振り返って構造として整理すると、こうなっていた。
- Layer 1(音声→テキスト):ローカルで動くオフラインの文字起こしモデル(CPU、int8量子化)。サイズは medium と large-v3 を切替可能
- Layer 2(校正・翻訳):Anthropic Claude Sonnet 4.6。文字起こしの誤変換を直してから翻訳
- Layer 3(テキスト→音声):edge-tts。タガログ語は
fil-PH-BlessicaNeural(女性)とfil-PH-AngeloNeural(男性)
ファイル構成も最初は main.py 1個だったが、機能が増えるにつれて Claude が「分けたほうがいい」と言うので、こんな形になった。
voice_proj/
├── run.py # メイン CLI(対話メニュー、500行弱)
├── app.py # Flask の Web 版(途中まで作ったが今は触っていない)
├── transcribe.py # 文字起こし単体
├── translate_speak.py # 翻訳・音声合成単体
├── templates/
│ └── index.html
└── config.json # API キー保存(chmod 600)
ハマった3つのこと
① タガログ語の文字起こし精度が日本語より明らかに低い
タガログ語版を足したとき、最初は medium サイズのモデルで試した。日本語音声なら問題なかったが、タガログ語の音声を入れると固有名詞や地名が崩れまくった。
原因は単純で、学習データ量の差だ。日本語は大量にあるが、タガログ語は少ない。これを身をもって知った。
より大きい large-v3 に切り替え、さらに Claude 校正で誤変換を拾わせる二段構えにして、ようやく実用レベルになった。
② auto 速度調整で2時間ハマった
edge-tts の rate パラメータを一発で渡せば目標尺に合うだろうと思っていた。違った。
同じ +20% を指定しても、テキストの内容や長さによって実際の尺がブレる。標準速で仮生成して実測する、という二段構えにして初めて安定した。クランプを [-50%, +100%] にしているのは、それ以上は音質が崩れるからだ。
③ API キーの保存場所で迷った
環境変数に置くと、別マシンで使うたびに export が面倒になる。かといって平文ファイルに置くのも気が引けた。
最終的には「初回入力 → config.json に chmod 600 で保存、環境変数優先のハイブリッド」にした。これも俺が考えた設計じゃなくて、Claude が「こういう運用にしませんか」と提案してくれたパターンだ。
CLAUDE.md という発見
使い続けてしばらくして、もう一つ気づいたことがある。ターミナルを閉じて再起動すると、Claude Code はそれまでのやりとりを覚えていない。
当たり前と言えば当たり前なのだが、最初は気づかなかった。「あの auto モード、なんでこういう実装にしたんだっけ」「ファイル名のルールどうしてた?」と数日後に聞いてみると、Claude は最初から考え直そうとしてくれる。それは親切なのだが、こちらとしては前回の判断を忘れたくない。
そこで、プロジェクトのルートに CLAUDE.md というファイルを置くようになった。ここに「このプロジェクトは何をするか」「主要ファイルの役割」「ファイル命名規則」「特殊な運用ルール」を書いておく。Claude Code はそのディレクトリで起動すると CLAUDE.md を最初に読んでくれる。これで「忘れる問題」がだいぶ和らいだ。
このファイルを書く習慣がついたのは、このプロジェクトの途中からだ。最初の数日は何も置いていなかった。やはり一回つまずかないと、こういう必要性は実感できないものらしい。
今でもターミナルで動かしている
このプロジェクトは Web 版を完成させていないので、今でも ./run.py をターミナルから直接叩いて使っている。実行するとあのメニューが出て、番号を選ぶだけだ。
1時間の日本語音声を入れると、文字起こし→校正→翻訳→音声合成、までで合計15分前後で終わる。出てくるのは英語の mp3(妻用)か、タガログ語の mp3(フィリピン人の友人用)だ。妻はイヤホンで運転中に英語版を聞いている。すでに10件以上処理した。
副次的に気づいたのは、これがそのまま土木現場の外国人作業員向けにも使えるということだ。日本語の会議録音を、タガログ語や英語の音声に変換して共有する、という用途だ。これも今は実用ベースで動いている。
git の正直な話
このプロジェクトは git 管理していない。.git ディレクトリすら作っていない。
Claude Code を使い始めたばかりで、コミット周りはまだあまり分かっていなかった。「動かす」「足す」「直す」のループを、ファイルを直接書き換えながらやっていた。それで困ったことは正直まだない。
別のプロジェクト(このサイト aigeek.biz の管理コード)で先日初めて git init した。そっちで慣れてから、このプロジェクトにも適用する予定だ。
限界と、次の一手
正直に書くと、まだやれていないことの方が多い。
- Web 版(
app.py)は途中まで作って放置している。CLI で困っていないので、当面手をつける予定はない - GPU/MPS は使っていない。CPU + int8 で動くので、必要になるまでは触らない
- 実音声ファイルは個人情報なので公開できない
- 妻の声でTTS(声のクローン)を作りたい。edge-tts は汎用ボイスしか出ないので、別のローカルクローンTTSを試す予定
振り返り
このプロジェクトを作るまで、俺は自分で「個人開発者」とは思っていなかった。ターミナルを開いて自然言語で頼むだけで動くものが出てくる、という体験が、その認識を変えた。
もうひとつ気づいたのは、機能というのは最初から決まっているわけではなく、使ってみて初めて足したくなるということだ。テキストだけで終わるはずだったツールに音声合成が生え、尺が合わない問題から auto 速度調整が生まれ、コマンドが嫌いな自分のためにメニューが組まれた。Claude Code は、そういう「次の一手」を投げ返す相手として、いてくれる。
Claude Code は「プログラムが書ける人のためのツール」ではなく、「やりたいことがある人のためのツール」だと、このプロジェクトで初めて理解した。書ける書けないの問題は、最初の一行を打ち込めるかどうかのほうが大きい。
同じスタンスで Claude Code を使った別の取り組みについては、こちらに書いた:Claude Code でAIニュースサイトを作って運営してみた|3週間の全記録。
📚 関連書籍を Amazon で探す
広告: Amazon アソシエイトプログラムによるリンクです
- 📚 Claude / Anthropic 活用 →
Claude Code・Cowork の実践ガイド。
- 📚 AI 駆動開発 →
開発者向け AI ツール活用書。












