M3 ProでMLX Whisper + Claude Codeを使って44分の会議音声を1分で議事録化した話
「また手動で議事録書いてる…」という状況から抜け出したくて、mlx_whisperとClaude Codeを組み合わせた議事録自動生成の仕組みを作ってみた。結論から言うと、M3 ProのMacBookで44分の音声ファイルをsmallモデルで文字起こしするのに約1分。そのテキストをClaude Codeに渡せば、整形された議事録が出てくる。この記事では実際に動かしたコードと手順、それと生成された議事録のサンプルを載せておく。
なぜMLX Whisperなのか
OpenAIのWhisperをApple SiliconのMLX上で動かすのがmlx_whisperだ。M1/M2/M3チップのNeural Engineをフル活用できるので、CPUやCUDAベースの環境と比べると処理速度が段違いになる。自分の場合、M3 Proで試したところ44分の音声がsmallモデルで約1分で完了した。
もともとCPUで動かしていたときは同じ音声で20〜30分かかっていたから、体感で20倍以上速くなった感じ。モデルサイズを上げれば精度も上がるけど、日本語の会議音声ならsmallで十分だと思う。固有名詞の誤認識がたまに出る程度で、文脈からの修正もClaude Codeに任せられる。
全体のパイプライン
処理の流れはシンプルで3ステップだ。
- Step 1: 音声解析(mlx_whisper)— 音声ファイルを受け取り、タイムスタンプ付きテキストを出力する
- Step 2: テキスト解析(Claude Code)— 生の文字起こしテキストを読んで、発言の意図・文脈を解釈する
- Step 3: 議事録作成(Claude Code)— 解釈結果をもとに、アジェンダ別・決定事項・アクションアイテムを整形する
Step 1は自前のPythonスクリプト、Step 2〜3はClaude Codeへの指示だけで完結する。コードを大量に書く必要はほとんどない。
実装コード(主要部分)
文字起こし処理の核心部分はこんな感じ。モデルサイズを引数で切り替えられるようにしておくと便利だ。
import mlx_whisper
model_map = {
"tiny": "mlx-community/whisper-tiny-mlx",
"base": "mlx-community/whisper-base-mlx",
"small": "mlx-community/whisper-small-mlx",
"medium": "mlx-community/whisper-medium-mlx",
"large": "mlx-community/whisper-large-v3-mlx",
}
model_id = model_map[model_size]
result = mlx_whisper.transcribe(
str(audio),
path_or_hf_repo=model_id,
language="ja",
verbose=False,
)
lines = []
for seg in result["segments"]:
start = f"{int(seg['start'] // 60):02d}:{seg['start'] % 60:05.2f}"
lines.append(f"[{start}] {seg['text'].strip()}")
result["segments"]にはタイムスタンプと発言テキストが入っている。これを[MM:SS.ss]形式のプレフィックス付きで保存しておくことで、後からClaude Codeが「どこで何が話されたか」を把握しやすくなる。language="ja"は日本語固定。英語の会議には別途対応が必要だ。
実行コマンド
スクリプトの実行はこれだけ。
python3 src/transcribe.py meeting_2025-04-22.m4a --model small --date 2025-04-22
output/2025-04-22.txtに文字起こし結果が保存される。このファイルをClaude Codeに渡す。
Claude Codeへの指示
文字起こしテキストができたら、Claude Codeにこんな指示を出す。
output/2025-04-22.txt を読んで、以下の形式で議事録を作成してください。
# 議事録
日時: 2025-04-22
参加者: (テキストから読み取れる範囲で)
## アジェンダと議論内容
(話題ごとにまとめる)
## 決定事項
- (決まったことをリスト化)
## アクションアイテム
| 担当 | タスク | 期限 |
|------|------|------|
(テキストから読み取れる範囲で)
これだけで動く。Claude Codeはファイルを読んで文脈を解釈し、話題の塊ごとにアジェンダを分けてくれる。「えーっと」「あの」といった発話のノイズも自動でスルーしてくれるのが地味に便利だ。
生成された議事録のサンプル
実際にどんな出力になるか、フィクションの会議録で試したサンプルを載せておく。
# 議事録
日時: 2025-04-22
参加者: 田中(PM)、佐藤(エンジニア)、鈴木(デザイナー)
## アジェンダと議論内容
### 1. 新機能リリーススケジュールの確認
田中より5月末リリースを目標とするスケジュール案が提示された。
佐藤からAPIの認証まわりの実装に2週間程度かかる見込みとの報告があり、
5月中旬を一次完成の目処とすることになった。
### 2. デザインレビューの進め方
鈴木が作成したモックアップをFigmaで共有することが決定。
来週木曜日にデザインレビュー会を設定する。
### 3. テスト計画
結合テストのスコープについて議論。今回はAPIエンドポイントを優先とし、
UIのE2Eテストは次フェーズに持ち越すことになった。
## 決定事項
- 5月末リリースを目標スケジュールとする
- デザインレビュー: 来週木曜日(Figmaモックアップベース)
- 結合テスト対象: APIエンドポイントのみ(UIは次フェーズ)
## アクションアイテム
| 担当 | タスク | 期限 |
|------|------|------|
| 佐藤 | API認証実装 | 5月中旬 |
| 鈴木 | Figmaモックアップ共有 | 来週月曜日 |
| 田中 | テスト計画ドキュメント作成 | 今週中 |
元の音声は「えーっと田中さん、スケジュールどうですかね」みたいな自然発話なのに、ちゃんと整形されて出てくる。決定事項とアクションアイテムを分けて出力してくれるのが個人的にはかなり助かっている。
処理速度と精度のバランス
モデルサイズ別の傾向をまとめておく。
| モデル | 44分音声の処理時間(M3 Pro) | 日本語精度 |
|---|---|---|
| tiny | 約15秒 | △(固有名詞多いと崩れる) |
| small | 約1分 | ○(会議用途なら十分) |
| medium | 約4分 | ◎(精度高い) |
| large-v3 | 約10分 | ◎◎(最高精度) |
日常的な会議録ならsmallで問題ないと思う。専門用語や固有名詞が多い技術的な会議ならmediumに上げると誤認識が減る。large-v3は精度は高いけど10分待つのはちょっとしんどいかな、という印象。
まとめ
- mlx_whisperはApple Silicon MacBookで動かすのが一番速く、M3 Proなら44分音声をsmallモデルで約1分で文字起こし可能
- 処理パイプラインは「音声→mlx_whisper→テキスト→Claude Code→議事録」の3ステップで完結する
- Claude Codeへの指示はテンプレートを1つ用意しておけば毎回ほぼコピペで動く
- 精度と速度のバランスは会議の種類によって
smallかmediumを選ぶのが現実的 - 日本語限定の実装なので英語・多言語の会議には別途
languageパラメータの変更が必要