動機
-
研究で知らん単語が多すぎる
- 単語はNotionに大量にストックしているがいちいち調べるのが面倒
- ボタンを押すだけで簡単にChatGPTで調べてくれるオートメーションが欲しい
- ページ(単語)追加時トリガーでもいいが,トークンを無駄遣いしそうで怖い
- どの分野・領域に関わる単語なのかをパッと把握するために,単語に関するタグを自動でつけて欲しい(手作業だとキリがない)
- ソースのURLをいちいちコピペするのもダルいのでそれもついでにやって欲しい
成果
- 単語名(例として"Jitter")だけ入力
- あとは
Ask ChatGPTボタンを押すだけで「説明 (Description)」,「関連タグ(Tags)」,「ソース(Source)」を自動出力 - モデルの違いにもよると思うが,多少の遅延はある.
使用したサービス
- Notion 学生プラスプラン: 無料
- 学校のメールアドレスが必要
- ボタンによるオートメーションの使用とWebhookの送信が可能になる
- OpenAI API (=ChatGPT API): 有料(Pay as you go)
- https://platform.openai.com/
- 月$20のStandardプランとかとは別
- GPT-5.1を使って,一回につき0.3円ぐらい?
- Make: Webhookサーバとして使う.月1000回まで無料.
大体の仕組み
今回のWebhookサーバとして用いるMakeでは,画像のような一つのアプリケーションのカタマリを「モジュール」と呼んでいる.ので,この記事でもそう呼ぶ.
- Notionのデータベースで調べたい単語を入力し,
Ask ChatGPTボタンを押す - 調べたい単語とそのページID(データベースのどのアイテムかを指す.テーブルの"行"に相当)を含むWebhookがJSON形式で送信される
- MakeがWebhookを受信.JSONから調べたい単語のみを抽出し,OpenAI APIに渡す.(1個目のモジュール)
- ChatGPTがJSON形式で結果生成(2個目のモジュール)
- 回答のためのプロンプトはMake内で指定できる
- 今回は回答をJSONで出力させることで複数の回答(description, tags, source)に対応
- 得られた回答を使い,Notion APIで自身のデータベース(単語帳)を更新(3個目のモジュール)
手順
①Notion側でボタン付きのデータベースを作成
自分の場合はこんな感じ.()はプロパティの種類.
| Word | Ask ChatGPT (ボタン) | Description (テキスト) | Tags (マルチセレクト) | Source (URL) |
|---|
ボタンを押したときのWebhook処理については後でやる.
②NotionのAPIキーを生成
- Notionインテグレーション(https://www.notion.so/profile/integrations)にアクセス
- 「新しいインテグレーション」を選択
- 以下のように設定して「保存」
- インテグレーション名: テキトーに入力(例: "Ask ChatGPT Button")
- 関連ワークスペース: ボタンを置くデータベースがある場所を選択
- 種類: "内部 (internal)"を選択(個人で使う場合)
- ロゴ: 必須じゃないのでテキトーに
- 「インテグレーション設定」へ
- 「内部インテグレーションシークレット」を控える(これがAPIキー)
- 「アクセス」→「アクセス権限を編集」から,ボタンを使用するデータベースがあるトップレベルのページにチェックを入れて保存("トップレベルのページ"なので,直上のページじゃなくてOK)
③ChatGPT APIのAPIキーを生成
-
OpenAIのAPIページ(https://platform.openai.com/)にアクセス
-
OrganizationとProjectを作成
- デフォルトで"Personal"という名前のOrganizationは作成されているかも?
- デフォルトで"Default Project"という名前のProjectは作成されているかも?
- 昔自分が作成したものか,元から用意されていたものか分かりませんが,もしこれらが最初からあればこれでOK
-
右上のヘッダにある「Dashboard」をクリック
-
左サイドバーの「Organization -> General」をクリック
-
「Organization ID」を控える.
-
左サイドバーの「Organization -> API Keys」を選択
-
右上の「Create new secret key」をクリックするとこんな画面.
以下のように入力して「Create secret key」.- Name: テキトーに(例: "Ask ChatGPT Button")
- Project: 先ほど作成したProjectか,"Default project"
- Permissons: "All"
-
生成されたAPIキーを控える
-
左サイドバーの「Organization -> Billing」から,請求先情報と予算などを設定(自分はとりあえず最低設定金額に設定しといた)
④Makeでシナリオ作成
まず,NotionからWebhookが正しく受信できるかを確認
-
Make(https://us2.make.com/)の新規登録・ログインを済ませる
-
左サイドバーの「Scenarios」をクリック
-
ヘッダ右上の「+ Create scenario」をクリック
-
「Build from scratch」を選択し,シナリオ設定画面に移行する.
-
最初のモジュールとしてWebhookモジュールを追加する.
- 空モジュールの「+」をクリック
- 「Custom webhook」を選択
- 「Create a webhook」をクリックするとWebhookの設定画面に
- テキトーに名前を付けて「Save」をクリック
- 表示されるWebhook URL(https://hook.us2.make.com/xxx)を「Copy address to clipboard」(下画像参照)からコピー
-
Notion側のボタンにWebhook URLを追加する
- 送信するプロパティは「Word」のみでOK
- カスタムヘッダには何もいらない
-
Makeに戻り,下の紫色のボタン「Run Once」をクリックして,Webhook受信をテストする
Webhook受信確認が済んだら,OpenAI API (ChatGPT) のテスト
- Webhooksモジュールの右の「+」から,OpenAIモジュールを追加.
各項目について以下のように設定を行う.- Connection
- 「Add」を押して,先ほど取得したOpenAI APIのAPIキーとOrganization IDを入力して「Save」
- 上手くコネクトできたか確認.
- Select Method
- 「Create a Chat Completion」を選択
- Model
- お好みでいいと思う.自分はGPT-5.1を選択
- Messages
- Message 1
- Role: 「Developer / System」を選択
- Text Content: お好みで前提プロンプトを入力.自分の場合はこんな感じ.
最初,JSONで出力させるオプションがあることを知らなかったので,頑張ってJSON出力を強制してます.あなたは研究用用語集を作成するアシスタントです。入力として与えられた用語について、 - 日本語で2〜3文の簡潔な説明(description) - その用語にふさわしい英語タグを最大5個(tags) - 主な参考サイトを1つ。URLのみの文字列(source) を返してください。ただし、descriptionについては、専門用語は必要最低限にし、 学部生にも分かるレベルでわかりやすく説明してください。 descriptionの口調は「です・ます」調ではなく、言い切りの形で答えてください。 説明する対象の単語が略称である場合は、何の略か必ず示してください。 【重要ルール】 - 出力は次の形式の**1つの JSON オブジェクトのみ** とする。 { "description": "ここに説明文", "tags": ["tag1", "tag2", ...], "source": "https://example.com/" } - JSON 以外の文字(説明文、注意書き、コードブロック記号、バッククォート ` など)は一切出力しない。 - 先頭や末尾に空白や改行、バッククォート ` を入れない。 - 文字列の中に改行を含めない(必要なら "\n" を使うが、できるだけ使わない)。
- Message 2
- Role: 「User」を選択
- Text Content: {{ }}の部分は環境によって変わる可能性があるので,自分に合ったものを選択する(Webhookのテスト結果から選択できる). 先頭の数字はWebhookのモジュールIDを指している.
「{{1.data.properties.Word.title[].text.content}}」という単語について上記のJSONを返してください。
- Message 1
- Connection
- 「Advanced Settings」にチェックを入れ、以下の設定を行い,JSON形式で出力されるようにする.
- Response Format: "JSON Object"
- Parse JSON Response: "Yes"
- 「Save」を押し,OpenAIモジュールの設定は完了.
- ここまで出来たら一度「Run Once」でテストを行う.
最後にNotionモジュールを追加してテスト
- OpenAIモジュールの右にNotionモジュールの「Update a Data Source Item」を追加し,以下のように設定を行う.
- Connection
- 「Add」をクリック
- Connection Type: "Notion Internal"
- Connection Name: はテキトーに設定
- Internal Integration Token: に取得したNotion APIのAPIキー
- 「Save」をクリックすると,インテグレーションが紐づけられる
- Update By: 「Data Source」を選択
- Enter a Data Source ID: 「Select from the list」を選択
- Data Source ID
- 「Search」をクリック
- 使用するデータベースを名称で検索
- 選択すると自動でIDが入力される
- Data Source Item ID
- 最初のWebhookモジュールの「data: id」を入力.
- Webhookの受信テストをしていれば,受信結果から探せる.
- Fields
- Word: (空白)
- Description: OpenAIモジュールで出力される「result: description」を入力
- Source: OpenAIモジュールで出力される「result: source」を入力
- Tags: OpenAIモジュールで出力される「result: tags[]」を入力
- Connection
- これで一通りのシナリオ設定が終了.
- もう一度「Run Once」を押し,Notion側で
Ask ChatGPTボタンを叩く.
正しく設定できていればDescription, Tags, Sourceが自動入力される.
デプロイ
- テストがOKであれば,Makeの左サイドバーにある「Scenario」をクリックし,右のアクティベートスイッチをONにする.
- これでデプロイ完了(エラーや自分で非アクティベートしない限り動き続ける)
やってみて思ったこと
- タグ機能が便利
- 人間の手ではとても面倒なので素晴らしい.
- ただ,表記揺れがある("control systems"と"control-systems"など)ので,「単語間の空白(スペース)にハイフンを使用しない」などのプロンプトを入れてあげるといいかも.
- ChatGPT APIに課金する価値はある
- 少しの利用であれば大した金額にならなそう
- 人を雇うことに比べたら早いし安すぎる
- Makeが便利
- UIが上手く出来てて,楽しい
- 色々なサービスに対応しているのでアイデアが広がる
追記
論文管理ver.も作りました!
https://qiita.com/Tomoya-Oku/items/f66a1cacd6384910661a




