ショートカットアプリによる iPad、iPhone からの Notion タスク & カレンダー登録 : Notion 解説(42)

(1/15 追記) ショートカットはこの記事の下の方で配布しています。使いたいだけの人はインストール方法に飛んでください。

はじめに

1/8 に Automator を使った Notion タスク & カレンダー登録の記事を書きました。これまでも Automator でアプリを作ってきましたが、Apple はショートカットの方に舵を切っており、Automator はメンテしない方向とのことです。

hkob.hatenablog.com

ショートカットに切り替えることで、iPad や iPhone でも使えるようになると嬉しいのではと思い、いろいろと調査してみました。以下のことがわかりました。

  • Automator でできていたことは、ショートカットでもほとんど実現可能
  • ただし、メインで利用していた JavaScript for Automator は macOS では使えるが、iPadOS や iOS では利用できない

ということで、上で使っていた文字列の構文解析などの複雑なことは iPadOS や iOS では難しくなります。そこで、選択画面を一枚用意し、日付なし、日付のみ、開始時間のみ、開始・終了時間全てを選ぶようにしてみます。

その後、アプリを作り上げていくと、さらに以下のことが判明しました。

  • macOS のショートカットアプリでは、今のところ Google Calendar には登録できない。

このため、Notion タスクの登録はできますが、macOS の場合にはカレンダー機能だけ潰してあります。カレンダーも同時登録したい人は、Automator 版の notion-quick-action をお使いください。

github.com

ショートカットの作成

ここからショートカットを作っていきます。量が多いので、iPad ではなく macOS で作ります。ショートカットは iCloud で同期するので、iPad でも同時に確認をすることができます。

ショートカットの詳細設定

ショートカットアプリから「新規」で新しいショートカットを作ります。一番最初に右側の「ショートカットの詳細」を選び、以下のように設定を行います。

  • クイックアクションとして使用: macOS でアプリからテキストを取得したいので、チェックを入れます。
  • サービスメニュー: サービスメニューに表示したいのでチェックを入れます。
  • 次で実行: QuickAction の時に作った Opt-Cmd-N はここでは登録できなかったので、Shift も追加して Shift-Opt-Cmd-N にしてみました。後で別のキーにするかもしれません。
  • 共有シートに表示: iPhone および iPad の時には共有メニューでテキストを送りたいのでチェックを入れます。

f:id:hkob:20220113150548p:plain
ショートカットの詳細

テキストの取得

アプリをブロックごとに説明していきます。まず、最初のテキスト取り込みです。アプリの一番上はこんな感じになっています。なお、ショートカットの名前は「AddNotionTaskAndCalendarEvent」としてみました(一番上に表示されています)。先ほどの詳細の設定により、共有シート、クイックアクションからテキストが取得できるようになっています。テキストが選択されずにショートカットが呼ばれた場合には、入力を要求します。取得したテキストは後で参照できるように変数inputに設定しておきます。

f:id:hkob:20220113151111p:plain
テキストの取得

Notion API token の設定と Authorization ヘッダの作成

Notion API token は API アクセス時の Authorization ヘッダとして使われます。この token は後でユーザが設定できるようにテキストにしておきます。最初にテキストを設定し、token の値を記述しておきます。その後、「テキストを結合」で Bearer という文字列と結合します。そのままだとテキストだけ残ってしまうので、一度 Clear して「Bearer」の文字列を記述すると「+」マークがでて、変数を追加することができます。上のテキストを選択した状態でこのテキストを「notion_api_token」という名前にしておきます。こうやって一度参照すると、テキストに名前をつけることができるようです。この後作る 3 つの変数も同様に一度変数に代入するなどして、テキストに名前をつけることにします。

f:id:hkob:20220113183920p:plain
notion_api_token と Authorization 変数の設定

残り5つの変数設定

notion_api_token と同様に database_id、task_name, task_date, calendar_name そして open_by_app という5つのテキストを準備します。それぞれの意味は以下の通りです。

  • database_id: タスクを登録するデータベースの ID です。
  • task_name: タスクデータベースのタイトル名です。私は「タスク名」にしています。
  • task_date: タスクデータベースの日付プロパティ名です。私は「日付」にしています。
  • calendar_name: Notion タスク作成と同時に登録するカレンダー名を設定します。この変数に none を記述した場合には、カレンダーに登録しません。
  • open_by_app 登録後のページを Notion.app で開く場合に yes にします。

名前は設定していますが、見た目は全部テキストなのでわかりにくいですね。

f:id:hkob:20220113214525p:plain
5つのテキスト

なお、マジック変数を選択する画面になると、それぞれのテキスト(定数)につけた名前はこんな感じで確認できます。

f:id:hkob:20220115064626p:plain
定数名の確認

設定のカスタマイズ

今設定した 6 つのテキストは、ショートカット配布時にユーザに変更してもらいたいものです。ショートカットアプリでは「読み込むための質問」として、これらをインストール時にユーザがカスタマイズできる仕組みが用意されています。右側の詳細を設定した画面で「設定」タブを開くとこんな画面になります。すでにここでは 6 つのテキストを設定済です。

f:id:hkob:20220113210724p:plain
ショートカットの設定

6 つのテキストはこんな感じで入力を促すようになっています。open_by_app は yes / no を聞く質問なので、yes をデフォルトで入れておきました。yes 以外のものが入ったら no にすることにします。

f:id:hkob:20220113194415p:plainf:id:hkob:20220113194435p:plainf:id:hkob:20220113210804p:plain
前半の3つ
f:id:hkob:20220113210830p:plainf:id:hkob:20220113194454p:plainf:id:hkob:20220113194513p:plain
後半の3つ

カレンダー名変数の追加

カレンダー登録は条件分岐の外側に書き出すことにしました。このため、日付なしの場合にはカレンダー書き出しをしないため、更新するカレンダー名を変数にすることで対応することにしました。名前が同じだと間違えやすいので、update_calendar_name という名前にしています。

f:id:hkob:20220114043537p:plain
update_calendar_name 変数の導入

日付オプションの選択画面

前述の通り、ショートカットでは文字列を構文解析することは難しいです。そこで、日付のフォーマットをあらかじめ選択するようにします。ここでは、以下の 5 種類を選択できるようにしました。

  • No date: 日付なし
  • Only start date: 開始日付のみ
  • Date with start time: 開始時刻のみ
  • Date with start and end time: 開始時刻と終了時刻
  • Start date and end date: 開始日と終了日 (私は使わないけど欲しい人はいそうなので追加しました)

以下、これらの選択肢ごとに処理を記述します。 なお、文字列が正しく選択されたか不安なので、ダイアログに選択したテキストも表示するようにしました。

f:id:hkob:20220113201007p:plain
日付オプション選択画面

No date の場合

日付なしの場合は、テキストを Notion のタスクに登録するだけです。Automator では外部の curl コマンドを呼んでいましたが、ショートカットから「URL の内容を取得」で API 呼び出しを実行します。JSON を設定するのがかなり面倒でした。返ってきた response_nodate は response 変数に登録しておきます。また、カレンダーを登録しないので、update_calendar_name を none に設定しておきます。

f:id:hkob:20220115064444p:plain
No date

試しにここまでで実行してみます。適当なテキストを書いて、「Cmd-Option-Shift-N」を押してみます。以下のようなダイアログが表示されます。選択したメッセージも正しく表示されているようです。

f:id:hkob:20220113201151p:plain
日付オプション選択ダイアログ

外部にアクセスするので、プライバシーダイアログが表示されました。常に許可にしてみます。

f:id:hkob:20220113201327p:plain
プライバシーダイアログ

Notion を開いてみると、このように正しく「日付なしイベント」というタスクが生成されていました。他のオプションを設定する前に、このページを自動的に開くように処理を追加してみます。

f:id:hkob:20220113202245p:plain
作成されたページ

ページを開く処理を追加

ページを開く処理をメニューの終了の後ろに追加します。 返ってきた response_nodate から url を取得して、url 変数に入れておきます。また、カレンダーを登録しないので、update_calendar_name を none に設定しておきます。

open_by_app 変数に設定した内容が yes の場合には、Notion.app で開くようにします。url スキームを https:// から notion:// に変更することで、アプリケーションで開くようになります。

f:id:hkob:20220114122306p:plain
ページを開く処理

ここまでの状態でショートカットキーをクリックしてみたところ、notion のサイトで開くことを確認するプライバシーダイアログが出てきました。

f:id:hkob:20220113204232p:plain
プライバシー

許可すると、以下のように Notion アプリでページが開かれました。

f:id:hkob:20220113211622p:plain
Notion アプリでの表示

open_by_app のところを no にしたところ、正しくブラウザで開かれました。

f:id:hkob:20220113212422p:plain
ブラウザでの表示

Only start date の場合

うまく動いているようなので、残りのオプションを作成します。長くなりそうなので、似たような部分は省略し、さらに二段で表示しました。左側では日付の入力および変数の準備をしています。まず、開始日付のみの場合には、日付の入力を促し、start と end 変数に登録しておきます。今回は時刻がないので、all_day 変数に true を入れておきます。また、この日付を ISO8601 に変換した文字列を only_start_date_start_str 変数に登録します。 この変換した文字列を「内容を取得」の JSON に追加しています。長くなるので、該当部分のみ展開してみました。

f:id:hkob:20220114055354p:plainf:id:hkob:20220114122612p:plain
Only start date

カレンダーの登録

ここで、カレンダー登録でトラブりました。iPadOS ではうまく動作するのですが、macOS だと Google カレンダーに登録時にエラーになります。どうも macOS だと iCloud カレンダーにしか登録できないバグがあるようです。仕方がないので、OS を判定して macOS の場合にはカレンダーを登録しないようにしました。

処理部分は以下のようになりました。左側が大きな流れです。先ほどのページ表示の前に追加しました。カレンダー機能を使わない場合や、日付なしイベントの時には update_calendar_name を none にしています。それ以外の場合にはカレンダー登録を行います。ただし、OS をチェックし、macOS の場合には何もしないようにしています。

右側はカレンダー登録部分を詳細も含めて表示したものになります。 all_day が true の時だけ終日のチェックボックスをつけ、通知を切っています。その他は同じです。イベントの詳細部分は1行目にタスクページの id をそのまま、2行目に id: という接頭子を付けたものになっています。私の GAS プログラムは最終行に id: で始まる行があるかどうかをチェックしているため、2 行目を入れています。この辺は個人の環境に合わせて修正してください。また、それぞれの一番下にある「作成シートを表示」のチェックを入れておくと、カレンダー登録の画面を表示できます。ここで細かいことを記述したいと思う人はチェックを入れるといいです。

f:id:hkob:20220114122903p:plainf:id:hkob:20220114103603p:plain
カレンダー登録処理

https://twitter.com/hkob/status/1481625867969507337?s=20 ここまでの状況を iPad でテストした結果はこちらです。途中報告を Tweet してみました。JXA ならいけると思ったのですが、結局ダメでした。

Date with start time の場合

あとは同じパターンで Notion 登録部分を作るだけです。Date with start time の場合には、日付と時刻を要求する点と、ISO 8601 への変換時に時刻を含めるにチェックを入れただけです。

f:id:hkob:20220114123314p:plain
Date with start time

Date with start and end time の場合

開始と終了がある場合も同様です。ちょっと意識したのは、終了時刻の初期値を設定した開始時刻に設定した点です。

f:id:hkob:20220114142255p:plain
Date with start and end time

Start date and end date

開始日と終了日の場合は上のもののほぼ同様です。違うのは、時刻情報を含めない点と all_day を true に設定していることだけです。

f:id:hkob:20220114142355p:plain
Start date and end date

インストール方法

ここから、ショートカットを取得します。

www.icloud.com

Safari で開くと、ショートカットを入手という画面になります。画面上部で「ショートカット」アプリで開くよう促されるので、「開く」をクリックします。すると、右のような画面になります。ここでショートカットを設定とすると、上で設定した 6 つの項目を個別に設定できるようになっています。

f:id:hkob:20220114142748p:plainf:id:hkob:20220114142818p:plain
ショートカットの入手

最初の3つの設定は以下の通りです。

  • Notion API token: Notion のインテグレーション画面からコピーして登録してください。secret_ で始まる文字列です。
  • Database ID: 登録するタスクデータベースの URL のうち、?v=の前にある32桁の16進数を入力します。
  • タスク名: タスクデータベースのタイトルの属性名です。デフォルトで「タスク名」になっています。異なる場合には消して直してください。

  • f:id:hkob:20220114142856p:plainf:id:hkob:20220114142957p:plainf:id:hkob:20220114143030p:plain
    最初の3つの設定

残りの3つの属性も設定します。 - 日付プロパティ名: タスクデータベースの日付属性の名前です。デフォルトで「日付」になっています。これも異なる場合には書き換えてください。 - カレンダー名: もしカレンダーにもタスクイベントを登録する場合には、Notion 用のカレンダー名を記述してください。デフォルトは「none」になっているので、登録しません。 - ページを Notion で開くかどうか?: 作成したタスクページを Notion のアプリで開きたい時には、yes のままにしてください。もしブラウザで開きたい時には、no など yes 以外の文字に設定してください。

f:id:hkob:20220114143053p:plainf:id:hkob:20220114143117p:plainf:id:hkob:20220114143143p:plain
残りの3つの設定

以上で設定は終わりです。

ショートカットの使い方

任意のアプリでタスク名にしたい文字列を選択し、「共有...」をクリックします。すると、右のような共有メニューが出るので、「AddNotionTaskAndCalendarEvent」をクリックしてください。

f:id:hkob:20220114143216p:plainf:id:hkob:20220114143241p:plain
テキストの選択とショートカットの実行

日付オプションの選択画面が出るので、「日付なし」「開始日」「開始日と時間」「開始時間と終了時間」「開始日と終了日」の中から選択します。必要に応じて日付を設定すると タスクおよびカレンダーが設定され、作成した Notion タスクページが表示されます。

f:id:hkob:20220114143329p:plainf:id:hkob:20220114143357p:plain
日付オプション選択と日付の設定

f:id:hkob:20220115070151g:plain
iPhone での動作画面

終わりに

結局、macOS では完全機能は実現できませんでしたが、iPad や iPhone で動くものが作成できました。ショートカットはいろいろ面白いことができそうです。仲間内でうまく動くことが確認できたら、一般公開したいと思います。 ← 公開しました。


hkob.notion.site