apple watchからnotionにメモする

## iPhone TODOアプリからNotionへの移行
あくまで個人利用ですが、最近[ゆるコンピュータ科学ラジオのデータベース回](https://youtu.be/_O27bsV0IVk?si=ZUc2wtJ06dTQ_NsK)を聞いてnotionを使い始めました。

とても便利なので、今までiphoneのTODOアプリで行っていた個人のTODOをnotionに移行したい。課題はapple watchからの音声入力。ということで、notionのAPIを利用してapple watchからShortcutアプリを使ってNotionのデータベースにページを追加できるようにしてみました。
<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/332a6cce-648f-a2f7-c93f-39bc472ff5df.png">



## 参考記事
[Notion API連携！Apple Watchから音声入力でNotionにメモをとる](https://note.com/mamizo/n/ne06fbd1cd2e1)
notion APIの設定こちらの記事を参考に設定しました。
こちらのページではGmailとZapperを使用して実現していますが、今回はこれら２つは使用しません。

[【Notion API】 iPhoneから音声入力でNotionにメモ](https://note.com/m_cre/n/n677310ce3a93)

## 1. Notion APIの設定
NotionのデータベースにAPIを利用してpageを追加できるようにします。
### integrationの追加
ブラウザでNotionにログインした状態で https://developers.notion.com にアクセスします。
右上の```View my integrations```をクリック。
<img width="700px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/2070a8db-8185-a4ea-2f9c-9d20a2fbe462.png">
```新しいインテグレーション```をクリック。
<img width="700px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/d51ea1b2-40f4-2e98-cfd9-892c5d657209.png">

Apple Watchから追加したいTODOリストのあるワークスペースを選択し、名前はわかりやすいものを。画像のアップロードはしなくてもOK。```送信```をクリック。
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/08139923-7bcd-7821-abef-19e4b0e92bf9.png">

内部インテグレーションシークレットをコピーします。ここで作成したインテグレーションシークレットは後ほど、Shortcutの設定に使用します。
コピーした後に```更新```を押しちゃうと、コピーしたインテグレーションシークレットは無効になるので注意。インテグレーションシークレットは公開しないように注意が必要です。
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/cfccbbfd-a2d3-ce81-ebec-2f04b0962fed.png">

### TODOデータベースに連携の追加
TODOデータベースに対して、API経由のデータの更新などを許可するための設定を行います。
新規ページを作成し、新しいデータベースを作成します。
database inlineで作成した場合は、フルページで開いて次の手順です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/989a774a-10ce-44ce-24e5-2ae7b2a26c2e.png)


出来上がったDatabaseの名前は自由に変えてOKです。今回はFrom apple watchとしました。
デフォルトで追加されたプロパティの名前を[TODO]と[Origin]に変更します。
__（デフォルトのままだと、後でAPIからプロパティの設定でうまくいきませんでした。）__

<img width="700px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/5b983087-37f3-4fe7-df77-cc92bc1a8c78.png">
データベースページの右上```・・・```をクリックし、```+ Add connections```の中から先ほど作成したintegrationを選択します。
確認画面が出るので、確認して承認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/99f96648-96fd-f89e-a282-2329c9d7c990.png">


### database(page) idの取得
Notion APIではページを追加するdatabeseのIDが必要です。

TODOデータベースpageのIDを取得します。
作成したdatabaseページの```・・・```→```Copy link```を選択し、ページのリンクを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/ed155ecf-6080-ec00-7efd-031596af7d40.png)
貼り付けるとこのような形式のurlが得られるので、```?v=```の前の32桁の文字列がdatabase(page) IDです。このdatabase IDも後ほどショートカットの設定に使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222220/f690f544-adc6-2ac3-a1c1-b5b3189f5b12.png)


これでNotion側の設定は終了です。




## 2.Shortcutアプリの設定
iOSのショートカットアプリではhttpのpushを実行できるので、直接notionのAPIを呼び出し、データベースにページを追加します。
### 変数の外部保存
Notion APIの呼び出しには先ほど取得したintegretion keyとdatabase(page) IDを使用します。ショートカットの変数として直接記入してもいいですが、間違って公開すると困るので外部に記録します。
ショートカットアプリでは環境変数は使用できないので、メモアプリを使ってkeyとIDを外部に保存しました。
メモアプリで
```notion database id[databaseのID（32桁の文字列)]```
(スペースの有無に注意）
というメモと
```notion api integration keyBearer [secret_から始まるintegration key]```
(スペースの有無に注意）
というメモを作成します。


### database idとintegration keyを生成するショートカットの作成
#### メモアプリからdatabase IDを取得するショートカット
https://www.icloud.com/shortcuts/4d7029d110e54ac38c2592cc8d73b74a
#### メモアプリからintegration keyを取得するショートカット
https://www.icloud.com/shortcuts/d8f73347d4bd4e00b7bc558dcd860e6e

### databaseの追加を行うショートカットの作成
今回のショートカットは、Apple Watchからの入力を想定しているので音声入力でTODOを作成します。一方、同じショートカットを使ってiPhoneからTODOを作成したい場合で、音声入力が憚られる場面でも使用できるように、
```音声入力を要求```→```音声入力がなかった場合はテキストでの入力を求める```という内容になっています。

https://www.icloud.com/shortcuts/0f48a16388c3477489ad9609c229656c

以上３つのショートカットをiPhoneのショートカットアプリに追加します。


３つ目のショートカットについてはapple watchでも表示できるようになっているので、apple watchのショートカットから実行できます。

## 今後
TODOに登録したときもあったり、jurnalに登録したいときもあったりと、シチュエーションごとに登録したいデータベースが違うので、今後は分岐を使って、いくつかのdatabaseに登録し分けれるようにしたいと思っています。