見出し画像

RaycastでNotionに一瞬でメモを取る方法【Mac向け】

今回は、Raycastを使って、Notionに一瞬でメモを取る方法を紹介します!

例えば、Raycastで「note 買い物」というコマンドを入力するだけで、Notionを開くことなく「買い物」というページをデータベースに追加できるようになります。

Macを使っていて、後でやりたいことができたときや、アイデアが浮かんだときなどに、キーボードだけで数秒でメモを取ることができて便利です。

ちなみに、RaycastにはNotion公式の拡張機能があるのですが、追加するページをいちいち選ばないといけなかったり、デフォルトの値を設定できなかったりと、多少不便に感じることがあるので、自分でプログラムを書くことにしました。

今回の方法はいろいろ応用できるので、データベースごとにコマンドを分けたり、コマンドによって初期値を変えたりすることも可能です!

プログラミングを含む内容になるので少し難しいですが、書いてある通りにやればできるように、分かりやすく解説します。

1. インテグレーションの作成

今回は、Notionをプログラミングで操作するために、Notion APIというものを使います。自分のNotionのワークスペースでNotion APIを使えるようにするためには、インテグレーションを作成する必要があります。

まず、https://developers.notion.com/にアクセスし、ページの右上にある「View my integrations」をクリックしてください。Notionにログインしていない場合はログインページが表示されると思うので、自分のアカウントでログインします。

「インテグレーション」のページが表示されたら、「新しいインテグレーション」をクリックします。

「インテグレーション名を追加」のところに、インテグレーションの名前を入力します。名前は何でもいいですが、私は、素早くメモを取るという意味で「Quick Note」としました(どうやら名前に「notion」という単語を含めることはできないようです)。

次に、「関連ワークスペース」を選択します。自分がメモを取るのに使いたいワークスペースを選択してください。

そのほかの設定はデフォルトのままで大丈夫です。入力が完了したら、「保存」をクリックします。

「インテグレーションが作成されました」というダイアログが表示されると思うので、そのままインテグレーション設定に進みます。

Notion APIを使うために必要なAPIキーを取得します。「内部インテグレーションシークレット」という項目の、「表示」をクリックすることで、APIキーを確認できます。この値は後で使用するので、タブを開いたままにしておいてください。

2. Notionデータベースの作成

続いて、メモを追加するためのデータベースを作成します。

Notionを開き、データベースを作成したいページで、"/database"と入力し、「データベース:インライン」を選択します。

必要に応じてデータベースをカスタマイズしてください。ここでは何も変えずに続けます。

次に、このページをインテグレーションに接続して、Notion APIで操作できるようにします。

ページの右上の「•••」のアイコンをクリックして、下のほうにある「接続先」をクリックします。連携できるサービスの一覧が表示されるので、その中から、先ほど作成したインテグレーションの名前を探してクリックしてください。

確認されたら「はい」を選びます。うまくいけば、「接続先」の上に自分で作成したインテグレーションが表示されます。

最後に、データベースのIDを取得します。

データベースの上部にある「•••」のアイコンをクリックします(先ほどとは違うのでご注意ください)。

表示されたメニューの中から、「ビューのリンクをコピー」をクリックしてください。

コピーしたリンクを、適当な場所にペーストしてみてください。
"https://www.notion.so/"の後ろの、"?"より前の部分が、データベースのIDです。例えば、https://www.notion.so/1234567890abcdef1234567890abcdef?v=aaaaaa…のようなリンクだったら、1234567890abcdef1234567890abcdefがデータベースIDです。"/"や"?"などの記号を含めないように注意してください。

注意
ワークスペースによっては、"notion.so/"の後ろに、ワークスペース名が入る場合があるようです。ワークスペース名の後ろの"/"より後の部分からがデータベースIDになります。

データベースIDはどこかにメモしておきましょう。

これで、Notion側の準備は完了です。ここから、Raycastにコマンドを追加していきます。

3. Raycastのコマンド作成

Raycastを開いて、「Create Script Command」を検索し、実行してください。

続いて、必要な項目を入力していきます。

Template: Node.js
Mode: Silent
Title: 作りたいコマンドの名前

他の部分は空欄でもいいと思いますが、「With argument」にチェックを入れるようにしてください。

完了したら、CommandキーとReturnキーを同時に押します。すると、コマンドのプログラムをどのフォルダに保存するか聞かれるので、保存したいフォルダを選択してください。すると、選んだフォルダが自動で開くはずです。

作成された、プログラムのファイルを開きます。プログラミングをやったことがある方はVisual Studio Codeなどお好きなエディタで開いてください。

プログラミングの経験がない方は、Macに標準でインストールされている「テキストエディット」というアプリを使います。Finderで、先ほど作成されたファイルを右クリックし、「このアプリケーションで開く」から「テキストエディット」を選んでください。以下のようなウィンドウが表示されるはずです。

`console.log("Hello World! Argument1 value: " + process.argv.slice(2)[0])` の部分を削除して、以下のコードに置き換えてください。(もともと上の方に書かれている、"// "で始まる行は残しておいてください。)

const NOTION_API_KEY = "自分のAPIキー";
const DATABASE_ID = "自分のデータベースID";

const args = process.argv.slice(2);

async function addPageToNotion() {
  const url = "https://api.notion.com/v1/pages";

  const payload = {
    parent: { database_id: DATABASE_ID },
    properties: {
      名前: {
        title: [
          {
            text: {
              content: args[0],
            },
          },
        ],
      },
    },
  };

  const opts = {
    method: "POST",
    headers: {
      "Notion-Version": "2022-06-28",
      Authorization: `Bearer ${NOTION_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload),
  };

  try {
    const response = await fetch(url, opts);
    if (!response.ok) {
      throw Error(`${response.statusText} (${response.status})`);
    }
    console.log("ページを追加しました");
  } catch (error) {
    console.error(`エラー: ${error}`);
  }
}

addPageToNotion();

この上のコードのうち、最初の2行は自分で編集する必要があります。先ほどインテグレーション作成後に確認したAPIキー(内部インテグレーションシークレット)と、データベースIDを入れてください。なお、APIキーとデータベースIDは半角の「"」(ダブルクォーテーション)で囲むようにしてください。

APIキーは漏洩するとセキュリティ上の危険がありますので、これを入力したファイルなどは外部に漏らさないように注意してください。

入力が完了したら、CommandキーとSキーを同時に押して保存します。

4. コマンドを実行する

Raycastを開いて、コマンドを実行してみます。

先ほどコマンドを作成するときに自分が入力した名前を入力してください。数文字入力して検索がヒットしたら、Tabキーを押します。「Placeholder」と書かれた部分にカーソルが移動するので、メモしたい内容を入力して、Returnキーを押してください。

うまくいけば、画面の中央下あたりに、「ページを追加しました」と表示されます。Notion上で確認すると、入力した名前のページがデータベースに追加されているはずです!

エラーが発生した場合は、同じく画面の中央下あたりにエラーの内容が一瞬表示されます。コードに誤りがないか確認してください。なお、エラーメッセージをしっかり確認したい場合は、プログラムのファイルの6行目あたりにある `// @raycast.mode silent` を、 `// @raycast.mode fullOutput` に書き換えてください。

補足

エイリアスを設定する

より短い単語でコマンドを呼び出したい場合は、エイリアスを設定します。

Raycastで該当のコマンドを検索し、それが一番上に来た状態で、Commandキー + Shiftキー + ,(カンマ)キーを同時に押します。そのコマンドの設定が開くので、Add Aliasに、短いキーワードを入力してください。そのキーワードでコマンドが呼び出せるようになります。

他のプロパティを設定する

他のプロパティの値も、デフォルト値として設定したり、入力に応じて設定したりすることができます。ここでは例として、タグをつける方法を紹介します。

上のコードの代わりに次のコードを使用すると、作成されたページに「買い物」というタグがつくようになります。

const NOTION_API_KEY = "自分のAPIキー";
const DATABASE_ID = "自分のデータベースID";

const args = process.argv.slice(2);

async function addPageToNotion() {
  const url = "https://api.notion.com/v1/pages";

  const payload = {
    parent: { database_id: DATABASE_ID },
    properties: {
      名前: {
        title: [
          {
            text: {
              content: args[0],
            },
          },
        ],
      },
      タグ: {
        multi_select: [{ name: "買い物" }],
      },
    },
  };

  const opts = {
    method: "POST",
    headers: {
      "Notion-Version": "2022-06-28",
      Authorization: `Bearer ${NOTION_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload),
  };

  try {
    const response = await fetch(url, opts);
    if (!response.ok) {
      throw Error(`${response.statusText} (${response.status})`);
    }
    console.log("ページを追加しました");
  } catch (error) {
    console.error(`エラー: ${error}`);
  }
}

addPageToNotion();

タグごとにコマンドを作成すれば、タグのついたページも一瞬で作れるようになります! また、入力欄を1個から2個以上に増やせば、1つのコマンドでタグを切り替えることも可能です。

このように、RaycastとNotion APIを使えばいろいろなことができるので、ぜひ自分に合った使い方を考えてみてください。

最後に

今回は、Raycastを使ってNotionに一瞬でメモを取る方法を紹介しました。少し難しかったかもしれませんが、Notionがさらに便利になるので、ぜひ活用してみてください。

また、私はNotionの使い方やNotion API・Raycastとの連携などに関して分からないことがある方のために、ココナラでNotionの質問受付サービスを提供しております! あなたの希望を実現するお手伝いをしますので、ぜひご利用ください!

最後まで読んでくださりありがとうございました! 今後も、NotionやRaycastに関する情報を発信予定ですので、興味のある方はぜひフォローお願いします!


よろしければサポートお願いします! 励みになります。