📅

Claude Codeに今日の予定を聞きたい

に公開

はじめに

こんにちは、Androidエンジニアの@syarihuです。

最近はClaude Codeを使って日報を生成しています。日報にはその日のスケジュールも含めたいのですが、Claude Codeから直接Googleカレンダーの予定を取得するのは意外とハードルが高く、GeminiでGoogle Calendarにメンションして予定を取得するカスタムGemを作り、毎回そこで今日の予定を聞いてからClaude Codeにコピペしていました。

本記事では、macOSのカレンダーアプリから今日の予定をJSON形式で取得できるCLIツール「calday」を紹介します。Claude Codeとの連携により、日報作成やスケジュール確認を自動化できます。

モチベーション

筆者がこのツールを作ったモチベーションは大きく2つあります。

  • 今日の予定をClaude Codeに聞きたい
    • 「今日の予定は?」と聞くだけで、カレンダーの予定を一覧で返してほしい
  • 日報をClaude Codeに生成させるときに、今日参加した会議を自動で入れたい
    • 手動でコピペせずに、日報のスケジュール欄を自動で埋めてほしい

きっかけ

そんな折、Google Workspace CLIというCLIツールが公開されました。Googleの公式リポジトリでホストされていますが、公式サポート対象のプロダクトではありません。カレンダーデータも取得できそうでしたが、利用するにはGoogle CloudプロジェクトでのOAuth認証が必要です。gcloud CLIがあればセットアップを自動化できますが、ない場合はGoogle Cloud Consoleで手動でOAuthクライアントを作成する必要があります。

個人アカウントならまだしも、会社アカウントの場合はGoogle Cloud側の設定に制限があったり管理者の承認が必要だったりと、セットアップが面倒になりがちです。

もっと手軽にカレンダーの予定を取得できる方法はないかと考えた結果、macOS標準のカレンダーアプリに目をつけました。

caldayのアプローチ

macOSのカレンダーアプリは、Googleカレンダーをはじめとする複数のカレンダーサービスと連携でき、予定はローカルに同期されています。AppleはEventKitというフレームワークを提供しており、このローカルデータにアクセスできます。

caldayは、このEventKitを使ってmacOSのカレンダーアプリからイベントを取得するシンプルなCLIツールです。

これまでの方法との比較

項目 これまで(GeminiのカスタムGem) calday
予定の取得方法 Geminiを開いてGemに聞き、結果をコピペ CLIコマンドを実行するだけ
Claude Codeとの連携 手動でコピペが必要 CLAUDE.mdに設定を追加すれば自動で取得
セットアップ カスタムGemの作成が必要 brew install して実行するだけ

caldayのポイントは、macOS標準のカレンダーアプリにGoogleカレンダーを連携していれば、面倒な認証設定なしにカレンダーデータを取得できることです。初回実行時にカレンダーへのアクセス許可を求めるダイアログが表示されるだけで、それ以降は追加の認証は不要です。

インストール

Homebrewで簡単にインストールできます。

brew install syarihu/tap/calday

動作要件はmacOS 14.0以上です。

使い方

コマンドを実行するだけで、今日の予定がJSON形式で出力されます。

calday

出力例を示します。

[
  {
    "allDay" : false,
    "calendar" : "Work",
    "end" : "10:30",
    "start" : "10:00",
    "title" : "朝会"
  },
  {
    "allDay" : false,
    "calendar" : "Work",
    "end" : "11:00",
    "location" : "会議室A",
    "start" : "10:30",
    "title" : "スプリントプランニング"
  },
  {
    "allDay" : true,
    "calendar" : "Personal",
    "date" : "2026-03-05",
    "title" : "有給休暇"
  }
]

各イベントにはtitlestartendcalendarallDaylocationのフィールドが含まれます。終日イベントの場合はstart/endの代わりにdateが出力されます。

設定

不要なカレンダー(たとえば「日本の祝日」など)を除外したい場合は、設定ファイルで指定できます。

calday init

このコマンドで~/.config/calday/config.jsonにテンプレートが生成されます。除外したいカレンダー名を追加してください。

{
  "excludedCalendars": [
    "日本の祝日"
  ]
}

自分が参加しているイベントのみ取得

caldayは、自分が参加しているイベントのみを取得します。招待されたが参加していない会議などはフィルタリングされるため、実際に関係のある予定だけが出力されます。

Claude Codeとの連携

caldayの真価は、Claude Codeと組み合わせたときに発揮されます。CLAUDE.md(グローバルまたはプロジェクトレベル)に次の設定を追加することで、Claude Codeが日報作成時やスケジュール情報が必要な場面で自動的にcaldayを実行するようになります。

## Calendar integration

When creating daily reports or when today's meeting/schedule information is needed, run the `calday` command to fetch today's calendar events automatically. This eliminates the need to ask the user about their schedule.

- Command: `calday`
- Output: JSON array of today's events with `title`, `start`, `end`, `calendar`, `allDay`, `location` fields
- Use the output to populate the schedule section of daily reports

この設定を追加すると、Claude Codeに「今日の予定を教えて」と聞くだけで、caldayコマンドを実行してカレンダーの予定を取得し、一覧で返してくれます。日報を生成するときも、スケジュール欄に今日の会議が自動的に入ります。

Claude Codeに予定を聞いてみる

実際にClaude Codeに「今日の予定は?」と聞くと、caldayコマンドを実行して次のように返してくれます。

今日の予定はこんな感じなのだ!

- 10:00-10:30 朝会
- 10:30-11:00 スプリントプランニング
- 13:00-14:00 1on1
- 15:00-16:00 チーム定例

全部で4件の会議があるのだ。午前中に2つ、午後に2つとバランスよく入っているのだ!

手動でカレンダーを確認してコピペする必要がなくなり、Claude Codeとの会話の中でシームレスにスケジュールを扱えるようになります。

技術的な実装

caldayはSwiftで実装されており、コード量は約115行とコンパクトです。

EventKitを使ったイベント取得

macOSのEventKitフレームワークを使って、ローカルに同期されたカレンダーデータにアクセスしています。

let store = EKEventStore()

// カレンダーへのアクセス権限をリクエスト
if #available(macOS 14.0, *) {
    granted = try await store.requestFullAccessToEvents()
} else {
    granted = try await store.requestAccess(to: .event)
}

// 今日の開始〜終了の範囲でイベントを取得
let predicate = store.predicateForEvents(withStart: startOfDay, end: endOfDay, calendars: nil)
let events = store.events(matching: predicate)

EventKitはmacOS標準のフレームワークなので、外部ライブラリに依存せずにカレンダーデータを取得できます。初回実行時にmacOSのカレンダーアクセス許可ダイアログが表示され、許可すればそれ以降は追加の認証なしで動作します。

自分が参加しているイベントのフィルタリング

カレンダーには、招待されたが参加していない会議も含まれている場合があります。caldayは、参加者リストから自分のメールアドレスを照合し、自分が参加しているイベントのみをフィルタリングしています。

参加者が設定されていないイベント(個人の予定など)はそのまま出力されます。

まとめ

caldayは、macOSのカレンダーアプリから今日の予定を取得するシンプルなCLIツールです。

特徴 説明
認証不要 macOSのカレンダーアクセス許可のみ(初回のダイアログだけ)
簡単インストール brew install syarihu/tap/calday
Claude Code連携 CLAUDE.mdに設定を追加するだけで日報作成やスケジュール確認を自動化
会社アカウント対応 カレンダーアプリに連携済みならGoogle Cloud等の設定不要
除外設定 不要なカレンダーを設定ファイルで除外可能

Google Workspace CLIのようにOAuth認証の設定をせずに、HomebrewでインストールしてCLAUDE.mdに数行追加するだけで、Claude Codeからカレンダーの予定を扱えるようになります。

macOSでClaude Codeを使っている方はぜひ試してみてください。

リンク

Discussion