このドキュメントでは、MCPを使わずにGoogleカレンダーの予定を取得する方法を説明します。設定には少し手間がかかりますが、一度設定すれば安定して動作し、Cursorエージェントが自然な形であなたの予定を確認できるようになります。
- Google アカウントを持っていること
- ターミナルの基本操作ができること
- 折れない心
AIエージェント(Claude、GPT等)との連携を容易にするため、シンプルなシェルスクリプトを用意しています。以下の手順で設定することで、自然言語で予定を確認できるようになります。
- 配布された
get_calendar_events.sh
スクリプトをscripts/calendar_app/
フォルダに配置します(このレポジトリでは初期から配布済み)mkdir -p scripts/calendar_app cp get_calendar_events.sh scripts/calendar_app/ chmod +x scripts/calendar_app/get_calendar_events.sh
Cursorのルールファイル(例:.cursor/rules/basic/00_master_rules.mdc
)に以下の設定を追加します:
#--------------------------------------------
# タスク管理
#--------------------------------------------
- trigger: "(今日の予定確認|今日の予定|カレンダー確認|Calendar events)"
command: "{{root}}/scripts/calendar_app/get_calendar_events.sh"
message: "カレンダーデータを取得しています..."
instruction: "このコマンドのみを実行し、他の処理は一切行わないこと"
上記の設定を行うと、AIエージェント(Claude、GPT等)に対して以下のように自然言語で予定を確認できるようになります:
ユーザー: 今日の予定確認して
エージェント: カレンダーデータを取得しています...
[予定の一覧が表示されます]
このように設定することで、AIエージェントはユーザーからの「今日の予定確認」といった指示を受け取ると、自動的にコマンドを実行してGoogleカレンダーから予定を取得し、整形して表示してくれます。
さて、このコマンドを機能させるために、以下の長い準備が必要となります!
- Code.js - アプリケーションのメインコード
- appsscript.json - スクリプト設定ファイル
- USAGE.md - 使用方法マニュアル
- README.md - セットアップ手順書
- get_calendar_events.sh - AIエージェントと連携するためのスクリプト
git clone https://github.com/miyatti777/calendar_app.git
で、ファイル配置
※ AIPMシステム使っている人はScriptsフォルダのなかにいれるのおすすめ ※自分でフォルダ作る人は以下のコマンドで、ファイルをDLしてきていれてください
アプリフォルダ作成
mkdir calendar_app
cd calendar_app
- Node.jsとnpmのインストール(未インストールの場合)
- claspのグローバルインストール
npm install -g @google/clasp
- Google Cloud Consoleにアクセス
-
左側メニューから「APIとサービス」→「ライブラリ」を選択
解説: この手順でApps ScriptプロジェクトをGCPプロジェクトと連携させます。これにより、GoogleのAPIを使用するための基盤が整います。
-
以下のAPIを検索して有効化:
- Google Apps Script API(必須)
- Google Calendar API
解説: この手順でGCPプロジェクトが必要なAPIを使えるようになります。Apps Script APIはclaspでの操作に必須で、Calendar APIはカレンダー情報取得に必要です。
- まずはメニューから概要をタップし、Google Auth Platformの構成の「開始」をタップ
- アプリ情報で名前と連絡先を入力
- 対象は「外部」もしくは「内部」を選択し、必要な情報を入力(内部の場合は何も追加入力なし。外部の場合は、あとで色々追加入力必要)
- サイドレランク先情報おいれて、利用規約にチェック入れたら作成
※ Enterprise利用の場合は、セキュリティの観点から基本内部を選択。個人利用の場合は外部しか使えないため、テストユーザーとして自分のメアド登録
※ 対象を外部にした場合、メニューから対象を選んでテストユーザーに自分のメアドを入れる
- メニューからデータアクセスをタップ
- 「スコープを追加」タップで、フィルタでキーワードで絞り込んで、以下を追加:
- メニューからクライアントをタップ
- クライアントを作成をタップ
- アプリケーションの種類として「デスクトップアプリケーション」を選択
- 名前を入力し「作成」をクリック
- クライアントIDとシークレットが表示されるので、JSONをダウンロード
- ダウンロードしたJSONファイルを作業ディレクトリに
creds.json
として保存(名前を変更しとく)
解説: このステップでローカル開発環境からGoogleのAPIにアクセスするための認証情報を設定します。
最初に作ったディレクトリを右クリックして「Open in Integrated terminal」とかしてそのフォルダの場所でターミナル開く
- claspでログイン
clasp login --creds creds.json
ブラウザがたがあるので、ログイン
スコープの権限もとめてくるので許可
こんな感じでターミナルで Authorization Succsessfullとでてれば成功。赤背景でびびるが、.clasprc.jsonというファイルは絶対Uploadするなよという警告で赤くなってるだけ
解説: このコマンドで認証画面が開き、あなたのGoogleアカウントとclaspを連携します。認証が成功すると、ホームディレクトリに.clasprc.json
というファイルが作成されます。これは認証情報を保存する一時的なファイルで、アカウントを切り替えるたびに上書きされます。
- 新しいスタンドアロンスクリプトプロジェクトを作成
※このコマンドで生成された.clasp.jsonファイルは削除せずに残しておく
clasp create --type standalone --title "google calendar app new" --rootDir .
-
配布されたファイルを配置
- Code.js
- appsscript.json (appscript.jsonは前に作られたやつ削除で大丈夫)
-
スクリプトのアップロード
clasp push
-
GCPプロジェクトと紐づける
clasp open
- ブラウザでスクリプトエディタが開くので、「⚙️プロジェクト設定」→「GCPプロジェクト」で作成したプロジェクトと紐づける
解説: ブラウザでApps Scriptエディタが開きます。ここからGCPプロジェクトとの連携設定を行います。
- もういちどログインして、設定したスコープの承認をおこなう
clasp login --creds creds.json
ここのプロジェクトIDを入力 また赤背景になるが気にしない
clasp deploy
でウェブアプリやAPIとしてデプロイ
解説: デプロイすることで、スクリプトを外部から呼び出し可能なエンドポイントとして公開できます。
- 関数を実行してテスト
clasp run getEvents
デフォルトではprimary
(ユーザーのメインカレンダー)が使用されますが、他のカレンダーを使用する場合は関数呼び出し時にIDを指定します:
clasp run getCalendarEventsWithParams -p '["[email protected]", 7, "2025-01-01", ""]'
特定の日付範囲を取得する場合:
# 特定の日付の予定を取得
clasp run getDateEvents -p '["2025-05-15"]'
# 特定の期間の予定を取得
clasp run getCalendarEventsWithParams -p '["primary", 30, "2025-01-01", ""]'
イベント名や説明文に特定のキーワードを含むものだけを取得する場合:
clasp run getCalendarEventsWithParams -p '["primary", 30, "2025-01-01", "会議"]'
このアプリケーションの設定過程で、以下の認証情報ファイルが生成されます:
- creds.json - Google OAuthクライアントIDとシークレットを含むファイル
- .clasprc.json - claspの認証トークンを含むファイル
これらのファイルには機密情報が含まれており、絶対に以下の行為を避けてください:
- GitHubなどの公開リポジトリへのプッシュ
- チームでの共有ドライブへのアップロード
- メールやSlackでの送信
リポジトリにこれらのファイルを含めないために、必ず**.gitignore**ファイルを作成してください:
# .gitignoreファイルを作成または編集
echo ".clasprc.json" >> .gitignore
echo "creds.json" >> .gitignore
もし誤って認証情報をコミットし、リモートリポジトリにプッシュしてしまった場合:
-
即時に認証情報を無効化する:
- Google Cloud Consoleで該当するOAuthクライアントIDを削除または再生成
- 新しい認証情報で再設定
-
Gitの履歴から認証情報を削除:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .clasprc.json creds.json" --prune-empty --tag-name-filter cat -- --all git push origin --force
-
全てのチームメンバーに通知:誤ってコミットされた認証情報について通知し、古いブランチを使用しないよう依頼
- 各開発者は自分自身のOAuth認証情報を作成・使用する
- 本番環境用の認証情報は、安全な認証情報管理サービスを使用して保存・共有する
- 開発環境と本番環境で異なるクライアントIDを使用する
これらの注意事項を守ることで、セキュリティリスクを最小限に抑え、GoogleのAPIを安全に利用できます。
このアプリケーションは「現状のまま」提供されており、十分なテストが行われていない可能性があります。作者および貢献者は、このアプリケーションの使用によって生じるいかなる直接的、間接的、偶発的、特別、典型的、または結果的な損害についても責任を負いません。自己責任でご利用ください。
このアプリケーションはMITライセンスの下で提供されています。個人的または商用目的で自由に使用、変更、配布することができますが、著作権表示とこの許可通知をすべてのコピーまたは実質的な部分に含める必要があります。
claspでは2つの異なる認証が必要です。これを理解していないと権限エラーが発生します:
認証タイプ | コマンド | 保存場所 | 役割 |
---|---|---|---|
グローバル認証 | clasp login |
~/.clasprc.json |
clasp ツール自体の認証 |
ローカル認証 | clasp login --creds creds.json |
.clasprc.json |
プロジェクト固有の認証 |
グローバル認証:
clasp run
,clasp list
,clasp deployments
などのコマンドは Google Apps Script API を直接使用- このAPIアクセスには「claspツール自体がGoogleに認証済み」である必要がある
- 会社の「入館証」のようなもの
ローカル認証:
- 特定のプロジェクト(GCPプロジェクト)に対する固有の権限
- 特定部署への「入室カード」のようなもの
原因:グローバル認証がない
# 解決策
clasp login
原因:creds.json
のプロジェクトIDが間違っている
// creds.json で確認すべき箇所
{
"installed": {
"project_id": "test-pj-459603", // ← これが正しいプロジェクトIDか確認
...
}
}
解決策:
- Google Cloud Console で正しいプロジェクト(
test-pj-459603
)を選択 - APIとサービス → 認証情報 でOAuthクライアントIDを再ダウンロード
- 正しい
creds.json
で上書き
チェックリスト:
# 1. グローバル認証の確認
ls -la ~/.clasprc.json # ファイルが存在するか
# 2. ローカル認証の確認
ls -la .clasprc.json # ファイルが存在するか
# 3. プロジェクト設定の確認
cat .clasp.json # scriptId と projectId が正しいか
# 4. 両方の認証を再実行
clasp login # グローバル認証
clasp login --creds creds.json # ローカル認証
認証が完全に壊れた場合の完全リセット手順:
# 1. 既存認証情報をバックアップ
cp ~/.clasprc.json ~/.clasprc.json.backup 2>/dev/null || true
# 2. 認証情報をクリア
rm ~/.clasprc.json .clasprc.json 2>/dev/null || true
# 3. Google Cloud Console で正しい creds.json を再ダウンロード
# 4. グローバル認証を実行
clasp login
# 5. ローカル認証を実行
clasp login --creds creds.json
# 6. 動作確認
clasp run getEvents
# グローバル認証の確認
clasp whoami
# プロジェクト一覧の確認
clasp list
# プロジェクト設定の確認
cat .clasp.json
# 実際の動作確認
clasp run getEvents
グローバル認証成功時:
Logging in globally…
🔑 Authorize clasp by visiting this url: https://accounts.google.com/...
Authorization successful.
Default credentials saved to: /Users/username/.clasprc.json.
ローカル認証成功時:
Logging in locally...
🔑 Authorize clasp by visiting this url: https://accounts.google.com/...
Authorization successful.
Local credentials saved to: .clasprc.json.
⚠️ WARNING: The credentials are stored on disk unencrypted. Do not upload this file.
動作確認成功時:
clasp run getEvents
# → カレンダーイベントのJSONデータが出力される
- グローバル認証 = 「会社への入館証」(claspというツールを使う権利)
- ローカル認証 = 「特定部署への入室カード」(特定プロジェクトを操作する権利)
- 両方必要 = 「入館証で会社に入り、入室カードで部署に入る」
clasp run
などのコマンドは「部署内の重要な作業」なので、両方のカードが揃って初めて実行できます。