プログラミング

ClaudeにW杯2026の全104試合をGoogleカレンダーへ自動登録してもらった話(カレンダーMCPの限界も込み)

AIのClaudeにGoogle Calendar MCPをつないで、W杯2026の全104試合をGoogleカレンダーへ登録し、さらにW杯専用カレンダーへ引っ越しさせた記録です。カレンダー自体は新規作成できない・イベントはカレンダー間を移動できないというMCPの制約と、AIが拾った日程に混ざっていた誤りを数の保存則で検算した過程、実際に使ったイベントの設定値までまとめました。

目次

はじめに

ワールドカップの日程、毎回ニュースサイトで追いかけるのが地味に面倒だと思ったことはありませんか。

2026年のW杯はアメリカ・カナダ・メキシコの3か国開催で、試合数は過去最多の全104試合です。
これを1件ずつ手でカレンダーに入れるのは、想像しただけでうんざりします。

そこで今回は、AIの「Claude」に「W杯の全試合をカレンダーに入れておいて」とお願いして、本当に104件をGoogleカレンダーに自動登録してもらった話をご紹介します。
正直に言うと、途中で「あ、これはAIにもできないんだ」というつまずきや、「AIが平気で間違えるポイント」がいくつも出てきて、そこが一番の学びでした。

この記事では、途中でAIへの指示やカレンダーの設定値みたいな技術寄りの話も出てきますが、雰囲気だけ眺めて読み飛ばしても話は繋がるように書きますので、ご安心ください。
「AIに単調な大量作業を任せると何が起きるのか」の具体例として読んでいただけたらうれしいです。

そもそも「MCP」とは何か

最初に1つだけ言葉の説明をさせてください。
今回の主役は MCP(Model Context Protocol) という仕組みです。

ざっくり言うと、MCPはAIに外部サービスを操作させるための「共通の差込口」です。
パソコンのUSBポートに色々な機器を挿せるのと同じで、AI側にこの差込口を1つ用意しておくと、Googleカレンダー・Gmail・各種アプリなどを同じやり方で操作させられます。
今回はこの差込口を通じて、Claudeに「Google Calendar MCP」をつないで、カレンダーの予定を作ったり消したりしてもらいました。

つまり今回やったことは、人間が「日本語で指示」→ Claudeが「MCP経由でGoogleカレンダーを操作」という流れです。
難しいプログラミングはしていません。
基本は会話だけです。

使ったツールと全体の流れ

今回触ったGoogle Calendar MCPの機能は、実質この4つだけでした。

Google Calendar MCPで使った4つの機能

加えて、肝心の試合日程そのものは手元に無いので、WebSearch(Web検索)とWebFetch(ページ取得)でネットから日程表を拾ってきてもらいました。

全体の流れはこんな感じです。

  • Webから全104試合の日程を取得して、構造化データ(試合番号・対戦カード・日時)に整理する
  • 英国時間で書かれた日時を日本時間に変換する
  • create_event を104回まわしてGoogleカレンダーに登録する
  • (後日要望追加)自分の予定と混ざるので、W杯専用カレンダーへ全件引っ越しする

ここからが本題で、この各ステップで「AIならではの落とし穴」が出てきます。
手作業なら起きない種類のトラブルなので、AIに大量作業を任せたい方の参考になるかと思います。

ハマりどころ①:カレンダーの新規作成APIが無い

最初のつまずきは、後半の「専用カレンダーを作って」のところでした。
正直、これも一言頼めば一発でやってくれると思っていました。

ところが、このMCPには「カレンダー自体を新規作成する」機能が存在しません。
できるのは予定(イベント)を作る・消す・一覧する、までです。
カレンダーという「箱」そのものを作る命令は用意されていなかったのです。

結局、空の専用カレンダーは私が手動でGoogleカレンダー側に1個作りました。
ここはAIに任せられず、人間の出番でした。

ここでの教訓は、「それっぽい操作なら全部あるはず」と思い込まないことです。
MCPごとに「できること」は決まっていて、似た機能でも穴があります。
なので大量作業を頼む前に、まずそのMCPで使えるツールの一覧と、それぞれが何を受け取るか(スキーマ)を確認してから段取りを組むのが安全だと感じました。

ハマりどころ②:イベントは「カレンダー間で移動」できない

専用カレンダーを用意できたので、次は「メインカレンダーに入れた104件を、専用カレンダーに移動して」とお願いしました。
ここでも直感が外れます。

直感的には、update_event で「どのカレンダーか」を表す calendarId を専用カレンダーに書き換えれば移動できそうに思えます。
ところが、この calendarId は「どのカレンダーにある予定を対象にするか」を指定するものであって、「どこへ移すか」の指定ではありません。

Googleカレンダーの仕組み自体には「予定を別カレンダーへ移す(events.move)」機能があるのですが、今回のMCPにはその機能が出ていませんでした。

なので引っ越しは、結局こうなりました。

  • 専用カレンダーに同じ104件を作り直す(create_event を104回)
  • メインカレンダーから元の104件を削除する(delete_event を104回)

ここで効いてくるのが、予定を作ったときに返ってくる「予定のID」を全部控えておくことでした。
削除するにはこのIDが必要だからです。
大量に作る作業は「後で消す・直す」までを見越して、最初からIDを保持しておく。
これは手作業では意識しないポイントで、AIに大量操作を任せるときの大事なコツだと思います。

ハマりどころ③:AIが拾った日程に「もっともらしい誤り」が混ざる

ここが今回いちばんの山場です。
日程はSky Sportsの全104試合一覧(英国時間つき)をWebFetchで取り込んで構造化してもらいました。
ところが、出てきたデータに堂々と間違いが混ざっていました。

具体的にはこんな誤りです。

  • グループ名の取り違え:たとえば「オランダ対スウェーデン」をグループAと出力していた(正しくはグループF)
  • トーナメント段階の取り違え:第69〜72試合を決勝トーナメント1回戦(ベスト32)と出力していた

2つ目が特に厄介でした。
一見もっともらしいのですが、よく見ると対戦カードが「同じグループの国同士」だったのです(例:アルゼンチン対ヨルダンは両方ともグループJ)。

ここで知っておきたいサッカーの常識が効きます。
同じグループの国同士は、決勝トーナメントでは当たりません(グループ内で総当たりを済ませた後に、別グループと対戦するのがトーナメントだからです)。
つまり「同グループ同士なのにトーナメント」はあり得ない。
これは決勝トーナメントではなくグループステージの最終節だったわけです。

そこで、AIの出力を鵜呑みにせず、数の保存則で検算しました。

  • 12グループ × 各6試合 = 72試合がグループステージ(第1〜72試合)
  • ベスト32(16) + ベスト16(8) + 準々決勝(4) + 準決勝(2) + 3位決定戦(1) + 決勝(1) = 32試合が決勝トーナメント(第73〜104試合)
  • 合計 72 + 32 = 104試合。きちんと数が合う

この「全体の構造から逆算する」やり方で、どこが間違っているかを機械的にあぶり出して直しました。

教訓は、AIの抽出は「それっぽい嘘」を平気で出すということです。
でも裏を返せば、数の保存則(合計が104になるか)やドメイン知識(同グループ同士は当たらない)といった「検算できる物差し」を持っていれば、AIの間違いは直せるということでもあります。
AIに任せた結果は、検算できる箇所は必ず自分で検算する。
これに尽きると思います。

時差の変換:英国時間から日本時間へ

日程のソースは英国時間でした。
6〜7月の英国は夏時間(BST、UTC+1)なので、日本時間(JST、UTC+9)との差はちょうど8時間です。
つまり 日本時間 = 英国時間 + 8時間 という単純な足し算になります。

ただし注意点があって、8時間足すと日付をまたぐ試合が多いのです。
現地の夜のキックオフが、日本だと翌朝になります。
ここは1件ずつ日付の繰り上がりを処理してもらいました。

予定を作るときは、時差の事故を防ぐためにタイムゾーンを Asia/Tokyo と明示し、時刻は日本のローカル時刻(例:2026-06-12T04:00:00)で渡すやり方にしました。
+09:00 のようなオフセット付き文字列で渡すより、タイムゾーン指定+ローカル時刻のほうが取り違えが起きにくいです。

イベントの設計(あとで楽をするための設定値)

104件もまとめて入れるなら、あとで一括管理しやすい形にしておくのが大事です。
実際に使った設定値を共有します。
コードのように見える部分は、雰囲気で読み飛ばして大丈夫です。

  • 色を全部そろえる:colorId: "5"(バナナ色=黄色)で104件すべて同じ色に。色フィルタで一目で見分けられて、まとめて消すときも楽です。
  • 「予定なし」扱いにする:availability: AVAILABILITY_FREE。観戦予定で自分のスケジュールを「予定あり」で埋めないための設定です。他の予定とのバッティング判定にも影響しません。
  • タイトルの命名規則を決める:
  • グループ:W杯[F] Japan vs Netherlands[ ] の中に正しいグループ記号)
  • 日本戦は先頭に旗マーク、決勝はトロフィーマークを付けて目立たせる
  • 決勝トーナメントは対戦カードが未定なので、プレースホルダにする(例:R32: C1 vs F2R16: 第73勝者 vs 第75勝者
  • 試合時間:グループは2時間、決勝トーナメントは延長・PKを考慮して2.5時間。
  • 説明欄(description)に「第N試合 / ステージ / 補足」を入れておく。あとから検索・整理がしやすくなります。

この「色をそろえる」と「Free扱いにする」の2つは、地味ですが本当に効きました。
個人的にいちばん気に入っている工夫です。

大量操作を軽くするコツ

104件の作成に加えて、引っ越しで104件の作り直し、さらに104件の削除と、のべ300回を超える操作になりました。
これを1件ずつ往復していると時間もコストもかかります。

そこで効いたのが、1回の指示に複数の操作をまとめて詰め込む(バッチ化する)ことです。
作成は1回あたり13件くらい、削除はレスポンスが小さいので35件くらいまでまとめて流しました。

また削除のときは、通知を抑制するオプション(notificationLevel=NONE)を付けました。
自分だけの予定でも、削除のたびに通知が飛ぶと鬱陶しいので、作法として切っておくと安心です。

専用カレンダーへの引っ越し手順

最後に、メインから専用カレンダーへ移した手順をまとめておきます。
データを失わないための順番が一番大事なポイントです。

  • list_calendars で、手動作成した専用カレンダーのIDとタイムゾーンを取得する(タイムゾーンが Asia/Tokyo になっていることも確認)
  • 同じ104件を、専用カレンダーを指定して作り直す。作成結果が専用カレンダー名義になっていることで成功を確認
  • 作成の成功を全件確認してから、メイン側の104件を削除(控えておいたIDを使い、通知はOFF)
  • 削除結果が「キャンセル済み」になっていることで、消えたことを確認

ポイントは、「先に新規作成、後で旧削除」の順番を絶対に守ることです。
逆にして、作成が失敗していることに気づかず先に消すと、データが消えてしまいます。
引っ越しは「コピーしてから元を消す」が鉄則だと思います。

運用上の注意点

実際に使ってみて気づいた、細かい注意点も挙げておきます。

  • 決勝トーナメントはプレースホルダのままです。対戦カードが確定したら、update_event でカード名を埋められます。
  • キックオフ時刻は二次情報からの換算なので、FIFAが直前に時刻を微調整することがあります。観戦の前には公式で再確認することをおすすめします。
  • スマホで新しいカレンダーが表示されないことがあります。サムスンやGoogleカレンダーのアプリでは、新規作成したカレンダーが初期状態で同期OFFになっていることがあります。その場合は端末のGoogleアカウント同期設定で、そのカレンダーの同期にチェックを入れると出てきます。私もこれで一瞬「あれ、入ってない?」と焦りました。

まとめ

いかがでしたか。
今回は、Claudeにカレンダー操作のMCPをつないで、W杯2026の全104試合をGoogleカレンダーに自動登録し、さらに専用カレンダーへ引っ越しさせた話をご紹介しました。

やってみてわかったのは、「104件をカレンダーに入れる」みたいな単調で大量の作業こそ、AIエージェント+MCPがいちばん輝く場面だということです。
手作業なら1〜2時間の苦行が、会話ベースで十数分で終わりました。

一方で、丸投げでは済まないポイントもはっきりしました。
あらためて振り返ると、こんな流れでした。

  • MCPの「できること」を最初に確認する(カレンダーの新規作成はできなかった)
  • 大量操作はIDを控えておく(移動できないので、作り直し+削除で対応する)
  • AIが拾ったデータは検算する(数の保存則とドメイン知識で「もっともらしい誤り」を直す)
  • 引っ越しは「先に作成、後で削除」でデータを失わない

要するに、AIは単調作業を一気に片付けてくれるけれど、できることの地図を持ち、出力を検算する人間側の目はまだ必要ということだと思います。
逆にそこさえ押さえれば、こういう「ちょっと面倒な大量作業」はどんどん任せていけそうで、結果的にやってみて良かったと思います。

MCPやAIエージェントに興味がある方は、まず手元の小さな大量作業(連絡先の整理、予定の一括登録など)で試してみるのもいいと思います。

この記事が誰かの役に立てばうれしいです。