はじめに
転職活動中のPython/Django初学者である私が、ポートフォリオとして
「Django + OpenAI Whisperによる完全無料文字起こしWebサービス」
の開発に挑戦した記録です。
結果的に「完全無料公開」は技術的・経済的制約により断念しましたが、
個人開発におけるサービス運用の現実を学ぶ貴重な体験となりました。
OpenAI Whisper とは
- OpenAIがOSSで公開した多言語対応の音声認識モデル
- tiny~largeの5サイズ(大きいほど精度↑・メモリ消費↑)
- 最小のtinyでも推論時に約1GB のメモリが必要
- CPUでも動作するがGPUと比べて十数~数十倍低速
- 日本語も高精度で認識
1. 「完全無料」にこだわった理由
開発目標
誰でも一瞬で試せるデモサービスの提供
- URL を開くだけ、会員登録・クレカ登録不要
- ポートフォリオとして技術力をアピール
想定するユーザー価値
- Whisperの高精度を気軽に体験: GPU使用時は日本語でもほぼリアルタイム処理
- 利用ハードルゼロ: 料金発生なし → 気軽に試用可能
開発者の制約
- 個人予算の限界: 転職活動中のため固定費を最小限に抑制
-
競合調査結果: 市販SaaSは月額¥1,000〜、OSSデモは従量課金のみ
→ 「完全無料」の先行事例なし
2. 技術スタックと環境
| 項目 | 技術・バージョン | 選定理由 |
|---|---|---|
| Backend | Python 3.11 + Django 5.2 | REST API開発の効率性 |
| AI Engine | openai-whisper 20240625 | 高精度・多言語対応 |
| Deep Learning | PyTorch 2.2 | Whisperの実行環境 |
| 音声処理 | ffmpeg 6.x | 各種音声フォーマット対応 |
| デプロイ候補 | Heroku/Render/Fly.io/PythonAnywhere | 無料枠での運用検討 |
3. アーキテクチャ全体像(フロー図)
パフォーマンス制約
| コンポーネント | リソース消費 | 処理時間(目安) |
|---|---|---|
| Whisper tiny | メモリ 1GB | 音声1分→処理10分(CPU) |
| ファイルアップロード | 一時ストレージ | ~100MB程度 |
| REST API | CPU・メモリ軽微 | 数ms(モデル読み込み除く) |
4. 主要コンポーネント & 動作デモ
4-1. 主要コンポーネント
| レイヤ | ファイル | 役割 |
|---|---|---|
| Front |
index.html, main.js
|
ファイル選択・送信、結果描画 |
| API | transcription/views.py |
受信 → Whisper 呼び出し → JSON 返却 |
| Model | Whisper tiny | 文字起こしエンジン |
| Storage |
/tmp(一時ディレクトリ) |
受信ファイル保存 → 削除 |
4-2. 動作デモ
注
このデモは CPU + Whisper tiny で動かしているため、
- 処理速度 : 音声 1 分あたり数分〜10 分かかる場合があります。
- 認識精度 : 上位モデルに比べると誤変換が増えます。
高速・高精度で試したい場合は、GPU 環境や base 以上のモデルでの実行をおすすめします。
5. 「完全無料運用」が困難だった技術的理由
メモリ制約
- 要求: Whisper tinyでも約1GB
- 無料枠: 各社256~512MB
- 結果: モデル読み込み段階でOOM(Out of Memory)
処理速度問題
- CPU環境: 音声1分あたり処理時間10分
- ユーザー体験: 実用は難しい待機時間
- 必要性: GPU環境が事実上必須
サーバーレス制限
- AWS Lambda/Cloud Functions: 実行時間15分上限
- コールドスタート: 初回起動に10秒以上
- 長尺音声: タイムアウトにより処理不可
無料枠超過リスク
例: Lambda無料枠(月125万秒)の場合
- 5分音声×20本で上限に到達
- バズった瞬間に課金発生
- 「完全無料」の前提と矛盾
6. 代替策の経済性検証
コスト試算(2024年7月時点、USD=150円)
| 方式 | 月額コスト | 広告収益との差額 | 採用可否 |
|---|---|---|---|
| tiny+CPU(無料サーバー) | ¥0 | - | ❌ メモリ不足で起動不可 |
| Whisper API(従量課金) | ¥2,700*¹ | ±¥0 | △ 利用増=課金増で黒字化困難 |
| 共有GPU(RunPod Spot) | ¥4,000*² | −¥1,300 | ❌ 恒常的赤字 |
| 専有GPU(AWS g5) | ¥43,000 | −¥40,300 | ❌ 個人開発では非現実的 |
*¹ 月300分利用時(¥0.9/分)
*² 50%稼働率での見積もり
広告収益シミュレーション
前提: 日300PV × RPM¥300 = 月¥2,700(技術系ブログ平均値)
| シナリオ | PV/日 | RPM | 月収益 | 共有GPU運用との差額 |
|---|---|---|---|---|
| 悲観的 | 200 | ¥225 | ¥1,350 | −¥2,650 |
| 標準的 | 300 | ¥300 | ¥2,700 | −¥1,300 |
| 楽観的 | 600 | ¥450 | ¥8,100 | +¥4,100 |
7. プロジェクトを通じて得た学び
技術的学習
- Django + REST API設計: フロントエンド分離による拡張性
- AI モデル統合: Whisperの実装とパフォーマンス最適化
- インフラ制約理解: 無料サービスの現実的な限界
📊 事業的視点
- コスト構造分析: 技術選定が運用コストに与える直接的影響
- 収益モデル検証: 広告収益だけでは継続運用困難
- ユーザー価値と経済性: 理想と現実のギャップ
ポートフォリオとしての価値
- 問題解決能力: 技術的制約を論理的に分析・整理
- 現実的判断力: 継続可能性を考慮した意思決定
- 学習姿勢: 失敗から具体的な知見を抽出
今後の展望
このプロジェクトの経験を踏まえ、次のようなアプローチを検討中です:
- フリーミアムモデル: 制限付き無料版 + 有料版の組み合わせ
- API連携: OpenAI Whisper APIを使用した従量課金モデル
結論
「完全無料での文字起こしサービス」という当初目標は達成できませんでしたが、
個人開発における技術選定・コスト設計・サービス運用の現実を
体系的に学ぶことができました。
今後は、この知見を活かして
技術的制約と経済性を両立できるサービス設計に挑戦していきます。
