株式会社TEMPのロゴ画像

【2022年版】AlfredワークフローでNotion APIを実行する方法を徹底解説【ソースコード・テンプレート付き】

↗︎ Notion に登録する(無料)

みなさんこんにちは、Notion アンバサダーの円谷です。

今回は、僕が普段から愛用している、Alfred のワークフロー機能を使って Notion に素早くメモを取る方法を紹介したいと思います。

Alfred ワークフローを使って素早くタスクを追加しているようす

こんな感じで、Alfred というアプリを立ち上げて、メモしたい内容を入力することで、即座に Notion のデータベースに保存されるという仕組みを構築しています。Mac を立ち上げている状態で何かアイデアが思いついたときには、 Alfred はどんな別の作業をしていても、すぐに起動できる ので、どんな他の作業をしている状態でもすぐにメモを取ることができるようになっています。(わずか数秒でメモが完了します)

💁‍♀️ Alfred はランチャーアプリという種類の Mac アプリケーションです。デフォルトで入っている Spotlight の強化版みたいなイメージのアプリです。こちらのページからダウンロードすることができます。基本は無料で使用することができますが、ワークフロー機能を使うにはパワーパック(買い切り)を購入する必要があります。 https://www.alfredapp.com/

今回の記事では、僕が実際に運用している Alfred のワークフローの構築方法について解説していきます。記事を最後までお読み頂くことで、ご自身のパソコン上からでも Alfred 経由で Notion 上に素早くメモを取れる状態になると思います。

途中で Notion API やトークン、プログラミングなど、非エンジニアの方には少し馴染みのない内容も登場するかと思うのですが、なるべく丁寧に解説しようと思っています (不明点あれば Twitter の DM 頂ければお答えできると思うので、お気軽にご連絡ください)

また、記事の最後には僕が実際に運用している行動管理テンプレートのリンクも添付しておきます。テンプレートと組み合わせてお使いいただくと、今回紹介する Alfred のワークフローをさらに強力に使うことができると思うので、興味がある方は複製してみてください。

テンプレートの操作イメージはこんな感じです。

ツイートで紹介しているように、Alfred から 15分、30分、60分単位で Notion 上にタスクを作成できるというワークフローを構築しており、すぐ終わるタスクは15分で作成して、時間がある程度かかりそうなタスクは60分で作る、みたいな運用をしています。

それでは、NotionAPI の実行方法を具体的に解説していきます。

💡

今回の記事では Notion API という仕組みを使っています。Notion API は誰でも無料で使用可能で、使い方を知ればより自由に、自分だけのアプリケーションを作ることが可能です。Notion API について詳しく知りたいという方は、以下のリンクを参考にしてみてください。


事前準備①:Notion Integration の作成

https://developers.notion.com/  にアクセスし、画面右上の、My integrations をクリックします。

Notion API のページ

Integration 一覧画面が表示されます。画面ではもう既に Integration をいくつか作成してある状態になっているのですが、今回は、Alfred 用の 新しい Integration を作成するので、左側の New Integration ボタンをクリックします。

Integration 一覧画面

New Integration ボタンをクリックすると、情報入力画面が表示されます。Name には自分が識別しやすいような名前を入力しておいてください。今回は「Fast Notion Alfred」と入力しました。

関連ワークスペースには、メモの対象となるデータベースが存在するワークスペースを選択してください(いつもお使いいただいているもので OK です。)

その他の項目はデフォルトのままで構いません。入力が完了したら Submit をクリックします。

Submit を押すと、Integration の作成が完了します。これで Notion Integration の事前準備は完了です。Secrets というところに、 Internal Integration Token という項目が表示されます。この値はあとで Alfred のワークフロー構築の際に使用する ので、どこかにコピーして残しておくようにしてください

作成した Integration のページ

💁‍♀️ Secrets は、Notion の操作を可能にする権限を持つ大切な値です。 外部に漏れると、他者から Notion を操作されてしまう危険性があるため、慎重に取り扱うようにしてください。

事前準備②: Notion データベースの作成 / 権限の付与 / データベース ID の取得

つぎに、Alfred で投稿するデータベースを作成します。すでに投稿先のデータベースがある場合は、この作成のフローは飛ばしてもらって大丈夫です。

まずスラッシュコマンド  /  から、/database と入力し、データベース:インラインを選択します。

スラッシュコマンドから「データベース:インライン」を作成する

インラインのデータベースが作成されます。今回はテーブルに Fast Notion Alfred という名前を付けました。テーブルの右上の最大化ボタンをクリックして、テーブルのデータベースを開きます。

Fast Notion Alfred

新しく作成したデータベースのプロパティを「名前(タイトルプロパティ)」と「行動予定日(日付プロパティ)」に変更してください。それぞれ、後ほどの Alfred ワークフローのソースコードで使用します。

ここの名前が異なっていると、ソースコードが正常に動作しないのでご注意ください。

データベースに権限を付与する(共有ボタンをクリック)

さきほど作成したインテグレーションを選択して「招待」ボタンをクリック
権限が付与できた状態:さきほど作成した Fast Notion Alfred というインテグレーションが共有欄に追加されていれば成功

選択が完了し、無事権限が付与されました。Integration に権限を付与した場合には ⚡ マークで Integration と表示されます。


Alfred のワークフローを構築するためには、どのデータベースに送信するかを特定するための情報である、データベース ID が必要になります。データベース ID はデータベースの URL から取得することができます。データベースの左側に表示されているメニューアイコンをクリックします。

インラインデータベースのハンドルをクリックしてメニューを開く

メニューが表示されるので「リンクをコピー」を選択してください。

コピーされた URL から ID を抽出します。コピーすると URL の形式が

https://www.notion.so/[ご自身のワークスペース名]/AAA?BBB

となっているので、ここから AAA の部分のみを取り出します。

💁‍♀️ 今回で言うと、このような URL になっているので、ID は以下のように取り出します。

URL:   https://www.notion.so/35d/4e4f9e2ab1984ad2a94d56f821e7e4f1?v=ba194090ed3b4ec1a8df0b92b9f45a8c

データベース ID:  4e4f9e2ab1984ad2a94d56f821e7e4f1

これでデータベース ID の取得が完了しました。ここまでの準備① / ② で、「インテグレーショントークン」と「データベース ID」の2つの値が取得できていれば準備完了です。


Alfred でのワークフローの構築方法・ソースコード

Alfred の Powerpack を購入済みである前提で解説をしていきます。

つぎに、Alfred でのワークフローの構築方法について解説していきます。

Alfred の設定画面を開き、左側の Workflows というタブを選択します。いくつか既に僕が以前作成したワークフローが存在してしまっているのですが、新たに作成する場合は下の + ボタンを押下します。

Alfred の設定画面から新しいワークフローを作成する
  • ボタンを押して、Blank Workflow を選択します。
Blank Workflow を選択

新規作成ダイアログが表示されるので、情報を入力していきます。Name は好きな名前を入力してください。必須なのは Name だけなので、ひとまず他は空の状態で大丈夫です。入力が完了したら Create を選択してください。

💁‍♀️ ほかの Description や Bundle Id などは、Alfred のワークフローを外部に公開する際に必要になる情報です。今回は個人用として扱うので、特に入力する必要はありません。

ワークフロー作成画面

新しくワークフローの雛形ができたら、右上の [x] マークをクリックします。右側に、Workflow Environment Variables という項目があるので、ここに、さきほど後ほど使用すると説明した、トークンとデータベース ID の情報を入力します。

環境変数設定画面

右下の + ボタンから新規に項目を追加し、以下のような形式でそれぞれ入力してください(後ほど入力するソースコードでこの値を参照する作りになっています)

僕の場合は、以下のような値になっています。
DATABASE_ID: 4e4f9e2ab1984ad2a94d56f821e7e4f1

TOKEN: secret_yW1Nr1Zmr8RRj7BdmxZ10tDPjiPx7oG4qxYtCG5rBrZ

入力が完了し、以下のような表示になっていれば OK です。

入力完了した状態

つづけて、ワークフローを構築していきます。右クリックから、Inputs → Keyword を選択してください。

Inputs -> Keyword と選択

Alfred にどのようなキーワードを入力すると、今回作成したワークフローが起動するかを指定します。ここは入力しやすい文字列で良いので、お好みなのですが、今回は 30 分単位のタスクを入力するということで、30min とすることにしました(みなさんお好みでキーワードを付けてください)

また、with space にチェックを入れて、Argument Required の状態にしておきましょう。ここにチェックを入れておくことで、Notion にメモする文字列を Alfred 上に入力することができるようになります。

キーワード設定画面

Keyword のブロックが作成されました。Keyword が入力されたら、どのようなアクションを行わせるかの設定をしていきます。Keyword のブロックの右端をドラッグ・アンド・ドロップさせ、Actions → Run Script を選択します。

スクリプトの編集画面が表示されます。今回のソースコードは Ruby で書いたので、Language 部分から、/usr/bin/ruby を選択してください。

ここから若干プログラミングの知識が必要になってくるので、うまく動かない!という方は DM 等で質問ください🙏

スクリプト入力画面:ここにソースコードを入力していく

以下の Ruby で書かれたソースコードをコピペして入力してください。細かい説明は省略しますが、ユーザーが Alfred 経由で入力した文字列(メモしたい文字)を、Notion API のリクエストボディに詰めて、リクエストを送信する、みたいなことをしています。さきほど設定したトークンとデータベース ID は ENV で取得するようにしています。

また、この Alfred で作成したタスクの所要時間は 30 分で固定しています。

require "net/http"
require "uri"
require "json"
require "date"

MY_NOTION_TOKEN=ENV["TOKEN"]
DATABASE_ID=ENV["DATABASE_ID"]
TZ="+09:00"

def send_notion(title)
  t = DateTime.now
  s = t.strftime("%Y-%m-%d %H:%M:%S") + TZ
  e = (t + Rational(30, 24 * 60)).strftime("%Y-%m-%d %H:%M:%S") + TZ

  uri = URI.parse("https://api.notion.com/v1/pages")
  request = Net::HTTP::Post.new(uri)
  request.content_type = "application/json"
  request["Authorization"] = "Bearer #{MY_NOTION_TOKEN}"
  request["Notion-Version"] = "2021-05-13"
  request.body = JSON.dump({
    "parent" => {
      "database_id" => "#{DATABASE_ID}"
    },
    "properties" => {
      "名前" => {
        "title" => [
          {
            "text" => {
              "content" => "#{title}"
            }
          }
        ]
      },
      "行動予定日" => {
        "date" => {
          "start" => s,
          "end" => e
        }
      }
    }
  })

  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(request)
  end

  code = response.code
  # print "#{title}\\t#{datetime}...#{code}\\n"
  unless code == "200"
    STDERR.print "Error!\\n#{response.body}\\n"
  end
end

send_notion(ARGV[0])

このソースコードが実行されることで、「名前」プロパティにはメモしたタスクのタイトル、「行動予定日」プロパティには現在時刻から30分のタスクが新規で作成されます。

実際に動かしてみます。Command + Space キーを入力(Alfred を起動)後、「30」と入力します。タスクが無事追加されればワークフローの構築は完了です。お疲れさまでした。

実際にデータベースにアイテムを追加しているようす

時間を変更したい場合

ソースコード内の以下の部分を自分で設定したい時間に変更することで、タスクの所要時間を変更することができます。下記のスクリーンショットは 60分に変更した例です。

ソースコード内の数値を変更することで、タスクの時間を変更可能

僕の場合は、15分、30分、60分単位でそれぞれのワークフローを準備しています。

3パターンのワークフローを準備している

もしうまく動かない場合のデバッグ方法

エラーログを確認することができます。デバッグモードを有効にして、出力されたログを確認することで、どこの設定が誤っているかを確認することができます(もしうまく動かない場合は僕に DM いただければ一緒に解決できるかと思います)

デバッグモードの有効化方法

さいごに・テンプレート配布

ここまでお読みいただきありがとうございました。Alfred + Notion はかなり相性が良いのでオススメです。タスク管理に興味があるという方はぜひ導入してみてください。今回の内容はかなりマニアックで難易度が高めだったと思うので、不明点等あれば Twitter  @___35d  までお気軽にご連絡ください。

さいごに、テンプレート配布になります。僕は、下記のような「アカウンタビリティ・チャート」というデータベースで、タイムライン形式でタスクを可視化するようにしています。今日紹介した Alfred ワークフローと組み合わせると非常に強力なデータベースなので、もし興味がある方はぜひ複製して試してみてください。

テンプレートのスクリーンショット

テンプレートの操作方法は、近日中に YouTube で解説予定です。

テンプレートの URLはこちら: https://35d.notion.site/YouTube-6ca211c695cb4eb0bcd48ad4ecd3d7b3

↗︎ Notion に登録する(無料)