「誰が議事録を書くか」問題を終わらせる

会議のたびに誰かが議事録を書く——この作業は全員が「自分がやりたくない」と思いながら、順番や暗黙の了解で割り当てられてきた。しかし今は、会議の録音データさえあれば自動で議事録を生成できる環境が整っている。

Whisper(OpenAIの音声認識モデル)とClaude APIを組み合わせれば、録音→文字起こし→議事録という一連のフローを自動化できる。しかも最小構成なら追加のサービス費用はほぼゼロで始められる。

フロー全体の設計

議事録自動生成フローは以下のステップで構成される。

  1. 会議の録音(Zoom・Teams・Meet)
  2. 録音ファイルの取得
  3. Whisperで文字起こし
  4. Claudeで議事録に整形
  5. NotionやSlackへの出力

各ステップの詳細を説明する。

ステップ1: 会議を録音する

Zoomの場合

Zoom Proプラン(月2,200円程度)以上でクラウド録画が使える。会議後、ZoomのダッシュボードからMP4・M4Aファイルをダウンロードする。

ZoomのAI機能(AI Companion)でも議事録が自動生成されるが、日本語の精度や要約品質に不満がある場合、WhisperとClaudeを使う方法の方が柔軟にカスタマイズできる。

Teamsの場合

Microsoft 365のTeamsでもクラウド録画が可能で、SharePointに保存されたMP4ファイルをダウンロードして同じフローに乗せられる。

Google Meetの場合

Google Workspace(Business Starter以上)でMeetの録画をGoogleドライブに保存できる。ドライブからファイルをダウンロードして使う。

ステップ2: Whisperで文字起こしをする

WhisperはOpenAIが公開しているオープンソースの音声認識モデルで、日本語の認識精度が高い。Pythonで動かす方法と、APIとして利用する方法がある。

ローカルで実行する(無料)

Pythonとffmpegをインストールして以下のコマンドを実行するだけだ。

pip install openai-whisper
whisper meeting.m4a --language Japanese --model medium

処理時間は1時間の音声に対してPC性能によって5〜20分程度。テキストファイル(.txt)が出力される。「medium」モデルでも十分な精度が出るが、「large」モデルの方がより正確だ(処理時間は長くなる)。

OpenAI Whisper APIを使う(有料)

ローカル実行が難しい場合、OpenAIのAPIを使う。音声1時間あたり約0.36ドルで文字起こしできる。

from openai import OpenAI
client = OpenAI()

with open("meeting.m4a", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="whisper-1",
        file=audio_file,
        language="ja"
    )
print(transcript.text)

ステップ3: Claudeで議事録を生成する

Whisperが出力した文字起こしテキストをClaudeに渡し、議事録フォーマットに整形させる。

import anthropic

client = anthropic.Anthropic()

# 文字起こしテキストを読み込む
with open("meeting_transcript.txt", "r", encoding="utf-8") as f:
    transcript = f.read()

minutes_prompt = f"""
以下は会議の文字起こしです。この内容を議事録に整形してください。

議事録のフォーマット:
## 会議概要
- 日時:(文字起こしから読み取れれば記載)
- 参加者:(名前が出てきたものを列挙)
- 目的:(冒頭の発言から判断)

## 決定事項
(明確に決まったことを箇条書き)

## 議論の要点
(話し合われた主要なトピックをH3見出しで整理)

## アクションアイテム
(誰が何をいつまでにするか)

## 次回予定
(次の会議・期限についての言及があれば)

文字起こし:
{transcript}
"""

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=4096,
    messages=[{"role": "user", "content": minutes_prompt}]
)

print(response.content[0].text)

1時間の会議の議事録が1〜2分で生成される。

ステップ4: Notionに自動保存する

PythonのNotion APIクライアントを使えば、生成した議事録をNotionページとして自動保存できる。

import requests

notion_token = "your_notion_token"
database_id = "your_database_id"

headers = {
    "Authorization": f"Bearer {notion_token}",
    "Content-Type": "application/json",
    "Notion-Version": "2022-06-28"
}

data = {
    "parent": {"database_id": database_id},
    "properties": {
        "タイトル": {"title": [{"text": {"content": "会議議事録"}}]}
    },
    "children": [
        {"object": "block", "type": "paragraph",
         "paragraph": {"rich_text": [{"text": {"content": minutes_text}}]}}
    ]
}

requests.post("https://api.notion.com/v1/pages", headers=headers, json=data)

精度を高めるための工夫

話者分離

Whisperの基本出力には話者の区別がない(「AさんがBさんに言った」という情報が失われる)。話者分離にはpyannote-audioというPythonライブラリを使う方法があるが、設定が複雑なため、まずは話者なしの文字起こしで始めることをすすめる。

専門用語の前処理

業界特有の用語や製品名はWhisperが誤認識することがある。文字起こし後にClaudeに「以下の固有名詞リストに基づいて誤字と思われる箇所を修正してほしい」と追加処理させることで精度が上がる。

長い会議は分割する

Claude APIのコンテキスト長には制限がある。2時間以上の長い会議は、文字起こしを30分ごとに分割してClaudeに処理させ、最後にまとめる方法が安定する。

コストのまとめ

1時間の会議1回あたりのコスト目安:

  • Whisperローカル実行:0円
  • OpenAI Whisper API:約50円
  • Claude API(claude-sonnet):約30〜80円
  • 合計:80〜130円/会議(APIを両方使う場合)

まとめ

Whisper + Claudeの議事録自動化フローは、ローカル実行を使えば追加費用ゼロで始められる。ただしセットアップにはPythonの基本知識が必要なため、エンジニアがいない場合はNotionAIやOtter.aiなどの既製サービスから始める方が現実的かもしれない。自社でカスタマイズしたい(特定フォーマット、社内システムへの自動連携等)場合は、WhisperとClaude APIの組み合わせが最もフレキシブルな選択肢だ。