スプレッドシートに入れた予定、手動でカレンダーに入れてませんか

「スプレッドシートで管理している予定を、毎回Googleカレンダーにポチポチ手入力している」——正直、これをやっている人は思ったより多い。

10件ならまだ我慢できる。でも50件、100件になると話が違う。しかもGASで自動化しようとすると「コード書けないし…」で詰まる。

この記事を読めば、CursorというAIエディタにプロンプトを投げるだけで、動くGASコードを手に入れる手順がわかる。コードを書く必要はない。プロンプトの書き方と、貼り付けの手順だけ知っていればいい。


💡 関連教材: ChatGPT業務自動化 実践テンプレート集(¥1,480) — API・スプレッドシート・メール・議事録・請求書をコピペで自動化する実装特化型テンプレート集(全22ページ)

結論から言う

やること自体はシンプルだ。

  1. スプレッドシートの列構成を決める(5列)
  2. CursorにプロンプトでGASコードを生成させる
  3. GASエディタにコードを貼って実行する

Cursorは2026年時点でClaude 3.7 Sonnetを搭載しており、GASのような「ニッチな言語環境」でも初回プロンプトで動くコードを出す確率が8割を超える(開発者コミュニティ調査ベース)。ChatGPTとの最大の違いは、エラーが出たときの反復修正が圧倒的に楽なことだ。その理由から順に説明していく。


CursorでGASを作るメリットとChatGPTとの違い

なぜCursorなのか、ChatGPTじゃダメなのか

正直なところ、ChatGPTでもGASコードは作れる。ただ、使い比べてみて「あ、これは差があるな」と感じた点が3つある。

1. エラーが出たときの修正サイクルが段違いに速い

CursorのAgentモードは、エラーメッセージをチャットに貼ると「このコードのここが原因で、修正版はこれです」まで返してくる。ChatGPTも同じことはできるが、Cursorはプロジェクト全体のファイルをコンテキストに持てるため、「このスプレッドシートの構造を前提にして直して」という指示が一発で通る。

2. @docsでGAS公式リファレンスを直接参照させられる

Cursorのチャット欄に @docs https://developers.google.com/apps-script/reference/calendar と入力すると、最新のGASドキュメントを読ませた上でコードを生成してくれる。これはhallucination(存在しないメソッドを使うAIの誤り)を大幅に減らす効果がある。

3. プロジェクト単位でコンテキストを保持する

スプレッドシートの構造、エラーログの仕様、カレンダーIDの変数名——これらを一度チャットで共有してしまえば、あとは「重複チェックも追加して」と短い指示で済む。会話をリセットするたびに背景を説明し直すChatGPTとは、長い作業での疲れ方が違う。

Cursorのプランと料金

プラン 月額 Claude 3.7 Sonnet GPT-4o GAS生成の実用度
Free $0 制限あり(低速) 制限あり お試し程度
Pro $20 制限内で利用可 制限内で利用可 実務に十分
Business $40 プライバシー保護強化 同上 チーム利用向け

Proプランの$20/月(約3,000円)で、Claude 3.7 SonnetとGPT-4oが一定量使える。GASを月に数本作る用途なら、無料プランで足りることも多い。ただし無料プランは補完速度が落ちるので、使いながらストレスを感じたらProに切り替えるくらいの感覚でいい。


事前準備|スプレッドシートの形式とGASエディタの開き方

スプレッドシートの列構成を決める

まずスプレッドシートを以下の列構成で作る。この形式を前提にプロンプトを書くので、順番を変えないこと。

内容 入力例
A列 日付 2026/03/15
B列 タイトル 週次MTG
C列 開始時間 10:00
D列 終了時間 11:00
E列 ステータス(自動入力) 登録済み / エラー内容

1行目はヘッダー行にしておく。GASは2行目から処理を開始するように書く。

GASエディタの開き方

スプレッドシートを開いた状態で、メニューから「拡張機能」→「Apps Script」を選ぶ。これだけ。スタンドアロン型(script.google.comから新規作成)でも動くが、今回はスプレッドシートに紐づいた「コンテナバインド型」を使う。理由は、スプレッドシートのオブジェクトをSpreadsheetApp.getActiveSpreadsheet()で取得できて、コードがシンプルになるからだ。

Apps Scriptエディタが開いたら、左上に「プロジェクト名」が表示される。わかりやすい名前(例:calendar_bulk_register)に変えておくと後で管理しやすい。

V8ランタイムとOAuthについて(誤解を一掃する)

これ、意外と知られてないんだが、今さらランタイムの設定を変える必要はない。2023年以降、V8ランタイムがデフォルトになっている。モダンなJavaScript(アロー関数、const/let、テンプレートリテラルなど)がそのまま動く。

OAuthについても「設定が複雑」という話をたまに見かけるが、GASでCalendarAppクラスを使う場合はOAuth設定は不要だ。初回実行時に「このアプリを承認しますか?」というGoogleのダイアログが出るだけ。それをクリックすれば終わり。

知っておくべき実行制限

項目 上限 備考
1回の実行時間 6分 超えると強制終了
カレンダー作成数 5,000件/日 Google Workspace制限
トリガー設定数 20個/スクリプト 無料Googleアカウント

100件程度の一括登録なら6分制限は気にしなくていい。1,000件を超えるなら処理を分割するロジックが必要になる。その場合もCursorに「1,000件超えたら分割して実行して」と追加指示すれば対応できる。


Cursorでプロンプトを書いてGASコードを自動生成する手順

プロンプトの書き方が8割を決める

「GASでカレンダーに予定を入れて」——これだけだと、Cursorが出すコードは使えないことが多い。曖昧な指示には曖昧なコードが返ってくる。

入出力の形式、使うクラス、エラー処理の仕様を最初から全部書く。以下がそのまま使えるプロンプトテンプレートだ。

以下の条件でGoogle Apps Scriptのコードを書いてください。

【前提】
- GASのCalendarAppクラスのみ使用すること
- 外部ライブラリは使わないこと
- V8ランタイム対応のES2015+構文で書くこと

【スプレッドシートの構造】
- 1行目はヘッダー(処理しない)
- A列:日付(例:2026/03/15)
- B列:予定タイトル
- C列:開始時間(例:10:00)
- D列:終了時間(例:11:00)
- E列:処理結果を書き込む(「登録済み」またはエラー内容)

【処理内容】
- スプレッドシートの2行目から最終行まで順に読み込む
- E列がすでに「登録済み」の行はスキップする(重複防止)
- CalendarApp.getDefaultCalendar()を使ってデフォルトカレンダーに予定を作成する
- 成功したらE列に「登録済み」と書き込む
- エラーが起きたらtry-catchで捕捉し、E列にエラー内容を書き込む
- 処理完了後にスプレッドシートのUIにダイアログで件数を表示する

@docsでGAS公式ドキュメントを参照させる

Cursorのチャット欄(Cmd+L でチャットが開く)で、プロンプトの冒頭に以下を追加する。

@docs https://developers.google.com/apps-script/reference/calendar/calendar-app

これを入れると、Cursorが実際のGAS公式ドキュメントを参照した上でコードを生成する。存在しないメソッド名を使うhallucinationがかなり減る。使ってみて驚いたのは、createEvent()の引数の順番を間違えたコードを出す確率がこれだけで体感3割くらい下がったことだ。

生成されるコードの全文サンプル

以下は上記プロンプトで生成されるコードの実例だ。多少の差異は出るが、構造はほぼこの通りになる。

function registerCalendarEvents() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  const calendar = CalendarApp.getDefaultCalendar();

  let successCount = 0;
  let skipCount = 0;
  let errorCount = 0;

  for (let i = 2; i <= lastRow; i++) {
    const statusCell = sheet.getRange(i, 5);
    const currentStatus = statusCell.getValue();

    // 登録済みの行はスキップ
    if (currentStatus === '登録済み') {
      skipCount++;
      continue;
    }

    try {
      const dateValue = sheet.getRange(i, 1).getValue();
      const title = sheet.getRange(i, 2).getValue();
      const startTimeStr = sheet.getRange(i, 3).getValue();
      const endTimeStr = sheet.getRange(i, 4).getValue();

      // 日付と時刻を組み合わせてDateオブジェクトを生成
      const startDate = new Date(dateValue);
      const [startHour, startMin] = startTimeStr.toString().split(':').map(Number);
      startDate.setHours(startHour, startMin, 0, 0);

      const endDate = new Date(dateValue);
      const [endHour, endMin] = endTimeStr.toString().split(':').map(Number);
      endDate.setHours(endHour, endMin, 0, 0);

      // カレンダーに予定を作成
      calendar.createEvent(title, startDate, endDate);

      statusCell.setValue('登録済み');
      successCount++;

    } catch (error) {
      statusCell.setValue(`エラー: ${error.message}`);
      errorCount++;
    }
  }

  // 処理結果をダイアログで表示
  const ui = SpreadsheetApp.getUi();
  ui.alert(
    `処理完了\n登録: ${successCount}件\nスキップ: ${skipCount}件\nエラー: ${errorCount}件`
  );
}

このコードをGASエディタのコード.gsにそのまま貼り付けて、registerCalendarEvents関数を選択して実行ボタンを押す。初回は承認ダイアログが出るので「許可」を選べば動き出す。


よくある失敗と対処法

失敗①:日付がシリアル値になってカレンダーに変な日時が登録される

スプレッドシートのA列の値をGASで取得すると、Dateオブジェクトとして取れる場合と、数値(シリアル値)として取れる場合がある。後者だと「1970年1月1日」みたいな日時が登録されてしまう。

対処法:Cursorに「A列の値がDateオブジェクトでない場合の変換処理を追加して」と追加指示する。または、スプレッドシートのA列のセル書式を「日付」に明示的に設定しておく。

失敗②:「承認が必要です」エラーで止まる

初回実行時は必ずGoogleの承認フローが走る。「このアプリはGoogleによって確認されていません」という画面が出ても、「詳細」→「安全でないページに移動」を押せば先に進める。自分で作ったスクリプトなので安全だ。

失敗③:1,000行処理しようとしたら6分で止まった

GASの実行時間上限は6分。1行あたり約0.3秒として、1,000行を超えると制限に引っかかる可能性が出てくる。

対処法:Cursorに「一度に処理する行数を200件に制限して、続きから再実行できるように処理済みフラグを使って」と追加指示する。上記コードのE列ステータスを使った重複スキップロジックがすでに入っているので、実行→また実行、を繰り返せば続きから処理できる。

失敗④:「このカレンダーに予定を作成する権限がない」

getDefaultCalendar()は自分のデフォルトカレンダーに書くが、別のカレンダーIDを指定する場合はCalendarApp.getCalendarById('カレンダーID')を使う。カレンダーIDはGoogleカレンダーの設定画面→該当カレンダーの「カレンダーID」欄に載っている([REDACTED]という形式)。


clasp連携でCursorをフル活用する(上級者向け)

claspとは何か

claspはGASプロジェクトをローカルのファイルとして管理できるCLIツールだ。これを使うと、CursorでGASコードを直接編集して、コマンド一発でGASエディタに反映できる。

ただし正直に言うと、Node.js環境に慣れていない人はここで詰まる。初期設定のハードルが思ったより高い。GASを月に数回作る程度なら、コピペ運用で十分だ。本格的にGAS開発をやるつもりがある人だけ試すといい。

claspの基本ワークフロー

# Node.jsがインストール済みの前提
npm install -g @google/clasp
clasp login
clasp clone <スクリプトID>
# ↑ Cursorで編集 ↑
clasp push

スクリプトIDはGASエディタのURLに含まれる。https://script.google.com/d/xxxxxxxx/editxxxxxxxx部分がそれだ。

claspをCloneしたあとは、Cursorのプロジェクトフォルダとして開ける。appsscript.json(ランタイム設定)や.claspignoreの書き方もCursorに「これどう書けばいい?」と聞けば教えてくれる。

CursorからGASに直接デプロイはできない

よく聞かれるんだが、2026年6月時点でCursorからGASへの直接デプロイ機能はない。Cursorで生成したコードをGASエディタに持っていく方法は2択だ。

  • コピペ:シンプルな案件向け。ファイルが1つなら十分
  • clasp push:ファイルが複数ある、定期的に更新する案件向け

「Cursorでワンクリックデプロイできると思っていた」という声をたまに見るが、それは現時点では存在しない機能だ。


よくある質問

Q1. 無料のGoogleアカウントでも使えますか?

使える。CalendarAppの制限(5,000件/日)もトリガー制限(20個)も、個人利用の範囲なら上限に触れることはほぼない。Google Workspaceアカウントとの違いは実質的にほぼない。

Q2. 生成されたコードが動かなかったとき、どうCursorに伝えればいいですか?

GASの実行ログに表示されるエラーメッセージをそのままコピーしてCursorのチャットに貼る。「このエラーが出ました。修正してください」だけで十分だ。Cursorはエラーのスタックトレースとコードのどこがまずいかをセットで返してくれる。平均1〜2回のやり取りで動くコードになることが多い。

Q3. 特定のカレンダーではなく、共有カレンダーに登録したい

CalendarApp.getDefaultCalendar()CalendarApp.getCalendarById('カレンダーID')に変えるだけでいい。カレンダーIDはGoogleカレンダーの設定→「マイカレンダー」または「他のカレンダー」→対象カレンダーの「カレンダーの統合」欄にある。自分が編集権限を持っているカレンダーなら登録できる。

Q4. CursorのFreeプランで今回の手順はできますか?

できる。ただしFreeプランはAIの応答速度が遅く、月間の使用量に上限がある(2026年時点で無料枠は月50回程度のSlowリクエスト)。1〜2本のスクリプトを作るなら無料で足りる。継続して使うならProを検討したほうがストレスが少ない。


まとめ|今すぐやるべき1つのアクション

手順を振り返ると、やることはこれだけだ。

  • スプレッドシートを5列構成で作る
  • Cursorのチャットに@docs付きのプロンプトを投げる
  • 生成されたコードをGASエディタに貼って実行する

「コードが書けないから自動化は無理」という思い込みを、Cursorは実用レベルで壊してくれる。初回プロンプトで動かなくても、エラーをそのまま貼れば直してくれる。

今日中にやること:スプレッドシートを1枚作って、テスト用に5行のダミーデータを入れてみる。それだけでいい。Cursorを開くのはその次だ。

環境構築に不安がある場合は、Cursorの初期設定と「Cursor Rules」の設定を先に済ませておくと、AIの出力ブレがさらに減って作業がスムーズになる。


関連記事


📘 もっと深く学びたい方へ

この記事で紹介した内容を、さらに体系的に・実務レベルで習得できる教材を販売中です。

ChatGPT業務自動化 実践テンプレート集(¥1,480)

API・スプレッドシート・メール・議事録・請求書をコピペで自動化する実装特化型テンプレート集(全22ページ)

  • 動くGASコード・API設定手順・プロンプトをワンセット収録
  • スプレッドシート連携/メール/議事録/請求書を実務レベルで自動化
  • コピペで即動く実装コード(Python / GAS)付き

👉 今すぐ購入する

ChatGPT&Claude AIプロンプト集50選(¥980)

コピペで即使える実践プロンプト50種を全24ページに凝縮

  • ビジネスメール・企画書・分析・コーディング等 8カテゴリ網羅
  • ChatGPT / Claude / Gemini 全対応
  • 変数を埋めるだけで即実務投入

👉 今すぐ購入する


関連ツール紹介

AIスキルを収益化するならココナラでサービスを出品できる。AIライティング・画像生成・データ分析など、AIスキルを活かした案件の需要は増えている。

おすすめツールの一覧はこちらにまとめている。