背景:スプレッドシートのタスクを手作業でMicrosoft To Doへ転記するのは手間であった。
目的:スプレッドシートのタスクを自動でMicrosoft To Doに連携し、転記作業を省力化・効率化する。
- Googleスプレッドシートの「Tasks」シートに記載されたタスクをMicrosoft To Doへ自動で登録します。
- MicrosoftアカウントのOAuth2認証フロー(認証URL生成・トークン自動取得)を実行できます。
- OAuth認証後は自動的にリダイレクトされ、トークンが自動取得されます(認可コードの手動入力が不要)。
- アクセストークンの有効期限を管理し、期限切れ時はエラーを表示します。
- タスクごとに登録結果(成功またはエラー内容)を「result」列に出力します。
- タイトルやリスト名などの必須項目をバリデーションします。
- 期限日、本文、繰り返し設定など、指定された各種タスク属性を反映して登録します。
- 期限日はスプレッドシートのタイムゾーンでMicrosoft To Doに登録されます。
- Googleスプレッドシートのカスタムメニューから認証やタスク登録などの操作を実行できます。
本スクリプトは、以下2つのシート構成を前提としています。
| セル | 内容 |
|---|---|
| A1 | MicrosoftアプリのClient ID |
| A2 | MicrosoftアプリのClient Secret |
| A3 | アクセストークン(自動取得) |
| A4 | リフレッシュトークン(自動取得) |
| A5 | 認証URL(自動生成) |
| A6 | トークン有効期限(自動生成、UNIXミリ秒、内部管理用) |
| A7 | code_verifier(PKCE用、自動生成) |
| A8 | Redirect URI(GAS WebアプリのURL) |
| 列名 | 内容 |
|---|---|
| title | タスクのタイトル(必須) |
| list_name | 登録先リスト名(必須) |
| body | タスクの本文(任意) |
| due | 期限日 |
| status | タスクの状態(任意、未指定時はnotStarted) |
| recurrence_type | 繰り返し種別(任意、未指定時は繰り返しなし) |
| recurrence_start | 繰り返し開始日(任意) |
| recurrence_end | 繰り返し終了日(任意) |
| recurrence_interval | 繰り返し間隔(任意、数値) |
| result | 登録結果(自動出力) |
| 値 | 意味 |
|---|---|
| notStarted | 未開始 |
| inProgress | 進行中 |
| completed | 完了 |
| waitingOnOthers | 他者待ち |
| deferred | 延期 |
| 値 | 意味 |
|---|---|
| daily | 毎日 |
| weekly | 毎週 |
| absoluteMonthly | 毎月(特定日) |
| absoluteYearly | 毎年(特定日) |
| relativeMonthly | 毎月(第n曜日など) |
| relativeYearly | 毎年(第n曜日など) |
- Googleスプレッドシート「Tasks」シートの「result」列に、各タスクの登録結果(Successまたはエラー内容)を自動で出力します。
- Microsoft To Doに、Tasksシートで指定した内容のタスクが登録されます。
- Googleスプレッドシート上で、処理完了やエラー発生時にダイアログメッセージが表示されます。
※ ファイルとしての出力(CSVやPDFなど)はありません。
- Googleスプレッドシートを開き、「拡張機能」→「Apps Script」から本スクリプト(
MicrosoftToDoImporter.gs)を貼り付けて保存します。 - スプレッドシートに「Auth」シートと「Tasks」シートを作成し、必要なセル・列を準備します(AuthシートのA1〜A8、Tasksシートの列は本READMEの「入力」を参照)。
- GAS を Web アプリとして公開し、デプロイされたURLを取得してAzure側のRedirect URIに登録します。
- Apps Scriptエディタで右上の「デプロイ」→「新しいデプロイ」を選択します。
- デプロイの種類で「Webアプリ」を選択します。
- 「実行するユーザー」は
自分を選択します。 - 「アプリにアクセスできるユーザー」は必要最小限の範囲を選択します(個人利用は
自分のみ)。 - デプロイして表示されるWebアプリのURLをコピーし、
AuthシートのA8セルに貼り付けます。 - Azureポータルで該当アプリの「認証(Authentication)」設定を開き、プラットフォームに「Web」を追加して、コピーしたWebアプリのURLをRedirect URI(タイプ:
Web)として登録します。
AuthシートのA1・A2セルにMicrosoftアプリのClient ID・Client Secretを入力します。- スプレッドシートを再読み込みし、メニューに「Microsoft To Do」が追加されていることを確認します。
- メニューから「認証URL生成」を選択し、A5セルのURLをブラウザで開いて認可します。
- Microsoftの認可画面で許可すると、自動的にリダイレクトされ、トークンが自動取得されます(A3/A4/A6セルに保存されます)。
Tasksシートにタスク情報を記入し、「TasksシートからTo Doに登録」を実行します。- 各タスクの登録結果が
result列に出力されます。
本ツールはGoogle Apps Script(GAS)として動作します。利用にあたり、以下の環境を想定しています。
| 項目 | 内容 |
|---|---|
| 動作環境 | Googleスプレッドシート(Webブラウザー版) |
| ブラウザ | Google Chrome最新版 |
| Microsoftアカウント | Microsoft To Doが利用可能なアカウント(組織/個人どちらも可) |
本ツールの主な処理フローは以下の通りです。
Googleスプレッドシートのカスタムメニューから「認証URL生成」を選択すると、次の処理を行います。
- AuthシートA1セルからMicrosoftアプリのClient ID、A8セルからRedirect URI(GAS WebアプリのURL)を取得します。
- PKCE用の
code_verifierとcode_challengeを生成し、code_verifierをAuthシートA7セルに保存します。 - Microsoft認証エンドポイント、リダイレクトURI、スコープ、
code_challenge、code_challenge_method=S256などのパラメータを組み合わせて認証用URLを生成します。 - 生成した認証URLをAuthシートA5セルに出力します。
認証URL(A5セル)をブラウザで開いてMicrosoftアカウントで認可すると、以下の処理が自動的に実行されます。
- OAuth認可後、ブラウザはGAS WebアプリのURLへ認可コード(code)付きでリダイレクトされます。
- doGet関数が認可コードを受け取り、AuthシートA7セルから
code_verifier、A8セルからRedirect URIを取得します。 - Microsoftのトークンエンドポイント(/token)へアクセストークン・リフレッシュトークン取得リクエストを送信します(PKCE対応)。
- レスポンスからアクセストークン・リフレッシュトークン・有効期限を取得します。
- 取得したアクセストークンをAuthシートA3セル、リフレッシュトークンをA4セル、有効期限(UNIXミリ秒換算)をA6セルに保存します。
- セキュリティ対策として、AuthシートA7セルの
code_verifierをクリアします(空文字を保存)。 - ブラウザに「認証完了」メッセージを表示します。
Googleスプレッドシートのカスタムメニューから「TasksシートからTo Doに登録」を選択すると、次の処理を行います。
- Tasksシートの全データ行を取得し、1行ずつ順に処理します。
- 各行について、以下の処理を実施します。
- タスクデータをオブジェクト形式に変換します。
- 必須項目(タイトル・リスト名)が未入力の場合はバリデーションエラーとしてresult列にエラー内容を出力し、次の行へ進みます。
- 期限日や繰り返し設定などの値を整形・検証します(不正な場合はエラーとしてresult列に出力)。
- Microsoft To DoリストIDをAPI経由で取得します(リストが存在しない場合はエラーとしてresult列に出力)。
- タスク情報をMicrosoft Graph API用のリクエスト形式に変換します。
- Microsoft Graph APIを呼び出してタスクを登録します。
- 登録に成功した場合はresult列に「Success」、失敗した場合はエラー内容を出力します。
| 種別 | メッセージ内容 | 用途・タイミング |
|---|---|---|
| 完了 | 認証URLを生成しました。\nセルA5をクリックしてブラウザで開いてください。 | 認証URL生成時(ダイアログ) |
| 完了 | 認証完了 | OAuth認証とトークン取得が正常に完了した場合(WebアプリのHTML出力) |
| 完了 | タスク登録処理が完了しました! | 全タスク登録完了時(ダイアログ) |
| エラー | {sheetName}シートが存在しません | Authシート、またはTasksシートが存在しない場合 |
| エラー | {fieldName}が空またはスペースのみです。正しい値を入力してください。 | 認証URL生成時またはトークン取得時に必須項目が空の場合 |
| エラー | Authシートにトークン情報がありません。初回認証が必要です。 | トークン未取得時 |
| エラー | Tasksシートに'result'列がありません。'result'列を追加してください。 | result列未作成時 |
| エラー | title/list_name missing | 必須項目未入力時 |
| エラー | due日付が不正です | 期限日が不正な場合 |
| エラー | Error: {msg} | トークン取得処理中に予期しないエラーが発生した場合(WebアプリのHTML出力) |
| エラー | Microsoft To Do登録APIエラー: HTTP {code}\n{body} | Microsoft To Do API呼び出し時にHTTPエラーが発生した場合(result列) |
| エラー | アクセストークンの有効期限が切れています。再度認証を実行してください。 | トークン有効期限切れ時 |
| エラー | アクセストークン取得に失敗しました: {msg} | アクセストークン取得失敗時 |
| エラー | トークン取得エラー: HTTP {code}\n{body} | Microsoftのトークンエンドポイントからエラーレスポンスが返された場合(WebアプリのHTML出力) |
| エラー | 認可コードが見つかりません | OAuth認証後のリダイレクト時に認可コードが取得できなかった場合(WebアプリのHTML出力) |
| エラー | 指定リストが見つかりません: {listName} | list_name不正時 |
| 結果 | Error: {msg} | タスク登録失敗時(result列) |
| 結果 | Success | タスク登録成功時(result列) |
- このプログラムはMITライセンスに基づいて提供されます。
- VSCode バージョン 1.103.1
| バージョン | 日付 | 内容 |
|---|---|---|
| 2.0.0 | 2026-01-05 | ・PKCE対応のOAuth 2.0フローに移行 ・認可コードの自動取得機能を追加 ・Authシートのバリデーション強化 ・認証URL生成時のメッセージ表示タイミングを改善 |
| 1.0.2 | 2026-01-04 | エラーメッセージを改善し、AuthシートまたはTasksシートが存在しない場合の説明を統合 |
| 1.0.1 | 2025-08-17 | ・リマインダー機能の記述・処理を削除 ・期限日・繰り返し設定のタイムゾーン対応 ・Microsoft Graph APIエラー時の詳細なエラーメッセージ追加 ・APIエラー時のハンドリング強化 ・日付バリデーション処理の追加 ・READMEの説明文を一部修正・追記 |
| 1.0.0 | 2025-08-17 | 初版リリース |