Open74

「読者コミュニティ|NotionとGoogle ToDoリストの相互連携をGASで実装してみよう!」の読者サポート

namiki_inamiki_i

本の感想や質問をお気軽にコメントしてください。

https://zenn.dev/namiki_i/books/5eaffd68e10000

やまだやまだ

はじめまして。まったくコードがわからない初心者でも動かすことができとても感謝しております。notionとカレンダーをうまく使い分けられ、本当に助かりました。まったくコードが分からないため、有料記事を購入していないのに恐縮ですが、1点お伺いしたいです。

グループ分けをしたいので、notionの方で列(property)を追加したところ、taskIdが作成されなくなってしまい、カレンダーとの同期ができません。

判明した経緯としては、最初、マルチセレクトでタスクのグループ分けとテキストの2列を追加していました。ところが、Googleに反映されているタスクとされていないタスクがあることに気がつき、その違いはtaskIdが作成されるかされないかであることがわかりました。

列を追加するためにはどのようにすればいいか教えていただけませんか。
的外れなご質問でしたら申し訳ないのですが、どうぞよろしくお願いいたします。

namiki_inamiki_i

コメントいただきありがとうございます!

まず、はじめにテーブルビューで列にあたるプロパティ(以降 プロパティ)を記事内で紹介したnotionテンプレートよりも増やして、NotionとGoogle タスクの連携を取ることは可能です。(自分の環境では、複数のマルチセレクトのプロパティを使ってnotion上でタスクのグループ分けをしながら連携できています)

そのため、プロパティの名前が重複しないことに注意して、新しくプロパティを作成してGoogle タスクとnotionの連携はできます。

おっしゃる通り、
「(Googleタスクの)taskIdがnotionの”taskId”プロパティに表示されていない」ことは、
notionとの連携ができていないということになります。(Googleタスクとnotionが連携されたときにGoogleタスクのtaskIdが自動でnotionの"taskId"プロパティに記入される仕組みになっております)

一方で一部のタスクは連携ができていることも気になります。
新規プロパティの有無が連携できていない原因なのか(因果関係)を検証する必要があります

以下の部分を確認していただけますでしょうか?

  • チェックすること
    • 新しくつくったプロパティの名前が他のプロパティの名前とかぶっていないか?
    • 連携のためのトリガーの設定はまちがっていないか?
      • 「Chapter 06:動かしてみよう!(トリガー設定)」にある通り、Notion→Google タスクへの反映はリアルタイムではなく、(記事上では)10分置き、またはGoogleカレンダー上で予定の変更があった場合に連携プログラムが動きます。
        • やまださんがnotionを確認したときは、たまたま「notionタスクは作成したけど、連携プログラムはまだ動いていない」タイミングではなかったでしょうか?
    • GAS側にエラー文が発生していないのかのチェック
  • 試してみること
    • 新規プロパティの有無が今回の原因なのかを検証
      • ①notion上で新規プロパティを作った状態でタスクを作成
      • ②GAS上で手動でNotionToGoogleTask() または、GoogleTaskToNotion()を作動させて、タスク連携が反映できているのかをチェック(「Chapter 05:実装方法(コード)」の「関数の試験実行」を参考)
        • 連携できている(NotionにtaskID, Googleタスクにnotion urlがある):今回の原因は新規プロパティの有無以外にある
        • 連携できていない:原因は新規プロパティの有無による可能性がより高い

個人的には、新規プロパティの有無が直接今回の原因になっていることは考えにくいです。

またコメントお願いします!
もし可能でしたら、(公開できる範囲でnotionやトリガーの部分の画像を添えていただけると状況理解がしやすいのでお力になれると思います!)
よろしくお願いします。

やまだやまだ

早速のお返事ありがとうございます。
おっしゃっていただいたことの半分も理解できていないかと思いますが、確認してみました。

チェックすること
①新しくつくったプロパティの名前
→phaseです

②連携のためのトリガーの設定はまちがっていないか?
・「Chapter 06:動かしてみよう!(トリガー設定)」にある通り、Notion→Google タスクへの反映はリアルタイムではなく、(記事上では)10分置き、またはGoogleカレンダー上で予定の変更があった場合に連携プログラムが動きます。
やまださんがnotionを確認したときは、たまたま「notionタスクは作成したけど、連携プログラムはまだ動いていない」タイミングではなかったでしょうか?
→10分以上経過しており、カレンダーの予定を動かしてみましたが作成されませんでした
③GAS側にエラー文が発生していないのかのチェック
→エラーは出ていいませんでした(画像添付しました)

試してみること
新規プロパティの有無が今回の原因なのかを検証
①notion上で新規プロパティを作った状態でタスクを作成
②GAS上で手動でNotionToGoogleTask() または、GoogleTaskToNotion()を作動させて、タスク連携が反映できているのかをチェック(「Chapter 05:実装方法(コード)」の「関数の試験実行」を参考)
連携できている(NotionにtaskID, Googleタスクにnotion urlがある):今回の原因は新規プロパティの有無以外にある
→添付画像の通り、初日というタスクのみ反映されません。

連携できていない:原因は新規プロパティの有無による可能性がより高い
→phaseのプロパティを削除しても、taskIdは作成されませんでした。



スクリーンショットの場所が分からなかったのですが、ひとまず添付しました。
エラーがでたのは昨日の分なので、関係ないかと思います。

ご確認いただけますと助かります。よろしくお願いいたします。

namiki_inamiki_i

一番最後の画像を見ると、GoogleTaskToNotionのステータスが「失敗しました」になっているので、GoogleTaskToNotionの実行に問題があるようです.

ためしに、(一番最後の画像の画面で)ひとつクリックしてみてください.
表示されるログにどこでエラーが発生しているかが表示されるので、そのスクショを送っていただけると幸いです.

やまだやまだ

ご確認ありがとうございます。こちらでいかがでしょうか?

namiki_inamiki_i

ありがとうございます

エラー文をみると、main.gs34行目の中のGoogleTaskToNotionのgetUpdatedTasks関数(googleTasks.gsの80行目付近)でエラーが発生していることがわかり、その内容は、

tasks.tasks.listについて「The service is currently unavailable」となっています.

これは、Google タスクのサービスを使えていないことを示しています.

Apps Scriptのコードでこの部分のデバッグの確認をしないと詳細はわからないのですが、
taskListIdの設定は正しいでしょうか?

または、Chapter 04:実装方法(事前準備)の「Google Apps Script(GAS)」の「2. Tasks APIの有効化」が正しくできているかご確認ください.

Chapter 05 実装方法(コード)の「関数の試験実行」において、GoogleTaskToNotion()が実行してどのような実行ログにエラーが出ていないか確認してみてください.

この時点でエラーが出ている場合は、同ページの「パラメーターの設定」に誤りがある可能性が高いです.

または、試しに新しくnotion templateを作り直して、プロパティを増やした状態で検証する方法もあります(手間になってしまいますが...)

ちなみに、プロパティを増やさない状態では、GoogleTaskToNotion()の試験実行は成功していますか?

やまだやまだ

新しく作成し直してみました。プロパティを既に作成した状態の表にしました。

タスクを新規作成しても、この表示になってしまいます。

namiki_inamiki_i

ありがとうございます.

こちらで実行されたのは、NotionToGoogleTask関数なので、GoogleTaskToNotion関数を実行してみてください!
(NotionToGoogleTask関数は、notionで更新したタスクをGoogleタスク側に反映する関数です.)

「実行ログ」ボタンの左のプルダウンから実行したい関数を選べます!

また、NotionToGoogleTask関数は、”notionLastUpdatePeriod”で設定した分数(やまださんの場合だと15分)以内に作成したタスクのみを反映対象とします.

namiki_inamiki_i

あと、スクショのnotionトークンとID関係は個人情報なので、隠したほうがいいです!

やまだやまだ

GoogleTaskToNotion関数はエラーが出ていないのです。
15分以内に作成しているのに、反応しません

namiki_inamiki_i

今度は、NotionToGoogleTask()でもエラーが発生していますね....(Notionからうまく情報が吸い取れていないようです)

  • このエラーははじめてですか?(関数の試験実行の際にもエラーが発生しますか?)

「15分以内に作成している」というのは、「notion上で新規のタスクを関数実行の15分以内に作成している」でまちがいないでしょうか?

  • また、2番目の画像のログが「START : NotionToGoogleTask()」と書かれているので、NotionToGoogleTask()を実行した際のログに見えるのですが、GoogleTaskToNotion()関数実行時のログはありますか?
やまだやまだ

・関数の試験実行の際にはエラーは発生しませんでした。
・「15分以内に作成している」というのは、「notion上で新規のタスクを関数実行の15分以内に作成している」でまちがいないです


お忙しい中、ご対応いただきありがとうございます。
お手数おかけしますが、ぜひ活用したいのでよろしくお願いいたします。

namiki_inamiki_i

ありがとうございます、
基本的にNotionToGoogleTask()とGoogleTaskToNotion()の2つが試験実行の際にエラーが発生していなければ、トリガーでの実行時もうまくいくはずなので、そこを慎重に検証したい気持ちです.

まずは、試験実行でいろんなパターンで試行錯誤してエラーが発生していなことを確認してから、トリガーでの実行を試すべきです.

2枚目と3枚目の画像(トリガー実行時の失敗)のエラー文的には、notionとGoogleタスクからうまく情報を引っ張れていないような気がします.
「パラメーターの設定」でnotionToken, notionDbId, taskListId, calendarId, nameProp, dateProp, taskIdProp, doneStatusProp, notesProp が正しく設定されているかご確認お願いします.

現時点では原因がまだわからないので、
以下について重複するものもありお手数おかけしますが、再度ご確認いただきたいです.
(原因がわからない以上、シンプルな状態から検証するしか方法がないです...)
(まずは、試験実行でいろんなパターンで網羅的に試行錯誤してエラーが発生していなことを確認してから、トリガーでの実行で検証)

  • パラメーターが正しいかの確認(← 一つでもまちがっているといただいた画像のようなエラーが出るのでもう一度ご確認ください.)
    • 再度新しくnotionのデータベースを作った場合、最新のnotion database IDを使用しているか?
    • Chapter 05:実装方法(コード)の 「パラメーターの設定」の表を一個ずつご確認ください.
  • 関数の試験実行
    • notionテンプレート通りの状態(プロパティを増やさない状態)で、
      • A:notion上でタスク(タスクAと命名)を追加してから、NotionToGoogleTask()を試験実行して以下を確認
        • チェック1:Googleタスク上にタスクAが反映されているか
        • チェック2:notionのタスクAの”taskId”にGoogleタスクのタスクAのタスクIDが入力されているかどうか
      • B:Googleタスク上でタスク(タスクBと命名)を追加してから、GoogleTaskToNotion()を試験実行して以下を確認
        • チェック1:notion上にタスクBが追加されているか?
        • チェック2:GoogleタスクのタスクBの説明欄にnotionUrlが追加されているか?

まずはこれらを試してみて、エラーが発生しないことをご確認いただきたいです.(エラー発生の有無は実行ログを読んでご確認いただきたいです.)

つぎに、notionテンプレートに任意で(マルチセレクトなどの)プロパティを追加した状態で、上の検証をしてみてください.

このまま、検証を続けて解決を試みますが、場合によってはもう一度新しいnotionとgoogleタスクとGASを使ってやり直す方が目標を実現できる可能性もありますので、その点をご留意いただけると幸いです.

ban2022ban2022

こんばんは、NotionとGoogleTodoの連携をしたかったので要望通りのドンピシャな機能があったことに感動しております。
さっそく導入してみようと思ったのですが、GitHubからスクリプトをコピーしテスト実行しようとしたところ

構文エラー: SyntaxError: Unexpected token '.' 行: 436 ファイル: notion.gs

と表示されてしまいます。

なにぶん初心者なものでどこがおかしいのかさっぱり分からずで…
お手数おかけしますがご対応のほど宜しくお願い致します。

namiki_inamiki_i

ありがとうございます!
notion.gsの436行目付近のスクリンショット画像を送っていただけますでしょうか?

ban2022ban2022

早速のお返事をありがとうございます。
こちらがスクリーンショット画像です。
宜しくお願い致します。

namiki_inamiki_i

ありがとうございます。
ごめんなさい
コードが間違っていました。
.includeの前に「textWithoutUrl」を入力して実行してみてください!

470行目のif文を参考にしてください!
(githubのコードは本日中に修正しておきます)

ban2022ban2022

ありがとうございました、無事に動きました!
引き続き設定を頑張ります~

namiki_inamiki_i

良かったです!
他にもエラーやわからないことがありましたら、コメントよろしくお願いいたします。
※Githubのコードも修正いたしました。

p.s.
有料記事までご購入いただき誠にありがとうございます。
参考になれば幸いです。
解説不足の部分がありましたら追記いたしますので、どうぞお申し付けください。

Erika SuzukiErika Suzuki

こんばんは、初めまして。

ちょうどやってみたいと思う機能を調べていたところ、わかりやすく記載いただいておりましたので利用させていただいております!
「関数の試験実行」の際にエラーが表示されてしまいました。
プログラミング初学者でして、エラーの理由を調べても解消できずだったので教えていただければと思います。

お手隙の際で大丈夫ですので、よろしくお願いいたします。

  const json = infoNotion.fetchNotion(lastUpdate);
  json.results = json.results.sort((a, b) => a.last_edited_time > b.last_edited_time ? -1 : 1);
namiki_inamiki_i

コメントありがとうございます。
「関数の試験実行」でエラーがでたということですね。
現時点では詳細がわからないのですが、Notionとの連携に失敗しているようです。
main.gsの6行目のnotionTokenに正しいトークンを記述しているかどうかについて確認してみてください。

  • 判断箇所
    • 「!!!Notion page POST ERROR!!!」のコメントが出力されています。これは、notion.gs/225行目に該当します。つまり、notion.gs/205行目のpostNotion(endpoint, payload, method)関数でエラーが発生しています。
    • この関数は、notionトークンを使って、notion側にデータを送る関数です。おそらく、送信するために必要なトークンが間違っているか、データの形式が誤っているためエラーが発生したのだと思います。

また、main.gsのNotionToGoogleTaskを選択した状態で、以下のデバッグを押してみてください。
エラーが発生する箇所で詳細情報が右側に表示されます。
その際のスクリンショットを添付していただけると、もう少しわかることがあるかもしれません。

Erika SuzukiErika Suzuki

お返事ありがとうございます!
本日中に確認しながら試させていただきます!

Erika SuzukiErika Suzuki

先日はお返事いただきましてありがとうございました。
確認に時間がかかっておりましてすみません。

以下の点を修正し、最初から作成し直してみましたが、今度は他のエラーが出てしまいましたのでご相談させていただきたく、コメントさせていただきました。
エラーについてキャプチャを添付させていただきますので、要因がお分かりでしたらフィードバックいただけますでしょうか?



** Notion の 最新version は "2022-02-22" のようなので、"2022-02-22" と置き換えております。

お手隙の際に、ご確認よろしくお願いいたします。

namiki_inamiki_i

返信が遅れて申し訳ありません.
おそらく、Tasks APIが有効化されていないような気がします.

「Tasks is not defined」つまり、Tasksが定義されておらず使えないというエラーメッセージが出ています.
”04 実装方法(事前準備)”の"2 Tasks APIの有効化"を一度試していただけますでしょうか?

有効化されると、添付画像のように表示されるはずです.

ご確認お願いいたします.

Erika SuzukiErika Suzuki

ありがとうございます。
Tasksを追加するのが漏れておりました。
お忙しいところお返事ありがとうございます。
先に進めましたのでまた一人でやってみます!
ありがとうございました。

Erika SuzukiErika Suzuki

たびたびすみません。
(急ぎませんのでお手隙の際で大丈夫です)

うまく反映されなかったので再度確認したところ、「NotionToGoogleTask()」の方でもエラーが出ておりました。
トリガー設定後に動かなかったので、キャプチャの際時は設定したトリガーを全て削除し、
05 実装コード にある "関数の試験実行" を行いました。
とくにコードはいじったりしていないので原因がわからずです。

再度教えていただけますと幸いです。
よろしくお願いいたします。

namiki_inamiki_i

コメントありがとうございます。
デバッグを押していただいて、jsonの中身のキャプチャをいただけますか?
json>resultsの中身を確認したいです!

namiki_inamiki_i

「Cannot read property 'sort' of undefined」なので、おそらくソートができないようです。

何らかの理由で連携しているnotionページの各タスクの最終更新(last_edited_time)が空欄になっているのではないかと予想します。

ためしにnotion側でタスクを数個作ってみて実行した際に同じエラーが出るか確認いただけますか?
https://techacademy.jp/magazine/26836

Erika SuzukiErika Suzuki

ありがとうございます。

NotionにTo Do を3つほど追加してみました。

その後 「NotionToGoogleTask()」を実行し、エラー表示がありました。

デバッグをキャプチャしてみましたのでご確認いただけますと幸いです。

よろしくお願いいたします。

namiki_inamiki_i

返信が遅れて申し訳ありません.

デバッグはブレークポイント(紫色の点)を設定しないで、デバッグを実行したら215行目で止まったということでしょうか?

最後の画像を見ると、notion.jsの294行目のfetchNotionの中のpostNotion()がうまく動いていませんね.
postNotionを実行するために必要な、this.notionTokenが正しいかご確認いただけますか?
また、一度this.notionVersionを昔のバージョンで試しに実行してみてください.

ちなみにGoogleTaskToNotion()は試験実行で動いていますか?

よろしくお願いします.

p.s.
①こちらの記事にもpostNotionという関数があります.
https://zenn.dev/nobu/books/215bd245509974/viewer/d2abc2
面倒ではありますが、こちらの記事を実装してみて、postNotion関数を使えるかどうか試すのも一つの手です.

②最後にいただいたキャプチャ画像のデバッグ表示部分にendpointやnotionTokenが写ってしまっているので、安全のために隠していただけると幸いです.

OyagiOyagi

はじめまして。
記事を見つけ、実装してみました。
しかし、試験実行してみたところどちらの関数もfinishと出るのですがNotionにもToDoにも反映されませんでした。

確認をお願いしたいです。
よろしくお願いします。

namiki_inamiki_i

Oyagiさん
コメントいただきありがとうございます。

試験実行が成功していないということで、より詳細な情報をいただきたいのですが、
Chapter 05の「実装方法(コード)」の「パラメーターの設定」で各種パラメータは合致していますでしょうか?

また、エラーメッセージ等があれば、画像で共有いただけると幸いです。

OyagiOyagi

返信ありがとうございます。

プロパティ名が違っていたため動作していませんでした。

yuta.tagajouyuta.tagajou

初めまして。大変有益な情報を共有してくださりありがとうございます。

質問なのですが、エラーコードで以下のようなものが出ました。何かわかりましたら教えて頂きたいです。

namiki_inamiki_i

コメントいただきありがとうございます.
エラー文としては、task list ID が引き出せないよと言っているのですが、main.jsの6~9行目で間違った場所にIDを定義されています.

7行目の
"nameProp" : "Title"
Titleの位置と同じように、

 "notionToken" : "ここに入力",//Notion token // !!!SET HERE !!!
 "notionDbId" : "ここに入力",//Notion database ID // !!!SET HERE !!!
 "taskListId":"ここに入力",//Google task list ID // !!!SET HERE !!!
 "calendarId": "ここに入力",/

の"ここに入力"の部分にIDやTokenを入力してください!

SET HEREと書いてしまったせいで、誤解を生んでしまいました.すみません.
SET IN THIS LINEと同じニュアンスで受け取っていただけると幸いです.

//より右側はコメントアウト部分になるので、プログラムの動作に影響を与えない部分になります.

yuta.tagajouyuta.tagajou

ありがとうございます!他にもエラーおきましたが、他の人のを参考にするとなんとかトリガー設定して通常運用まで持って行くことができました!

SaigaSaiga

はじめまして。
Notionでタスク管理しているのですが、スマホ上からだと操作しづらく、色々調べていてとても素晴らしい情報だったので、すぐに実装しました!

実装自体は問題なくできているのですが、1点ご質問です。
Googleタスクの説明欄に、NotionのページURLを記載されないようにすることは可能なものでしょうか?
スマホアプリからGoogleタスクを見ていると、NotionのURLが全タスクに表示されてしまい、少し見づらさを感じました(アプリ側で非表示設定できればよかったんですが…)

namiki_inamiki_i

コメントありがとうございます。

自分もその点が気になって試行錯誤したのですが、解決できませんでした..

Googleタスクのノート部分のnotionページurl前に改行を複数打ち込むことでGoogle タスクの一覧表示からはurl部分が隠れるようにできるかなと試してみたのですが、

どうやらGoogleタスクの仕様で、改行やスペースは除かれた状態でGoogleタスクのノート部分(説明欄)が一覧に表示されるため駄目でした...

今回の仕様上、Googleタスク→notionの連携で、
Googleタスクのノートに有効なnotion urlの有無によって、notion側にGoogleタスクを反映させるという操作(新規・既存タスク判定)をしているので、現状のままではnotion urlをGoogleタスクのnoteから排除するとnotionとGoogleタスクの連携が成立しないです。

notion.gsのcheckTaskNotesNotionUrl(googleTask,notionPageUrl)関数が該当の部分です。

つまり、notion側に重複してGoogleタスクを作らないようするための判断材料がGoogleタスク説明欄のnotion urlの存在意義です。

なので、この役割を別の方法で成立させれば、notion urlを説明欄に記載せずに済みます。

実装していないのでうまくいくかわかりませんが、Googleタスクのタスク名がnotionのタスク一覧(未完了タスク)に含まれているかどうかで新規・既存タスク判定をするというアイデアが考えられます。
(ただしこの場合、毎回notionのタスク一覧からタスク名が一致するかどうかの判定プログラムを動かすことによって計算時間がかかり、APIの無料制限内で処理が終わるのかを検証する必要があります)

参考になれば幸いです。

該当コード
https://github.com/namiki97/Notion2GoogleToDo/blob/main/notion.gs#:~:text=is filled in.-,checkTaskNotesNotionUrl,-(googleTask%2C

SaigaSaiga

ご丁寧な回答、誠にありがとうございます。

諸々了解しました。
ひとまずは、Googleタスクを管理できるサードパーティ製アプリを使うことにしました。
それで大きな支障なく使えそうです。

仕事タスク→Notion
個人タスク→Googleタスク

となっていて、Notionに統合する方法をしばらく模索してましたが、namiki_iさまの記事で一気に解決することができました。ありがとうございました!

haruharu

はじめまして。
わかりやすくまとめていただき本当にありがとうございます!
関数実行の部分で、エラーが出てしまいます。

GoogleTaskToNotion、NotionToGoogleTaskの両方で同じエラー内容になってしまいます。
分かりましたら教えていただけますでしょうか。
よろしくお願いいたします。

namiki_inamiki_i

コメントありがとうございます.

エラー文に「InfoNotion is not defined」と書いてあるので、main.gsの30行目でinfoNotionの定義が失敗しているようです.

おそらく、プログラムというよりかは設定の問題の可能性が高そうなのですが、

もう少し詳細を知りたいので、
試しに、GoogleTaskToNotionを選択した状態で、「実行」ボタンではなく、右隣の「デバッグ」ボタンを押していただいて、画面の右側に出てくる「デバッガ」の部分の画像を送っていただけますか?

または、notion.gsのclass InfoNotion{ }がおかしい可能性もあるので、再度Githubのソースコードと比較してnotion.gsが間違っていないか確認いただけますか?(notion.gsを上書きしたほうが早いと思います)

haruharu

早速のご返信ありがとうございます。

一旦デバッグを実行いたしましたので、デバッガ部分の画像をお送りいたします。
よろしくお願いいたします。

namiki_inamiki_i

ありがとうございます、

自分の環境でも似たようなエラーを再現できました、
notion.gsがない可能性が間違っているor存在していない可能性があります.

画像のようにnotion.gsはありますか?

haruharu

notion.gsが存在していませんでした。
初歩的なミスですみません。

notion.gsを入れてみて、GoogleTaskToNotionの方は実行完了できました。
NotionToGoogleTaskが別のエラーが出てしまいました。

namiki_inamiki_i

ありがとうございます.

最近、このエラーの相談がよくあるのですが、まだ原因が判明していません.
notionのトークンなど各パラメーターの値が正しいかご確認いただけますか?

また、先程と同様に「デバッグ」ボタンを押したときの画像も添付いただけると助かります.

また、以下についても参考にご確認くださいませ.
https://zenn.dev/link/comments/623ab543d205e8

haruharu

何度もありがとうございます。
以前の質問も読んでみて、Tasksは表示されているなど確認いたしました。
それでもエラーは変わらない状態です。

デバッガ画面をお送りいたします。
よろしくお願いいたします。

haruharu

何度もすみません。
昨日の'sort'エラーについては、解決いたしました。
(→データベースIDの後ろ部分(はてな以降)を含めた状態だったため、修正したところエラーはなくなりました)
簡単なミスでお手間取らせてしまい申し訳ありませんでした。

そのあと試験実行を行い、エラーは確認されなかったのですが、タスク入力をしてトリガー実行(パターン2)を行なったところまたエラーが出てしまいました。

エラー内容は以前コメントにもあったやまだ様と同じ内容でした。
以下それぞれ確認してみましたが、Google→Notionが連携できていません。
Notion→Googleは連携(タスクの追加)はできているのですが、Notion側で削除やタスク完了をしてもGoogle側で反応がありません。

何度も恐れ入ります、お手隙の際に見ていただけないでしょうか。

ちなみに日付を入れないと連携はされないのでしょうか?

▼引用(やまだ様とのやり取り)▼
現時点では原因がまだわからないので、
以下について重複するものもありお手数おかけしますが、再度ご確認いただきたいです.
(原因がわからない以上、シンプルな状態から検証するしか方法がないです...)
(まずは、試験実行でいろんなパターンで網羅的に試行錯誤してエラーが発生していなことを確認してから、トリガーでの実行で検証)

パラメーターが正しいかの確認(← 一つでもまちがっているといただいた画像のようなエラーが出るのでもう一度ご確認ください.)
再度新しくnotionのデータベースを作った場合、最新のnotion database IDを使用しているか?
Chapter 05:実装方法(コード)の 「パラメーターの設定」の表を一個ずつご確認ください.
関数の試験実行
notionテンプレート通りの状態(プロパティを増やさない状態)で、
A:notion上でタスク(タスクAと命名)を追加してから、NotionToGoogleTask()を試験実行して以下を確認
チェック1:Googleタスク上にタスクAが反映されているか
チェック2:notionのタスクAの”taskId”にGoogleタスクのタスクAのタスクIDが入力されているかどうか
B:Googleタスク上でタスク(タスクBと命名)を追加してから、GoogleTaskToNotion()を試験実行して以下を確認
チェック1:notion上にタスクBが追加されているか?
チェック2:GoogleタスクのタスクBの説明欄にnotionUrlが追加されているか?
まずはこれらを試してみて、エラーが発生しないことをご確認いただきたいです.(エラー発生の有無は実行ログを読んでご確認いただきたいです.)
-以上-

namiki_inamiki_i

sort関連のエラーが解決して何よりです!

トリガー実行に移ったことでエラーが発生しているとのことですが、トリガーに原因があるのか、関数そのものに原因があるのかを明確にしたいです.

  • ステップ1
    • 試験実行と同様にnotion側またはGoogleタスク側に変化を起こして、GoogleTaskToNotion()またはNotionToGoogleTask()を直接実行(実行ボタンのクリック)して、エラーが発生しているパターンを試行錯誤してみましょう.
    • この段階でエラーが発生しなければ、トリガーに問題があるのでステップ2に移りましょう
  • ステップ2
    • トリガーの確認
      • Chapter05 のパラメーターの設定やChapter06の各種設定がまちがいないか確認します.

ステップ1について

  • ①Google→Notionが連携できていません
    • こちらは、GASの画面でGoogleTaskToNotion()を実行(実行ボタンのクリック)して、Notion側にGoogleタスクで追加・変更したタスクが反映されていて、エラーが発生しないか確認してみてください
  • ②Notion→Googleで削除やタスク完了をしてもGoogle側で反応がありません
    • こちらについては、試験実行と同様にNotionToGoogleTask()を実行(実行ボタンのクリック)して、正常に動くか確認してみてください
    • 注意いただきたいのは、タスクを変更したタイミングと関数を実行するタイミングです
      • Chapter05のパラメーターやChapter06をご確認いただきたいのですが、NotionToGoogleTask()を実行した際に、Notion側のすべてのタスクを探索するのではなく、パラメータで設定した締切or期間内に変化があったタスクのみをGoogleタスク側と比較するということです.
      • つまり、どのタスクに変化を加えたのかが大事です.(例えば、今日から半年も前後するタスクは探索対象外なので完了ステータスの反映はされません)
      • NotionToGoogleTask()を試験実行する際には関数を実行する直前(数分以内)に1週間以内のタスクに変化を加えて試行錯誤することをおすすめします.
namiki_inamiki_i

>ちなみに日付を入れないと連携はされない
はい、基本的に関数実行日から前後1ヶ月(ソースコードをそのまま使った場合)のタスクのみを探索対象としてタスクの変化を調べるので、タスクの日付がない場合は反映ができない可能性が高いです.

  • このように探索対象に期間を設けているのはAPIが計算量が有限のためです.
    • 例えば3年分の大きなnotionデータベースを取り扱う場合、トリガーが発動するごとに3年分のタスクの変化を調べると計算量が膨大になります(計算量が大きいとAPIがエラーを吐く可能性大).なので、今回は「ステータス変化が起こるタスクは所詮今日の前後1ヶ月内のタスクだろう」という前提のもと、今日の前後1ヶ月のタスク、かつ、変化があったタスクを探索対象として計算量を抑えています.
      • この期間はパラメータのdaysForSearch, notionLastUpdatePeriod, googleLastUpdatePeriodやトリガーの頻度でちょう
namiki_inamiki_i

ちなみに画像のエラーは他のタスクでも発生しますか?それとも、タスクBのみで発生するエラーですか?

haruharu

ご回答いただきありがとうございます。

・ステップ1
▶︎この段階でエラーが出てしまいます。
エラーとなるのは、Google側でタスクを追加したとき(GoogleTaskToNotion()を実行)です。
何も追加しない場合はエラーとはなりません。

・ちなみに画像のエラーは他のタスクでも発生しますか?それとも、タスクBのみで発生するエラーですか?
▶︎タスクBのみではなく、別のタスクをGoogle側で入れてもエラーとなってしまいます。

※日付を入れないと連携されないことについて、ご回答ありがとうございました!わかりました。

haruharu

①Google→Notionが連携できていません
こちらは、GASの画面でGoogleTaskToNotion()を実行(実行ボタンのクリック)して、Notion側にGoogleタスクで追加・変更したタスクが反映されていて、エラーが発生しないか確認してみてください
▶︎GoogleTaskToNotion()を実行しても、Notion側にGoogleタスクで追加・変更したタスクは反映されません。上記エラー画面が出てきます。

②Notion→Googleで削除やタスク完了をしてもGoogle側で反応がありません
こちらについては、試験実行と同様にNotionToGoogleTask()を実行(実行ボタンのクリック)して、正常に動くか確認してみてください
▶︎こちらはNotionToGoogleTask()を実行してもエラーは出ません。エラーは出ないのですが、Notion側でタスクのステータスをDoneに変更してもGoogle側ではタスク一覧に残ったままです。

haruharu

ちなみに同じタスク(仮にタスクA)を、次のようなタスク状態にしてGAS画面にてGoogleTaskToNotion()・NotionToGoogleTask()を実行すると、

①Google側:タスク完了にする
GoogleTaskToNotion()を実行→Notion変化なし(エラーなし)

②Notion側:タスク未完了の状態(①の後なので、Google側は完了の状態)
NotionToGoogleTask()を実行→Google側で完了にしたはずのタスクAが未完了として再度一覧に戻ってきます(NotionToGoogleTask()ではエラーなし)

namiki_inamiki_i

詳細ありがとうございます.

まず、エラー画面の内容から.

Google側でタスクを追加したときにnotion側にタスクが反映されない(トリガーの有無関係なし)について.

  • エラー画面にcheckTaskNotesNotionUrl()のsetNotesでエラーが発生しています
    • この部分について、以前と同じように「実行ボタン」ではなく、「デバッグボタン」をクリックして、画面右側のデバッガーに表示されている内容をシェアしていただきたいです
      • googleTasks.gsのsetNotes(task,text)のTasks.Tasks.update(task, this.taskListId, task.notes)でエラーが発生している可能性が高いです.
      • こちらでも同じエラーが発生しています(https://teratail.com/questions/286634, https://teratail.com/questions/286576)
        • どうやらGoogle API側の一次的な問題の可能性があります
          • 試行錯誤1 : Chapter04 : 実装方法(事前準備)の「Google Apps Script(GAS)」をもう一度やり直してみてください.(サービスのTasksを一旦削除してやり直す)
      • 試行錯誤2:念の為、Googleにタスクを追加する際note(説明欄部分)は空欄でエラーが発生するか確認していただきたいです
namiki_inamiki_i

②Notion→Googleで削除やタスク完了をしてもGoogle側で反応がありません

  • NotionToGoogleTask()の実行で、Notion側のタスクのステータスがGoogleタスクに反映されないということですが、
    • 試行錯誤3 : 「実行ボタン」をクリックした際に実行ログはどのような表示がされますか?
      • 以下の画像と同じ場合は、notion側の変更を感知できていない可能性があります.
        • ログに書いてある通り、「no updated task in notion within 20.0 minutes」
      • もし、notion側での変化を感知できたら、以下のような実行ログになるはずです
        • 新たにタスク(名前:タスクA)を新規作成した場合
          • ログに「create new task : タスク名」が表示
        • タスク(名前:タスクA)がnotion側で完了になった場合、
          • 変化が感知されたタスクごとに以下が繰り返される(図はタスクAのみ1個の変化が感知された場合)
            • 図では、checkDueNotionPriority関数、checkTitleNotionPriority関数、checkNotesNotionPriority関数はスキップされて、notion.gs 549行目付近のif(notionCheckbox)が実行された状態です.(詳細は有料ページに説明しちゃいました....🙇‍♂️)
    • 注意:NotionToGoogleTask()はnotionの変化をgoogleタスクに反映する関数なので、この関数を実行する際はnotion上のタスクに変化を起こしてから実行してください(✗Googleタスク側)
namiki_inamiki_i

ちなみに同じタスク(仮にタスクA)を、次のようなタスク状態にして~

はい、GoogleTaskToNotion()は動かないが、NotionToGoogleTask()は動く状態なので、想定される挙動です.

エラーが発生した際に、実行ログとデバッガーの画像を添えていただけると助かります.

haruharu

ご確認ありがとうございます。

エラー画面にcheckTaskNotesNotionUrl()のsetNotesでエラーが発生しています

デバッグ画面をお送りいたします。(タスク名は変わっていますが、同じエラー内容です)

試行錯誤1
サービスのTasksを一旦削除して入れ直しましたが変わりませんでした

試行錯誤2
Googleタスクのnote部分は空欄でしたが、エラーになっています

試行錯誤3

  • Notion側でタスク(タスク追加)を追加した場合のログです。
    (下のタスクEの完了を先にやってしまったため、ログにタスクEも含まれています)

  • Notion側でタスク(タスクE)を完了してから、NotionToGoogleTask()を実行した際のログです。

    Notion側で完了をしていますが、Notion task status,Google task statusの両方がnot completedになっていますね、、💦

注意:NotionToGoogleTask()はnotionの変化をgoogleタスクに反映する関数なので、この関数を実行する際はnotion上のタスクに変化を起こしてから実行してください(✗Googleタスク側)

変化とは、statusを完了(Done)にしただけでは足りないですか?

よろしくお願いいたします。

haruharu

はい、GoogleTaskToNotion()は動かないが、NotionToGoogleTask()は動く状態なので、想定される挙動です.

エラーが発生した際に、実行ログとデバッガーの画像を添えていただけると助かります.

ご回答ありがとうございます。想定内の挙動について承知しました。
上記ログ等で不足があればご指摘いただけますと幸いです。

namiki_inamiki_i

ありがとうございます、

まず、原因の候補が絞れてきた「試行錯誤3」から.

notion上でタスクEを完了にした場合、実行ログのNotion task status = completed 」となるべきのところ、「not completed」となっていることがポイントですね.(notion上でのタスクの変化はちゃんと感知できていますね)

変化とは、statusを完了(Done)にしただけでは足りないですか?
いえ、statusが未完了→完了も、立派な?変化の一つです.

質問1 :確認ですが、notion上でのタスクの完了・未完了はテンプレート通り、☐未完了・☑完了 であっていますか?
質問2:このステータス情報のカラム名(テンプレートでは"DONE")はmain.gsのfunction initUserProperties() の"doneStatusProp" と一致していますか?(ご自分でカラム名を変更してていたりしませんか?)

以下を試してください

  • notion.gsの523行目付近のif(!task){//For tasks not yet registered in Google todoの行番号の左側にカーソルを合わせる
  • カーソルを合わせると紫色の○が出てくるのでクリックする
  • 先程と同様に、notion上でタスクのステータスを変更後にmain.gsのNotionToGoogleTask()を「デバックボタン」をクリックする(ややこしくなるので、notion上での変更は1つのタスクのみにしてください)
  • 画面右のデバッガの以下のプルダウンをどんどんクリック
    • Local
      • props
        • notion上でのステータスカラムの名前(テンプレートでは"DONE")
  • 確認すること
    • 確認1:pageIdが今回操作したnotionのpageIdと同じか?(notionページURLのhttps://www.notion.so/以下がpageID)
    • 確認2:
      • checkbox がtrueなのかどうか?
        • ステータス = 完了 の場合はtrue、未完了の場合はfalse
    • 同様に
      • Local
        • task
          • status
      • 確認3 : statusが'completed', 'needsAction'のどれか?
        • 詳細はnotion.gsのnotionTaskManager(notionPage) 関数をご確認いただき、どんなときにどんなログが出るのかをチェックしていただければ、なんとなくわかると思います.
    • 同様に
      • Local
        • notionCheckBox
      • 確認4:notionCheckboxがtrueかどうか?

notion上でタスクを未完了から完了に変更した場合

  • props>Done>checkbox 'true
  • notionCheckbox 'true'
  • task>status 'needsAvtion
    である必要があります.
namiki_inamiki_i

次にGoogleTaskToNotionについて、

以下を試してください

  • Googleタスク上で新たにタスクを作る(noteには何も記入しない)

  • notion.gsの366行目付近のsetNotes関数で、if (this.isLogging) console.log("空欄のnotesにurlを記入 :" + notionPageUrl);の行に上と同様に紫色の○をクリック

  • main.gsでGoogleTaskToNotion()で「デバッグボタン」クリック

デバッガ確認

  • Local
    • text
      textに新しく自動生成されたnotion urlがあるか確認(undefined だとまずいかもです)
haruharu

ご確認ありがとうございます。

質問1
未着手、進行中、完了にしておりました。。申し訳ありません。
□未完了・☑完了に変更いたしました結果は以下の通りです。
Google側で完了にして、実行したところcompletedにはなりましたが、Notion側で変化はなくnot completedになっています。

質問2
ステータス情報のカラム名は、「Done」にしており、変更はしておりません。

→ここで間違いに気づきました。
ステータスの種類をチェックボックスからステータスに変更しておりました。
そのためチェックボックスに戻したら連携できました。

何度も申し訳ございませんでした。
ちなみにNotionのステータスの種類をチェックボックスからステータス(未着手、完了)で連携することは難しいですか?

namiki_inamiki_i

質問1について
エラーが発生している部分は、おそらく googleTaskManager内のcheckStatusGoogleTaskPriority(props,task,pageId)でエラーが発生しています.
エラーメッセージにDone is expected to be statusと書いてあるのですが、notion側のカラム名にstatusという名前のチェックボックスはありませんか?

おそらく、main.gs の"doneStatusProp"パラメータが"Done"になっているままなのに、notion側のカラム名が"status"となっているためかなと思ったのですが、ご確認お願いします.

namiki_inamiki_i

チェックボックスからステータス(未着手、完了)

結論から申し上げますと、できます.
ただし、コードを修正する必要があります.
まずはじめに、完了ステータスの情報はをnotion.gs内において、properties[this.notesProp] に格納しております.

  • パターン1:statusを使う場合

現在は、
properties[this.doneStatusProp] = {type: "checkbox", checkbox: task.completedBoolean}
となっている通り、notionのデータの中でtype = "checkbox"を使用していますが、ここをtype = "status"

https://developers.notion.com/reference/property-object

checkboxの場合はTrue or Falseのブール値を使うので、
notion.gsのnotionTaskManager関数の
const notionCheckbox = props[this.doneStatusProp].checkboxでnotionChecboxにブール値を代入して if(notionCheckbox)のような形で条件分布を作っています.

statusを使う場合は、ブール値ではなく、例えば'name'のstring値を使って
↓疑似コード
if(statusのname == "未着手") みたいな書き方に変更することで対応できます.

  • パターン2: formulaのチェックボックスを使う場合
    また、notionのformula機能を利用して、新たにデータベースにformulaカラムでチェックボックスを作り、status = 完了のときに自動的にformulaカラムのチェックボックスが☑になるように事前設定し、
    type = 'formula'で2番目の画像のboolean値をnotionCheckboxに代入することで、パターン1よりは修正するコードは少なく実現できます.
    https://topview.jp/t6319832490ed2-5905

どちらにしてもnotionのAPIでデータを取得するための書き方のお作法をnotionの公式ページなどで確認しながら実装する必要があります.
https://developers.notion.com/reference/property-object

ただ、notionAPIのお作法に慣れれば、比較的サクッと実現できると思います.
(イメージとしては、データの受け渡しの書き方が間違っているためにエラーが発生して、自分で調べながら解決するのを何回か試行錯誤する感じです.)

haruharu

ご丁寧にご返信ありがとうございました。
おかげさまでエラーは解決いたしました。本当にありがとうございました。

最後のご質問部分についても範囲外にもかかわらず教えていただきありがとうございました。
fomulaの方で自動チェックをつけるところまではできましたが、その後がどこをどう変えればいいのかわからない部分もあったため諦めようと思います、、

akiumiakiumi

はじめまして。
Googleカレンダーでのタスク管理からNotionでタスク管理を始めました。その際にこの情報を見つけて、活用をはじめさせていただきました。とても素晴らしい情報に感謝申し上げます。

1点質問です。ノーションで1か月以上先のタスクを入れると、GoogleカレンダーTODOリストに反映されない気がします。これを解消する方法はありますでしょうか?

コードは全くの素人ですが、実装コードで「daysForSearch:31日分を検索する」という指示を出されていて、これを変更すれば任意の日数で1か月以上先まで検索がかかるのでしょうか?

可能であれば、1年先くらいまで相互連携できると助かるのですが、ご教授いただければ幸いです。

namiki_inamiki_i

コメントいただきありがとうございます.

akiumiさんのご認識の通りです!
daysForSearchの日数を拡大すれば、反映対象にできる日数(対象の期間)が拡大します.

ただし、APIのデータ通信・処理の制限の注意点があります.

・詳細
期間が増えれば増えるほどタスクの量増えている場合、「対象の期間」を広げると、notion側・Googleタスク側それぞれについて、調べないといけないタスク量が増えることになります.

探索するタスク量が増えるということは、毎回の'''NotionToGoogleTask()''' または'''GoogleTaskToNotion()'''実行時によりたくさんのデータ通信を処理をすることになります.

一般的にNotionや˝GoogleのAPIの無料版で可能なデータ通信量や処理量は制限があるので、「対象の期間」を1年に広げると、その制限に引っかかる可能性があります.

また、1回の処理量が多いので、反映時の動作が重い可能性もあります.

以上の点で私は、1ヶ月という期間に設定いたしました.

・まとめ
以上の点を注意(タスク量とAPIの通信・処理制限の調整)をしていただければ、理論上は1年後のタスクも相互連携できるはずです.

よろしくお願いいたします!

akiumiakiumi

ご丁寧にありがとうございます。

データ制限に問題が発生するのですね!
承知しました。

1年ではなく、半年や3カ月などで調整をしてみたいと思います。
とてもわかりやすい解説助かりました!

yumeyume

はじめまして。
拝見させていただきまして、 テスト動作等はうまくいったのですが、
googleタスクからnotionにデータを渡す際に
カラムKanban StatusとPriorityにデフォルトの値としてそれぞれ持たせたいのですが、うまくできず
完了ステータスにて
Fill in the url in the blank NOTES :undefined
と表示されます…
なにかいい方法はないでしょうか…
どこをこう変える等あればご協力をお願いしたいです…

yumeyume

カラムを追加しそこにデフォルト値を埋め込むイメージです。
notion→googleタスクはいじっていないので、連携できました!

namiki_inamiki_i

コメントありがとうございます.

notionにしかないカラム情報でデフォルト値で埋めたいということですね.

notionの新規ページを作成する関数は、notion.gsのcreateNotionPage(task)です.

createNotionPage(task)のpropertiesの情報でnotionページが新規作成されるので、このpropertiesにデフォルト値を追加すれば、ご要望の仕様を実現できると思います.

propertiesに値を追加する際に、カラムの種類(テキスト、チェックボックス、マルチセレクト、etc)によって実装方法が異なるので注意が必要です.

yumeyume

Javascriptどころかプログラミングもそんなにしたことないけどできました!!
ありがとうございます!わかりやすくて神過ぎました

RyotaroMRyotaroM

はじめまして。
Googletodoでタスク管理しており、その際にこのページにたどり着き、活用させていただいております。
感謝申し上げます。

この1,2か月快適に稼働していたのですが
昨日より
下記のエラーが出現し
NotionからTodoへの反映ができなくなりました。

コードは素人でしてどこをさわればよいかわからず
解決策をご教示いただけませんでしょうか?

お手数をおおかけいたします
何卒よろしくお願い申し上げます