بنقرة واحدة
sync-meetings
Google Meet付きカレンダー予定の文字起こし・Geminiメモを取得し、議事録としてvaultに書き出す
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Google Meet付きカレンダー予定の文字起こし・Geminiメモを取得し、議事録としてvaultに書き出す
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | sync-meetings |
| description | Google Meet付きカレンダー予定の文字起こし・Geminiメモを取得し、議事録としてvaultに書き出す |
| user-invocable | true |
| argument-hint | [日付|イベントタイトル] (省略時は今日。例: today, yesterday, 2026-04-03, 4/3, スプリントレビュー) |
| allowed-tools | ["Read","Write","Edit","Bash","Grep","Glob"] |
Google Meet 付きカレンダー予定の文字起こし(トランスクリプト)・Gemini 会議メモを取得し、構造化された議事録として vault に書き出す。
{vault.path}/journal/meetings/{yyyyMMdd}-{sanitized-title}.mdリポジトリルートの config.yaml から vault.path を読み取る。
gws CLI (Google Workspace CLI) を使用する。
必要スコープ(gws auth status で確認):
https://www.googleapis.com/auth/calendar.readonlyhttps://www.googleapis.com/auth/meetings.space.readonlyhttps://www.googleapis.com/auth/documents.readonlyhttps://www.googleapis.com/auth/drive.readonlygws 実行時の注意:
Using keyring backend: keyring は stderr に出る。JSON パース時は 2>/dev/null で捨てることrm ~/.config/gws/token_cache.json で再取得させるconfig.yaml を読み、vault.path を取得するdate コマンドで現在の日時を取得する(推測しない)today → 今日yesterday → 昨日YYYY-MM-DD or M/D → 指定日NOW=$(date '+%Y-%m-%dT%H:%M:%S')
TODAY=$(date '+%Y-%m-%d')
gws calendar events list で対象日の予定を取得する。
gws calendar events list --params '{
"calendarId":"primary",
"timeMin":"{TARGET_DATE}T00:00:00+09:00",
"timeMax":"{TARGET_DATE}T23:59:59+09:00",
"singleEvents":true,
"orderBy":"startTime"
}' --format json 2>/dev/null
フィルタ条件:
conferenceData.conferenceId が存在するイベント(Google Meet 付き)summary に部分一致するものに絞り込むstart.date だけで start.dateTime がないもの)は除外各イベントから以下を抽出する:
summary(タイトル)start.dateTime / end.dateTimeattendees[](displayName 優先、なければメールローカル部)conferenceData.conferenceId ← Meet 会議コードconferenceData.entryPoints[].uri のうち https://meet.google.com/ で始まるもの(Meet リンク)Meet 付きイベントがない場合は「対象日に Google Meet 付きのイベントが見つかりませんでした」と報告して終了する。
各イベントについて space.meeting_code で絞り込み、対象日の conferenceRecord を特定する。
gws meet conferenceRecords list --params "{
\"filter\":\"space.meeting_code=\\\"$MEETING_CODE\\\" AND start_time>=\\\"${TARGET_DATE}T00:00:00Z\\\" AND start_time<=\\\"${NEXT_DATE}T00:00:00Z\\\"\"
}" --format json 2>/dev/null
複数レコードが返った場合はイベントの開始時刻に最も近いものを選ぶ。 該当レコードがない場合は「まだ会議記録が生成されていない」として扱い、イベントメタデータのみで出力する。
conferenceRecord の name(例: conferenceRecords/xxx)を使って各リソースを取得する。
# transcripts
gws meet conferenceRecords transcripts list --params "{\"parent\":\"$CR_NAME\"}" --format json 2>/dev/null
# smartNotes (Geminiメモ)
gws meet conferenceRecords smartNotes list --params "{\"parent\":\"$CR_NAME\"}" --format json 2>/dev/null
# participants (参加者名)
gws meet conferenceRecords participants list --params "{\"parent\":\"$CR_NAME\"}" --format json 2>/dev/null
transcript が存在する場合、発言単位のエントリを取得する。--page-all で自動ページング。
gws meet conferenceRecords transcripts entries list \
--params "{\"parent\":\"$TRANSCRIPT_NAME\",\"pageSize\":100}" \
--page-all --page-limit 20 \
--format json 2>/dev/null
各 entry は以下を持つ:
startTime / endTimeparticipant(participants list と突き合わせて話者名に変換)text(発言内容)participant リソース名から participants list の signedinUser.displayName に名前解決する。
smartNotes が存在する場合、docsDestination.document を使って Doc 本文を取得する。
gws docs documents get --params "{\"documentId\":\"$DOC_ID\"}" --format json 2>/dev/null
レスポンスの body.content[] を走査し、paragraph.elements[].textRun.content を連結してプレーンテキスト化する。
取得したデータを統合し、Output Template に沿って議事録を生成する。
要約のルール:
出力先: {vault.path}/journal/meetings/{yyyyMMdd}-{sanitized-title}.md
ファイル名のサニタイズ:
20260403-スプリントレビュー.mdjournal/meetings/ ディレクトリがなければ作成する:
mkdir -p "{vault.path}/journal/meetings"
同じ日の同じ会議の再実行は上書きする。
bash scripts/commit-vault.sh
---
source: google-meet
type: meeting-note
meeting_date: YYYY-MM-DD
meeting_time: "HH:MM-HH:MM"
collected_at: YYYY-MM-DDThh:mm
ttl: 30d
auto_generated: true
has_transcript: true/false
has_gemini_notes: true/false
---
# {Meeting Title}
- **日時**: YYYY-MM-DD HH:MM - HH:MM
- **参加者**: {参加者リスト(表示名, カンマ区切り)}
- **Meet**: {Meet link}
## 概要
{会議全体の要約を3-5文で。何のための会議で、何が話されたかの概要}
## 議論した重要事項
- **{トピック1}**: {議論の要点}
- **{トピック2}**: {議論の要点}
## 決定事項
- {決定事項1}
- {決定事項2}
## アクションアイテム
| 担当 | タスク | 期限 |
|------|--------|------|
| {名前} | {やること} | {期限があれば} |
## 残論点・TODO
- {持ち越しになった議題}
- {次回までに確認すべきこと}
---
<details>
<summary>ソースドキュメント</summary>
- Transcript Doc: {Google Docs URL or "なし"}
- Gemini Notes Doc: {Google Docs URL or "なし"}
- ConferenceRecord: {conferenceRecords/... or "なし"}
</details>
date コマンドで日時を取得する。推測しない## 概要 に「文字起こし・メモが見つかりませんでした」と記載するauto_generated は truegws コマンドの stderr は 2>/dev/null で捨て、stdout のみを JSON パースするconfig.yamlで指定されたNotionページを取得し、ページごとのカスタムpromptに従ってvaultに書き出す
daily/weekly/monthlyの振り返りを生成しjournal/に書き出す
日次の思考・感想・ふりかえりをvaultのjournal/timeline/に書き出す
Slackから自分宛メンション・参加スレッド・主要チャンネルの最新情報を収集し、Obsidian vaultのsnapshot/slack.mdに書き出す
sync-slack, sync-linear, sync-notion を並列実行し、snapshot を一括更新する
Claude セッションの生ログをサマライズして snapshot/claude-log.md に書き出す