はじめに
私は毎日会議だらけの管理職です。1日に何件も打ち合わせが入り、そのたびに議事録を書く時間はありません。そこで以前から、録音した音声ファイルを放り込むと議事録(Markdown)が自動生成されるWebアプリ「minutes-web」 を自宅サーバで運用してきました。
ちなみにこのminutes-webも、後述するAI秘書アプリも、すべてClaude Codeに作らせたもので、私自身は1行もコードを書いていません。「AIで作ったアプリの中身を、さらにAIのAPIで差し替える」という話です。
構成はこうでした。
- 文字起こし: faster-whisper (large-v3) をローカルGPU (RTX 4060) で実行
- 議事録生成: Claude API
- 基盤: Docker Compose (FastAPI + Nginx)
これで十分回っていたのですが、1つだけ不満がありました。文字起こしが遅い。RTX 4060だと30〜60分の会議音声で体感5〜10分かかります。その間GPUはうなりっぱなし。
そこに今回の「さくらのAI Engine」チャレンジです。音声認識モデル whisper-large-v3-turbo がAPIで使えるとのことなので、文字起こし部分だけをローカルGPUからさくらのAI Engineに差し替えてみました。
| 変更前 (RTX 4060 / faster-whisper) | 変更後 (さくらのAI Engine) | |
|---|---|---|
| 文字起こし時間(体感) | 5〜10分 | 約1分 |
| GPU負荷 | フル稼働 | ゼロ |
| 追加コスト | 電気代とファン騒音 | 無償枠内なら0円 |
爆速です。 ローカルGPU派だった私が、あっさり寝返りました。
システム全体像
まず全体像です。実は私はminutes-webのWeb画面をほぼ開きません。普段使っているのはElectron製のAI秘書アプリ(トレイ常駐)で、チャットで「議事録作成して」と頼むだけです。
- minutes-web: FastAPI + Uvicorn のバックエンドと Nginx 配信のフロントエンド(Vanilla JS)を Docker Compose で稼働。SSEで進捗をリアルタイム表示
-
AI秘書アプリ: Windows向けElectronアプリ。Claudeのtool useでminutes-webの
/jobsAPI を呼び、以後30秒間隔でステータスをポーリング - 完成した議事録はObsidianのVaultに直接書き込まれ、処理済みの音声ファイルは保存先フォルダへ自動移動
文字起こしを「さくらのAI Engine」に差し替える
処理モードを3択にした
いきなり全部乗り換えるのは怖いので、minutes-webに処理モードのトグルを付けました。「さくら / GPU / CPU」 の3択です。
既定は「さくら」(= さくらのAI Engine の whisper-large-v3-turbo)。万一APIが使えないときや無償枠を使い切ったときは、従来のローカルGPU (faster-whisper) にワンタッチで戻せます。クラウドとローカルのハイブリッド構成にしておくと精神衛生上とても良いです。
API呼び出しはOpenAI互換なので一瞬
さくらのAI EngineはOpenAI互換APIなので、エンドポイントは https://api.ai.sakura.ad.jp/v1/audio/transcriptions です。バックエンド(FastAPI)側の呼び出しはこれだけです。
import requests
API_URL = "https://api.ai.sakura.ad.jp/v1/audio/transcriptions"
MODEL = "whisper-large-v3-turbo"
def transcribe_sakura(file_path: str, token: str) -> str:
with open(file_path, "rb") as f:
resp = requests.post(
API_URL,
headers={"Authorization": f"Bearer {token}"},
files={"file": (file_path, f, "audio/mpeg")},
data={"model": MODEL},
timeout=300,
)
resp.raise_for_status()
return resp.json()["text"]
curlで試すならこうです。
curl -X POST https://api.ai.sakura.ad.jp/v1/audio/transcriptions \
-H "Authorization: Bearer $SAKURA_AI_TOKEN" \
-F "file=@meeting.mp3" \
-F "model=whisper-large-v3-turbo"
文字起こしAPIはAPI同期型のため、1リクエストあたり最長30分・30MBまでの制限があります(公式マニュアル記載)。それを超える長い会議用の分割機能はAPI側にはないため、minutes-web側でffmpegを使って事前分割してから順に投げています。このとき分割境界で発言が欠けるのを防ぐため、前後に約20秒のマージンを持たせたオーバーラップ分割にしているのがささやかな工夫です(重複部分は文字起こし後のマージで吸収)。minutes-webは元々ffmpegで音声変換をしているので、この分割処理の追加もClaude Codeに頼んだら一瞬でした。
速度比較
同じ会議音声で比べた結果です。
- RTX 4060 + faster-whisper (large-v3): 体感5〜10分。その間GPUファンが全力で回る
- さくらのAI Engine (whisper-large-v3-turbo): 約1分。手元のマシンは無音
正直、ここまで差が出るとは思っていませんでした。RTX 4060は8GB VRAMのミドルクラスなので当然といえば当然ですが、「データセンター級のGPU推論を無償枠で借りられる」インパクトは大きいです。精度も体感で遜色なし。日本語の会議音声で実用十分でした。
議事録生成はClaude、比較にgpt-oss-120bも試した
文字起こしの後段、議事録の生成はどうするか。せっかくなのでさくらのAI Engineの chat/completions(gpt-oss-120b)でも議事録を生成してみました。
curl https://api.ai.sakura.ad.jp/v1/chat/completions \
-H "Authorization: Bearer $SAKURA_AI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "system", "content": "あなたは優秀な議事録作成者です。..."},
{"role": "user", "content": "<文字起こし全文>"}
]
}'
結果、要約としては十分な品質でしたが、「発言内容をもらさず、指定テンプレートに沿って構造化する」という議事録タスクではClaudeの方が私の要件に合ったため、本番の議事録生成はClaude API(Anthropic SDK)を使っています。適材適所です。
- 文字起こし: さくらのAI Engine (速い・無料・GPU不要)
- 議事録生成: Claude (テンプレート遵守と網羅性)
この「モデルごとに得意分野で使い分ける」構成が素直に組めるのは、さくらのAI EngineがOpenAI互換APIだからです。なお、議事録生成のClaudeはAnthropicのAPIを直接呼んでいますが、さくらのAI Engine自体にも2026年5月からAnthropic互換のMessages API(/v1/messages)が追加されています(現時点の対応モデルはpreview/Kimi-K2.6のみ)。Claude CodeなどMessages API対応ツールからさくらのAI Engineを直接使う道も開けており、今後の対応モデル拡充に期待しています。
minutes-webの工夫: プロファイルと単語対応表
minutes-webには議事録の「仕様」をプロファイルとして登録できます。私は「議事録」と「1on1」の2つを登録していて、システムプロンプトとテンプレートをそれぞれ変えています。
もう1つ、地味に効くのが単語対応表です。Whisperの誤変換を後処理で補正します。
お気づきでしょうか。登録してある補正ルールが
- 「桜のクラウド」→「さくらのクラウド」
- 「桜インターネット」→「さくらインターネット」
なんです。Whisperは「さくらインターネット」を高確率で「桜インターネット」と書いてきます。さくらのAI Engineで文字起こしした「さくら」を、単語対応表で「さくら」に直す。今回の記事のために仕込んだわけではなく、業務で本当に必要だった補正です(弊社はさくらインターネットのグループ会社なので、会議で社名が出ない日はありません)。
実際の使い方: AI秘書に「議事録作成して」と言うだけ
ここからが日常の風景です。会議が終わったら、録音ファイルを指定フォルダに置いて、AI秘書アプリにこう頼みます。
AI秘書は指定フォルダのmp3を確認し、プロファイルが複数あるので、どちらで作るかを聞いてきます。
続いて会議名。ここだけ人間が入力します。
あとは全自動です。AI秘書がminutes-webの /jobs APIにジョブを登録し、30秒間隔でステータスを確認してくれます。
数分後には議事録がObsidianに保存され、元の音声ファイルもアーカイブフォルダへ移動済み。ちなみに会議名の先頭にYYYY-MM-DD形式の日付は自動で付記するようにしています。
人間がやったことは 「議事録作成して」→ プロファイル選択 → 会議名入力 の3ステップだけ。ローカルGPU時代は「文字起こしに5〜10分かかるから後でまとめてやろう」と溜めがちでしたが、約1分で返ってくるようになってからは会議が終わった直後にその場で流すのが習慣になりました。速度は行動を変えます。
無償枠のリアルな話
さくらのAI Engineの無償枠は、Chat completionsが月3,000リクエストと太っ腹な一方、Audio transcriptions(音声認識)は月50リクエストです。
- 30分以内の会議なら1本=1リクエストなので、月50本まで無料
- 私のように毎日複数の会議がある人間だと、長い会議の分割分も含めて月50リクエストを超える月が出てくる
ここで効いてくるのが前述の 「さくら / GPU / CPU」トグルです。無償枠は使い切りで自動課金がないため、超過を気にせず使い、枠を使い切ったらローカルGPUにフォールバックする運用にしています。「思い切って使い切れる」設計は、試す側として本当にありがたいです。
まとめ
- 自宅運用の議事録生成アプリの文字起こしを、ローカルGPU (RTX 4060) からさくらのAI Engine (whisper-large-v3-turbo) に差し替えた
- 体感5〜10分かかっていた文字起こしが約1分に。精度も実用十分
- OpenAI互換APIなので、差し替えはエンドポイントとトークンの設定だけ。既存のOpenAI SDK系コードベースなら移行コストはほぼゼロ
- 文字起こしはさくらのAI Engine、議事録生成はClaude、とモデルの適材適所がOpenAI互換APIのおかげで素直に組める。Anthropic互換のMessages APIも提供が始まっており、今後が楽しみ
- 無償枠(音声は月50リクエスト)を超えたらローカルGPUに戻せるハイブリッド構成が安心
- なお、minutes-webもAI秘書アプリもClaude Codeで開発しており、私はコードを1行も書いていません。AIに作らせたアプリを、AIのAPIで高速化する。良い時代になりました
54歳、会議だらけの毎日ですが、議事録を書く時間はゼロになりました。「議事録作成して」の一言で全部終わる体験、ぜひお試しください。
参考
- さくらのAI Engine: https://ai.sakura.ad.jp/sakura-ai/ai-engine/
- 操作ガイド(公式マニュアル、音声文字起こしAPIの制限): https://manual.sakura.ad.jp/cloud/ai-engine/03-operation-guide.html
- 「さくらのAI Engine」Responses API・Messages API の提供開始: https://cloud.sakura.ad.jp/news/2026/05/20/ai-engine-new-api/
- さくらのAI Engineことはじめ(2): 音声ファイルの文字起こし (さくらのナレッジ): https://knowledge.sakura.ad.jp/47088/
- スタートガイド: https://ai.sakura.ad.jp/column/category/start-guide/






