Site cover image

@recording117’s blog

@recording117のastro-notion-blogです。

📱 iPhoneショートカットからnotion への記録

💡
I set up the shortcut feature when I got a new iPhone. I will introduce it here as a reminder.

新しいiPhoneにしたタイミングでショートカット機能を設定しました。備忘録を兼ねて紹介します。

※前置きが長いので,ショートカットの部分だけ読みたいという方はこちらから。

新しいiPhoneを買った

久しぶりに携帯を新しくしました。これまではiPhone XRという現在では誰も使っていないような機種を8年くらい使っていました。

たぶん,携帯を買い替えるスパンは2~4年くらいが平均なんじゃないかと思います。8年も同じ機種を使っている人はおそらく稀です。

しかし,最近になって電池の劣化,OSアップデートに伴う容量の減少が目立ってきたため,重い腰を上げて機種変更することにしました。

Androidも検討しましたが,使い慣れたOSから離れられず,結局iPhone16eを購入しました。

データの整理をする

iPhoneからiPhoneへの機種変更の場合,データの移行がとてもスムーズです。2つのiPhoneを近くに置いて数分間で,データが完全に移行されていました。

複数のapple IDを使い分けている場合は,アプリのインストール履歴がそれぞれのIDに紐づいているようでした。それぞれのIDでログインする必要があるみたいです。

ずっと昔のapple IDが最新機種に表示されたときは,


「こんなIDそういえば使ってたなぁ」

という懐かしい気持ちに浸ることができます。

以前使っていた機種のデータを新しい機種に移行しても構わないのですが,GWということで比較的時間もあったので,これを機会にデータの断捨離をすることにしました。

ショートカットの存在に気づく

データやアプリの整理をしていると,「ショートカット」というアプリの存在に気づきました。

全くショートカットを使ったことがないわけではありませんでしたが,

これまでのショートカットの使用歴は,

  • ホーム画面のアイコンをカスタマイズするために,ショートカットでアプリを開く機能
  • notionにページを追加する機能

…これくらいです。

1つ目に至っては,ショートカットというよりも見た目のカスタマイズが目的。アプリを開くたびにポップアップの表示が出てむしろ動作が遅くなるというもの。ショートカットと言えるのだろうか…。

2つ目のnotionにページを追加する機能は,自分で作成したものではなく,テンプレートとして配付しているものにちょっとだけ設定を加えたものです。

「標準で用意されているものはあまり使わないし,自分で作成しようにも,ちょっとハードルが高いからな…」

という気持ちがありました。

しかし,そんな気持ちを払拭してくれたのが,iPhone16eに搭載されている1つのボタンの存在でした。

1つの小さなボタン

iPhoneのいくつかのモデルには「アクションボタン」が搭載されています。このアクションボタンは,消音モードへの切り替えなど,頻繁に使う操作を登録しておくことができ,スムーズな操作が実現できます。

https://support.apple.com/ja-jp/guide/iphone/iphe89d61d66/ios

このボタンにショートカットを割り当てれば,かなり便利になるのではないか。早速,どのようなショートカットを割り当てるか考えたところ,1つの機能が思いつきました。

それは,

💡
notionの学習ログにページ追加,更新を行うショートカット

です!

学習ログ

学習ログとは,その名の通り,学習時間を記録するもの。私は学習用途で使っているので,「学習ログ」と呼んでいますが,行動記録全般に使用することができる仕様です。

作業内容とその作業にかけた時間を記録するものです。元々は,中学生の頃から「学習記録」という名前で,Excelで作ったプリントで実践していました。

現在は,いくつかの書籍やメディア,他の人の実践からの着想を得て運用しています。

参考になるものをいくつか掲載しておきます。

参考

これまでの学習ログ

これまでの学習ログの記録の仕方は,

  1. notionをいずれかのデバイス(iPhone,iPad,Windows)で開く
  2. 学習ログのデータベースを開く
  3. 学習項目を入力する
  4. 開始ボタンを押す

という流れでした。学習を終了するときは,終了ボタンを押すと,終了時刻が入力されてステータスが進行中から完了に変更されます。

当たり前といえば当たり前です。ノートに記入するために,まずはノートを開かなければならないのと同じです。

しかし,notion上級者は,notionを開くことなく記録をするのです。

※余談ですが,学習ログのデータベースには
  • 数式を使って開始時刻と終了時刻の差を割り出し,学習時間を計算するプロパティの設定
  • 学習を1つのプロジェクトとして捉え,プロジェクトDBとリレーションさせる

などの工夫をしています。

notionを開かずにnotionを使う

果たして,そんなことができるのでしょうか。iPhoneのショートカットを使えばできます。

実は,iPhoneのショートカット以外にも同じようなことができる機能はいくつかあります。例えば,Macユーザーであれば「Alfred」というアプリを使用すれば,notionにサクッとメモを取ることができます。

他にも私の知らない機能がたくさんあるでしょう。ここからは設定方法について解説します。
(前置きが長くなりました。いよいよ本題です。)

いろいろ取得

まずは設定に必要なtokenなどを取得しなければなりません。

シークレットトークンの取得
  1. インテグレーションページにアクセスします。
  2. 「新しいインテグレーション」をクリックします。
  3. インテグレーションの名前など,基本情報を入力し,送信をします。
  4. シークレットというセクションにある「トークン」をコピーします。

ここで取得した「トークン」はショートカットの作成に必要です。どこかに貼り付けておきましょう。他の人に見られないように注意してください。

データベースIDとページIDの取得
  1. ページを追加したいデータベースをnotionで開きます。こちらをinboxDBと表記します。
  2. 右上のメニュー(⋯)から,「接続」を選択し,先ほど作成したインテグレーションを選択します。
  3. インテグレーションの,ページへのアクセスを許可します。
  4. 再びinboxDBのメニューから「リンクをコピー」を選択します。
  5. 適当なところに貼り付けると,URLが表示されます。

https://www.notion.so/ワークスペース名/<データベースID>?文字列

のような形式で表示されるので,データベースIDの部分をメモしておきます。

こちらも,どこかに貼り付けておきましょう。

  1. inboxDBとリレーションしているデータベースを開きます。こちらをprojectDBと表記します。
  2. projectDBから現在進行中のプロジェクトページを開きます。
  3. あとは2~5の手順と同じです。複数のプロジェクトが進行中である場合,どのIDがどのプロジェクトページのIDかわからなくならないようにしましょう。

iPhoneショートカット側の設定

ここからはiPhoneで操作します。Macユーザーの方は,icloudショートカットであれば同期されるみたいなので,PCで作業したほうがやりやすいと思います。私はiPhoneで作成したので,iPhoneの操作方法を記載します。

  1. アプリからショートカットを開き,右上の+から新規ショートカットを作成します。
  2. 先ほど取得したシークレットトークンを変数token に設定します。
    • 変数を設定するときは,「テキスト」というブロックにシークレットトークンをコピペし,その下に「変数の設定」ブロックを置きます。
  3. 同様に,データベースIDを変数database_idに設定します。
  4. 認証に使うための変数authorizationを準備します。
    • Bearer tokenという形式らしいので,テキストの結合を使います。空白で結合することに注意です。
    • 現在の日付をdatetimeに設定します。日付の形式はISO 8601にするそうです。日付だけでなく時刻も含めておきましょう。

ややこしくなってきたので,一度整理します。

変数名 設定内容
token インテグレーションの作成時に取得したシークレットトークン
database_id inboxDBから取得したリンクに含まれるID
authorization Bearer + token(空白で結合)
datetime 現在の日付。時刻を含む。ISO 8601形式。

  1. inboxDBとプロジェクトDBのリレーションをするために,どのページとリレーションするかを選択するメニューを表示させます。
    • ショートカットの「スクリプティング」→「制御フロー」→「メニューから選択」
    • 現在進行中のプロジェクトのメニューを選択肢に追加
    • プロジェクトに紐づかないログを想定し,空白の選択肢も1つ準備

  1. プロジェクト名とプロジェクトのページIDを紐づけます。
  • ショートカットのテキストにページIDを記入
  • 変数project_IDにページを設定
  • これをプロジェクトの数だけ繰り返す。

※進行中のプロジェクトが増えた場合,idの取得とメニューへの追加を行わないといけません。この操作をなくすためには,ステータスが「進行中」になっているプロジェクトをfilterで抽出し,JSON形式で得たページ情報からpage_idをメニューに追加すれば実現できそうです。
しかし,JSON形式に慣れていない人は,上記の方法のほうが設定しやすいと思います。

プロジェクトの数が多い,頻繁にプロジェクトが変わる場合は,検討の余地ありです。

  1. ショートカットの「スクリプティング」→「入力を要求」を追加する。
  • 「テキスト」を要求
  • 「複数行を許可」

  1. ショートカットの「Web」→「Webリクエスト」から「URLの内容を取得」を追加する。
  • URLには「https://api.notion.com/v1/pages」を指定
  • 方法は「POST」
  • ヘッダには以下の3つを入力
Content-Type application/json
Notion-Version 2022-06-28
Authorization authorization
  • 本文を要求 には以下を入力
{
  "parent": {
    "database_id": "database_id"
  },
  "properties": {
    "名前": {
      "title": [
        {
          "text": {
            "content": "入力を要求"
          }
        }
      ]
    },
    "実行日時": {
      "date": {
        "start": "datetime",
        "end": "datetime"
      }
    },
    "ステータス": {
      "status": {
        "name": "進行中"
      }
    },
    "プロジェクトDB": {
      "relation": [
        {
          "id": "project_ID"
        }
      ]
    }
  }
}

JSON形式で表現するとこのようになります。{ }で囲まれているところが辞書型で,[ ]で囲まれているところは配列になるはずです。実行日時のstartとendにはどちらも現在時刻のdatetimeが入力されています。endを省略することも可能ですが,学習ログには終了時刻もあったよいので,ひとまず開始時刻を入力しています。

これで完成です!あとは,iPhoneのアクションボタンにショートカットを割り当てたり,ロック画面に配置したりして,使いやすいように設定しましょう。

補足 終了時刻の入力

お気づきの方もいらっしゃると思いますが,このショートカットだけでは,終了時刻を入力することができません。そこで,ほとんど同じような仕組みを使って終了時刻を入力するショートカットも作成しました。

  1. 現在時刻の取得→これが終了時刻になる。
  2. inboxDBのIDの取得
  3. シークレットトークンの取得
  4. authorizationの設定

ここまでは先程と全く同じです。

  1. 「URLの内容を取得」をするときに,「https://api.notion.com/v1/databases/database_id/query」を指定します。
  • 方法は「POST」を選択
  • ヘッダは上記と同じ
  • 「本文を要求」は以下を入力
{
  "filter": {
    "property": "ステータス",
    "status": {
      "equals": "進行中"
    }
  }
}

つまり,ステータスプロパティが「進行中」のページ情報を抽出しています。

  1. 開始日時を取得(ここがやっかい)
  • URLの内容を取得すると,「results」という名前でページの情報が得られます。
  • そこに含まれる
  • 「最初の項目」
    • 「properties」の値
      • 「実行日時」の値
        • 「date」の値
          • 「start」の値

と階層を潜っていき,学習開始の時刻を取得して開始時刻に設定します。

なぜここで開始時刻を取得するのかというと,notion APIの仕様上,startとendの設定は同時に行わなければならないからです。そこで,すでに入力されている開始時刻を取得して,同じ値で上書きすると同時に,終了時刻を設定しています。

  1. 更新するページIDを取得
  • 6. で取得した「results」からidを取得して,page_id に設定
  • 「URLの内容を取得」で「https://api.notion.com/v1/pages/page_id」を入力
  • 方法は「PATCH」を選択します。ヘッダは上記と同じ。
  • 「本文を要求」は以下を入力
{
  "properties": {
    "実行日時": {
      "date": {
        "start": "開始時刻",
        "end": "終了時刻"
      }
    },
    "ステータス": {
      "status": {
        "name": "完了"
      }
    }
  }
}

以上をテストしてみて,正しく動けば完成です。エラーが出た場合,URLや変数の指定が間違っていないか,JSONに間違いがないかを疑うとよいでしょう。

inboxDBに,進行中のページが複数存在する場合,一番新しく追加されたページだけが編集されるようです。基本的に進行中のページは最大1つであることを想定しています。

たまに終了時刻の記録を忘れてしまうと,そのタスクはずっと進行中のままになってしまうので注意が必要です。

設定がわからなくなった場合は,notionAPIの公式リファレンスを参照するか,chatGPTなどの生成AIに頼ると,ヒントが得られるでしょう。私も生成AIの力を借りながら作成しました。

アクションボタンに割り当てられるショートカットは1つですので,これらのショートカットを1つにまとめました。具体的には,新たに「notionログ」というメニューの選択を行うショートカットを作成し,選択した結果によって実行するショートカットを分岐させるという方法です。これで快適に記録ができます。

ショートカットは奥が深い

今回始めて,本格的なショートカットの作成に取り組みました。わからないこともたくさんあり,かなり時間がかかってしまいました。ですが,使いこなせるようになれば様々な操作を自動化できるようになる,可能性を秘めた機能だと感じます。

アプリ側が標準で準備してくれているショートカットも盛り沢山なので,使ったことがないという方もぜひ一度開いてみてはいかがでしょうか。

最後までお読みいただき,ありがとうございました🙏