• #gogcli
  • #google-calendar
  • #google-meet
  • #google-workspace
  • #cli
開発未分類メモ

gogcliでGoogle Calendar操作:予定作成からGoogle Meet自動生成までCLIで完結

結論

gogcliを使えば、ブラウザを開かずにカレンダー予定の作成・更新・削除がCLIからできる。--with-meet フラグを付けるだけでGoogle MeetのURLも自動生成される。Claude Codeとの組み合わせで「明日の14時にミーティング入れて」と言うだけで予定が入る。

予定の作成

gog calendar create primary \
  --summary "gogcliテスト予定" \
  --from "2026-01-30T10:30:00+09:00" \
  --to "2026-01-30T11:00:00+09:00" \
  --description "gogcliからのテスト登録"
  • primary はデフォルトカレンダー
  • 日時はRFC3339形式(YYYY-MM-DDTHH:MM:SS+09:00)で指定
  • --description で説明文も追加できる

Google Meet付き予定の作成

gog calendar create primary \
  --summary "オンライン打ち合わせ" \
  --from "2026-01-30T10:30:00+09:00" \
  --to "2026-01-30T11:00:00+09:00" \
  --description "gogcliからのテスト登録。Google Meet付き。" \
  --with-meet

--with-meet を付けるだけで、出力にMeetリンクが含まれる。

meet    https://meet.google.com/xxx-xxxx-xxx

このURLをそのままChatに投稿したりメールに貼ったりできる。

Google Meet付きで作成された予定

電話での参加番号も自動で割り当てられる。

予定の更新

gog calendar update primary <eventId> \
  --summary "新しいタイトル" \
  --description "更新した説明文"

タイトル、日時、説明、参加者などを個別に更新できる。ただし --with-meetcreate でしか使えない。既存の予定にMeetを後から追加したい場合は、削除してMeet付きで再作成する。

予定の削除

gog calendar delete primary <eventId> --force

--force で確認プロンプトをスキップする。

その他のコマンド

# 予定一覧(日付範囲指定)
gog calendar events primary --from "2026-01-30" --to "2026-01-31"

# 予定検索
gog calendar search "ミーティング"

# 空き時間の確認
gog calendar freebusy <calendarId> --from "..." --to "..."

# 集中時間ブロック
gog calendar focus-time --from "..." --to "..."

# 不在設定
gog calendar out-of-office --from "..." --to "..."

# 勤務場所の設定(自宅/オフィス)
gog calendar working-location --from "..." --to "..." --type home

createで使えるオプション

オプション用途
--summary予定タイトル
--from / --to開始・終了日時(RFC3339)
--description説明文
--location場所
--attendees参加者(カンマ区切りのメールアドレス)
--with-meetGoogle Meet自動生成
--rrule繰り返しルール(例: RRULE:FREQ=WEEKLY
--reminderリマインダー(例: popup:30m, email:1d
--event-color色(1〜11)
--visibility公開設定(public, private, confidential
--transparency表示(busy or free
--all-day終日予定

ブラウザでできることはほぼ全部CLIからできる。

注意点

項目内容
--with-meetcreate のみ対応。update では使えない
日時形式RFC3339必須。2026-01-30T10:30:00+09:00 のように書く
eventIdcreateevents の出力に含まれるIDを使う
カレンダーIDprimary で自分のデフォルトカレンダー。他のカレンダーはメールアドレス形式

税理士事務所での活用:識別子による一括管理

gogcliで作った予定に**カスタムプロパティ(識別子)**を付けると、バッチ単位での取得・一括削除が安全にできる。手動で入れた予定を誤って消す心配がない。

識別子の付け方

--private-prop でカレンダーUIには表示されないメタデータを付与する。

gog calendar create primary \
  --summary "○○社 法人税申告期限" \
  --from "2026-05-31T00:00:00+09:00" \
  --to "2026-05-31T23:59:00+09:00" \
  --all-day \
  --reminder "popup:7d" --reminder "email:3d" \
  --private-prop "source=gogcli" \
  --private-prop "batch=tax-deadline-2026"
プロパティ用途
source=gogcligogcliで作った予定であることを識別
batch=tax-deadline-2026どのバッチで作ったかを識別

識別子でフィルタリング

# このバッチで作った予定だけ取得
gog --json calendar events primary \
  --private-prop-filter "batch=tax-deadline-2026"

手動で作った予定には batch プロパティがないので、フィルタに引っかからない。間違えたバッチだけを安全に一括削除できる。

税務カレンダーの一括登録イメージ

顧問先ごとに決算月が異なるため、申告期限を手動で管理するのは手間がかかる。スプレッドシートに顧問先リストがあれば、こう自動化できる:

1. Sheetsから顧問先リスト(社名・決算月)を取得
   gog sheets get "<spreadsheetId>" "顧問先!A2:C50"

2. 決算月から各申告期限を計算
   - 法人税: 決算日の2ヶ月後
   - 消費税: 決算日の2ヶ月後
   - 源泉所得税: 毎月10日(納期の特例なら7月・1月)

3. 全顧問先分のカレンダー予定を一括登録
   gog calendar create primary \
     --summary "○○社 法人税申告期限" \
     --private-prop "batch=tax-deadline-2026-q1" \
     ...

4. 間違えたら、バッチ指定で一括削除
   gog --json calendar events primary \
     --private-prop-filter "batch=tax-deadline-2026-q1" \
   → eventIdを取り出して一括delete

安全性のまとめ

ポイント内容
private-propカレンダーUI上には表示されない。裏のメタデータ
private-prop-filterそのメタデータで予定をフィルタリングできる
手動予定との分離プロパティがない予定はフィルタに引っかからない
バッチ単位の管理batch=xxx の値を変えれば世代管理もできる
誤削除の防止手動で作った予定は絶対に巻き込まれない

面談スケジュールの自動化:freebusy → 予定作成 → Chat通知

Claude Codeに「来週Aさんと面談入れて」と言うだけで、空き確認から予定作成、Chat通知まで全自動で回せる。実際にテストした流れを記録する。

Step 1: freebusyで空き時間を確認

gog --json calendar freebusy \
  "[email protected],[email protected]" \
  --from "2026-01-30T11:00:00+09:00" \
  --to "2026-01-30T18:00:00+09:00"

複数のカレンダーIDをカンマ区切りで渡すと、各メンバーのbusy時間帯がJSON形式で返ってくる。busyでない時間帯が空き時間。

Step 2: Meet付き予定を作成(参加者招待あり)

gog --json calendar create primary \
  --summary "面談:小松啓 × number55(テスト)" \
  --from "2026-01-30T13:00:00+09:00" \
  --to "2026-01-30T13:30:00+09:00" \
  --description "gogcliによる自動スケジュール登録テスト。freebusyで空き確認済み。" \
  --attendees "[email protected]" \
  --with-meet \
  --private-prop "source=gogcli" \
  --private-prop "batch=meeting-test-001"

--attendees で参加者を指定すると招待メールが送られる。--with-meet でMeet URLも自動生成。JSON出力からMeetリンクを取得できる。

自動作成されたMeet付き面談予定

ゲスト欄にも参加者が表示され、返答待ちの状態になる。

Step 3: ChatスペースにMeet URLを投稿

gog chat messages send spaces/AAAA9qhlGLw \
  --text "【面談スケジュール自動登録】

日時: 2026年1月30日(金)13:00〜13:30
件名: 面談:小松啓 × number55(テスト)
Google Meet: https://meet.google.com/ecv-zhjf-hav
電話参加: +81 3-4545-0450(PIN: 6828913082585)

※ gogcli + Claude Code による自動登録テストです。"

ChatスペースにMeetリンクが自動投稿された

MeetのURLを含むメッセージを投稿すると、Google Chatが自動でビデオ会議のプレビューカードを生成してくれる。

このフローのポイント

ステップコマンド何をしているか
空き確認freebusy複数メンバーのbusy/freeを取得
予定作成create --with-meet --attendeesMeet生成+参加者招待を1コマンドで
Chat通知messages sendMeetリンクをChatスペースに投稿
識別子--private-prop後からバッチ単位で管理・削除可能

Claude Codeがこの3ステップを自動で実行するので、ユーザーは「来週Aさんと面談入れて」と言うだけで済む。

その他の活用

  1. 日次スケジュール通知: 朝一で今日の予定を取得 → Chatに投稿
  2. 繁忙期の集中時間確保: 確定申告期に focus-time で作業ブロックを自動設定
  3. 月次タスクの繰り返し登録: --rrule "RRULE:FREQ=MONTHLY;BYMONTHDAY=10" で毎月の源泉所得税納付日を登録

カレンダー予定の説明欄にメモをもりもり入れた例

予定の説明欄にテスト結果や注意点をまとめて書き込むこともできる。カレンダーの予定をメモ帳代わりに使う運用も可能。