0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kanaryの録音から議事録を自動生成。Claude Codeに議事録作成から案件フォルダへの振り分けまで任せてみた

0
Posted at

もはや当たり前みたいになっていますが、Google Meet は、主催者側で Gemini の議事録作成が有効なら、会議が終わると勝手に議事録を作ってくれます。

一方で、Zoom や Gemini の議事録がオフになっている会議、対面の打ち合わせでは何も残りません...
そういう会議は Mac の録音アプリ Kanary で録音して、終わったら Claude Code に「録音を整理して議事録を作って」とわざわざ毎回頼んでいました。(地味に手間がかかる)

これを、Kanary でタイトルを付けて録音を止めるだけにしました。あとは放置しておけば、Claude Code が議事録を書き、案件フォルダへ振り分けて、終わったら macOS の通知が来ます。

自動化するときに一番気をつけたのは、Claude にファイル操作まで任せないことでした。Claude がやるのは、議事録を書くことと、どの案件かを判断することだけ。ファイルの移動や削除は、シェル側で確認してから実行します。

Kanary とは

Kanary は Mac 用の会議録音アプリです。自分のマイクと相手の声(システム音声)を別トラックで録音できます。Zoom でも Meet でも、ブラウザで再生している音声でも、アプリを問わず録れます。

マイクの音も拾えるので、対面の打ち合わせでも使えます。録音にはタイトルを付けられ、一覧はコマンドラインから取得できます。今回の自動化にはちょうどよかったです。

何が変わったか

前 後
録音後にやること Kanary から書き出し → Claude Code を開く → 依頼 → 案件フォルダを答える タイトルを付けて録音を止める
議事録ができるまで 自分が手を動かした時 放置で自動処理
残るもの 録音・文字起こし・議事録 Kanary 内の原本・文字起こし・議事録

毎回まったく同じことをしていたので、ここに自分が挟まる意味ないな、と思ったのがきっかけです。

Claude Code に頼んだこと

最初にやったことは 2 つです。

  1. Kanary をインストールして、録音できる状態にする
  2. 議事録フォルダで Claude Code を開いて、「Kanary の録音から自動で議事録を作って」と指示する

Claude Code は Kanary の録音場所や CLI を調べ、文字起こしと claude -p を組み合わせたシェルスクリプト、それを 15 分おきに動かす launchd の設定まで作ってくれました。自分がやったのは、実際に動かしながら「案件フォルダはこう分けて」「処理用の録音は消して」と直してもらったくらいです。

ただ、この 2 手順だけで誰でも同じものができるわけではありません。自分の議事録フォルダには、以前から使っていた CLAUDE.md(議事録の書き方・命名規則)と transcribe.sh(whisper.cpp を呼ぶスクリプト)がありました。今回はその 2 つを使って組んでもらっています。

録音を止めたあと、裏ではこう動く

kanary-auto-minutes-flow.png

シェルスクリプトは 15 分おきに動きます。録音を止めた直後に始まるのではなく、次の実行タイミングで処理が始まります。

  1. Kanary の録音一覧から、タイトルが付いていて未処理のものを拾う
  2. whisper.cpp で文字起こし(ここまではローカルで完結し、音声ファイルを外に出さない)
  3. claude -p(Claude Code の非対話モード)が議事録を書き、どの案件フォルダに入れるかも判断する
  4. 案件/YYYY-MM-DD_会議名/ に文字起こしと議事録を置き、通知を出す。処理用に書き出した録音ファイルはここで消す

「タイトルが付いているものだけ」にしたのは、Kanary 側の操作だけで「これは議事録いらない」を表現できるからです。設定画面やリストを別に持たずに済みました。

処理用の録音ファイルは 1 時間で 150MB 前後あり、そのまま残すと容量を食います。議事録と文字起こしができたら処理用のファイルだけ消し、原本は Kanary 側に残すようにしました。必要になったら、そこから取り出せます。

音声から文字起こしまでの処理はローカルで完結しますが、議事録を作るときは文字起こしテキストを Claude Code へ渡します。会議を録音するときは参加者の了承を取り、社内ルールや機密情報の扱いも確認した上で使っています。

決めたこと:Claude に何をさせないか

無人で動くものなので、作る前に「Claude にやらせない範囲」を決めました。

  • ファイルの移動・リネーム・削除は Claude にやらせない。許可するのは読む・書く・探すだけで、書く先も 議事録.md と「どの案件か」を答える JSON の 2 ファイルに限定
  • 新しい案件フォルダは作らせない。既存フォルダから選ぶだけで、迷ったら _未分類/ に入れて人が動かす
  • 文字起こしは Claude にやらせない。決まった処理は whisper.cpp に任せる

Claude が返した案件名と同じフォルダがなければ、シェル側で _未分類 に入れます。Claude の回答をそのまま使わず、最後はシェルで確認してから配置する形です。これなら放置しても、変な場所にファイルを作られる心配がありません。

もう一つ効いたのが、プロンプトの最初に書いたこの一文でした。

自動処理から呼び出されています。人は見ていません。質問はせず、以下を最後まで実行してください。

これがないと「案件フォルダはどれにしますか?」と聞いて止まります。

対話で育てたルールがそのまま使えた

ここは作ってみて意外でした。議事録フォルダには前から CLAUDE.md があり、「決定事項・宿題・期限・担当を最優先で拾う」「文字起こし全文は貼らない」「自信のない固有名詞には(要確認)を付ける」といったルールを、対話しながら少しずつ足していました。

claude -p は実行したフォルダの CLAUDE.md を読むので、自動化用にルールを書き直す必要はありませんでした。対話で作っていた議事録と同じ書き方が、そのまま引き継がれました。

実際に回した結果

溜まっていた録音 8 件を流しました(M1 Pro)。

  • 案件フォルダの振り分けは 8 件中 8 件正解。ただし、タイトルの先頭に案件名を入れているので、ほぼタイトルで決まっています。内容だけで判断させたら揺れると思います
  • 所要時間はほぼ文字起こしで決まり、1 時間の録音で 10〜15 分くらい。Claude の処理はどれも 1〜2 分
  • Claude の費用は 1 件あたり $0.4〜0.6。2026 年 9 月に、自分の環境で表示された利用額です
  • 8 件中 2 件は、Claude が 1 回目に何も出力せず終了。15 分後に再試行する仕組みを入れていたので、2 回目で成功しました。リトライは最初から入れておいてよかったです
  • 相手の声が小さい録音は文字起こしが断片的になり、議事録も薄くなります。これは録音品質の問題で、仕組みでは救えませんでした。議事録の冒頭に「聞き取れなかった箇所」を注記させているので、読めば分かるようにはしています

次の定期実行を待つ時間まで含めると、録音を止めてから完成するまでは 10〜30 分ほどでした。これは 1 時間の録音を M1 Pro で処理した場合なので、録音の長さや Mac の性能で変わります。

実際にできた議事録

社内の技術勉強会を録音したときは、約 14 分の発表から次の議事録ができました。

全文は長いので一部だけ載せます。公開用に登壇者名やサービス名を置き換えましたが、見出しと要点のまとめ方は自動生成されたままです。


技術勉強会 議事録

項目 内容
日時 2026年8月・約14分
目的 AI時代のプロジェクト情報共有・キャッチアップの課題と、情報を集約する仕組みによる解決策の共有
出席者 発表者、参加者

※本議事録は Kanary の録音から自動生成。人名・固有名詞・数値は聞き取りベースのため要確認。
録音は発表の途中から始まっており、冒頭は含まれていない可能性がある。

1. 課題:プロジェクト情報が散らばっている

  • AI で個人の作業は早くなったが、チーム全体で見るとキャッチアップの回数は減っていない
  • GitHub・ドキュメント・課題管理ツールには「今どうなっているか」が残る
  • Slack や Teams には「なぜそうなったか」が残るが、タイムラインで流れて埋もれる
  • あとから参加した人は「この機能はなぜこうなったのか」を追いにくい

2. 各自がキャッチアップすることで起きる問題

  • メンバーごとに同じ調査を繰り返し、同じ作業が何度も発生する
  • 理解度が個人の AI スキルに依存する
  • プロジェクトの共通認識が個人に依存している

3. 解決策:情報をつないで AI に聞けるようにする

  • 散らばった情報をつなげた状態を作り、そこへ質問できるようにする
  • 経験の浅い人でも「この場合はどうなる?」と聞ける状態を作る
  • AI だけでなく、メンバーへの質問と回答も同じ場所に残す

4. ユースケース:見積もり依頼時のキャッチアップ

  • 従来は、リポジトリ、最新資料、課題管理ツール、Slack の履歴を順番に確認していた
  • 依頼する側にも、前提を一から説明するコストがかかっていた
  • 情報が集約されていれば、URL を1本共有し、分からない点だけ AI やメンバーに質問できる

決定事項

  • 勉強会での発表のため、会議としての決定事項はなし

TODO

担当 内容 期限
要確認 発表資料の保存場所を関連資料欄に追記 未定
要確認 録音に含まれていない冒頭部分を補足 未定

内容の要約に加えて、録音に入っていない箇所や、聞き取りに自信がない部分まで注記されています。あとから読んだときに、どこまで信用してよいか分かるのが助かりました。

何に使っているか

一番変わったのは、MTG 中に話を聴くことへ集中できるようになったことです。

それまでは会議中にメモを取っていましたが、メモを追いかけているうちに話の流れを見失うことがありました。いまは要点だけメモして、取り切れない部分は録音に任せています。

数日後に「あの数字いくつだったっけ」「担当は誰になったんだっけ」となっても、議事録の TODO 表を見るか、文字起こしを検索すれば出てきます。録音を聞き直すより圧倒的に速いです。

クライアントとの定例、社内外の勉強会、引き継ぎ MTG などで使っています。対面の打ち合わせでも同じ流れで議事録にできるのが、地味に大きいです。オンラインかどうかを気にせず、「タイトルを付けて録音を止める」で済むようになりました。

ハマったところ(短く)

  • launchd から ~/Documents が触れない。macOS のプライバシー保護で Operation not permitted になりました。フルディスクアクセスを与えるのは広すぎるので、osascript 経由で起動して回避しました
  • シェル変数の境界が曖昧になった。変数の直後に文字を続ける箇所を、$title から ${title} に直したら解消しました。日本語を含むファイル名を組み立てる箇所は全てこの形にしています
  • 通知が最初は出ない。launchd から通知を出すには、「システム設定 > 通知」で一度許可する必要がありました

まとめ

Kanary で録音を止めたら、あとは whisper.cpp、claude -p、launchd が動き、議事録を案件フォルダへ置いてくれるようになりました。会議中は要点だけメモして、細かい話は録音に任せています。「なんて言ってたっけ」となっても、文字起こしを検索すれば済みます。

無人で動かす前に、Claude に任せる範囲を決めました。今回は「書く」と「判断する」だけ。ファイル操作と最後の確認はシェルに持たせています。

Claude Code を無人で回したくなったら、まずは「Claude にやらせないこと」を決めるところから始めると安心です。

参考

関連記事

告知

最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを募集しております。
詳しくは採用情報ページをご確認ください。

みなさまからのご応募をお待ちしております。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?