Gemini-cliとNotionを連携させたタスク・進捗管理システムの構築方法
📋 目次
はじめに
研究中の進捗や新しいタスクに関するメモを適当に書きなぐった過去の自分のせいで、いったい自分が何をして、これから何をしないといけないのか全く分からない。Notionを使ってる意味がない!
と思い、自分のメモ書きをGemini-CLIに整理、分解してもらい、Notionのデータベースに入力してもらうことにしました。
今回実現すること:
- 雑なメモからタスク、進捗をNotionに記録
- プロジェクトの進捗状況をnotionで一元管理
- AIによる情報整理の自動化
1. Notionデータベースの準備
まずは、Notionにタスクや進捗を管理するためのデータベースを構築します。
データベースの構造
以下のプロパティを持つデータベースを作成してください(お好みで変更できます):
プロパティ名 | タイプ | 選択肢/説明 |
---|---|---|
名前 | テキスト | メモのタイトル |
タイプ | 選択 |
進捗 , タスク , 調査
|
日付 | 日付 | メモの日付 |
ステータス | ステータス |
未着手 , 進行中 , 完了
|
詳細 | テキスト | メモの具体的な内容 |
タグ | マルチセレクト | 関連キーワード |
インテグレーションの作成と共有
1.1. インテグレーションの作成
- Notionにログインし、My Integrations にアクセス
- 「New integration」をクリック
- インテグレーション名(例:
Gemini CLI Integration
)を入力して「保存」 - 表示された「内部インテグレーションシークレット」(APIキー)を安全に保存
⚠️ 重要: APIキーは外部に漏洩しないよう厳重に管理してください。
1.2. データベースとの共有
作成したインテグレーションにデータベースへのアクセス権を付与します:
- Notionで連携したいデータベースのページを開く
- ページ右上の「...」(三点リーダー)アイコンをクリック
- 「接続」を選択
- 作成したインテグレーション名を検索して追加
1.3. データベースIDの取得
Notion APIでデータベースを特定するために必要なデータベースIDを取得します。
ブラウザの場合:
-
フルページデータベース: データベースのページを開いた状態で、ブラウザのURLを確認します。URLは
https://www.notion.so/<workspace>/<database_id>?v=<view_id>
のようになっています。この<database_id>
の部分がデータベースIDです。これを控えておいてください。 -
インラインデータベース: データベースの任意の行にカーソルを合わせ、表示される「...」(三点リーダー)アイコンをクリックし、リンクをコピーします。コピーしたリンクをテキストエディタなどに貼り付け、同様に
<database_id>
の部分を特定します。
Notionデスクトップアプリの場合:
-
フルページデータベース: データベースのページを開き、右上の「...」(三点リーダー)アイコンをクリックし、リンクをコピーします。コピーしたリンクをテキストエディタなどに貼り付け、同様に
<database_id>
の部分を特定します。 -
インラインデータベース: データベースの任意の行にカーソルを合わせ、表示される「...」(三点リーダー)アイコンをクリックし、リンクをコピーします。コピーしたリンクをテキストエディタなどに貼り付け、同様に
<database_id>
の部分を特定します。
2. Pythonスクリプト (notion_writer.py
) の作成
Notion APIを介してデータベースにデータを書き込むためのPythonスクリプトを作成します。以下のコードをコピーして notion_writer.py
ファイルとして保存してください。
from notion_client import Client
import os
from datetime import datetime
# Notion APIキーとデータベースIDを環境変数から取得
NOTION_TOKEN = os.environ.get("NOTION_TOKEN")
DATABASE_ID = os.environ.get("NOTION_DATABASE_ID")
# 環境変数が設定されているか確認
if not NOTION_TOKEN:
print("エラー: 環境変数 NOTION_TOKEN が設定されていません。")
exit()
if not DATABASE_ID:
print("エラー: 環境変数 NOTION_DATABASE_ID が設定されていません。")
exit()
# Notionクライアントの初期化
notion = Client(auth=NOTION_TOKEN.strip())
# データベースIDをUUID形式に変換 (ハイフンを追加)
def format_database_id(db_id):
if '-' not in db_id:
return f"{db_id[:8]}-{db_id[8:12]}-{db_id[12:16]}-{db_id[16:20]}-{db_id[20:]}"
return db_id
DATABASE_ID = format_database_id(DATABASE_ID.strip())
def add_notion_page(
title: str,
page_type: str, # '進捗', 'タスク', '調査'
status: str = "未着手", # '未着手', '進行中', '完了'
details: str = "",
tags: list = None,
date: str = None # YYYY-MM-DD 形式
):
"""
Notionデータベースに新しいページを追加します。
"""
if tags is None:
tags = []
if date is None:
date = datetime.now().strftime("%Y-%m-%d")
properties = {
"名前": {"title": [{"text": {"content": title}}]},
"タイプ": {"select": {"name": page_type}},
"日付": {"date": {"start": date}},
"ステータス": {"status": {"name": status}},
"タグ": {"multi_select": [{"name": tag} for tag in tags]},
}
children = []
if details:
children.append({
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [{"type": "text", "text": {"content": details}}]
}
})
try:
new_page = notion.pages.create(
parent={"database_id": DATABASE_ID},
properties=properties,
children=children
)
print(f"Notionにページを追加しました: {title} (ID: {new_page['id']})")
return new_page
except Exception as e:
print(f"Notionページの追加中にエラーが発生しました: {e}")
return None
💡このスクリプトの
add_notion_page()
関数がGeminiからの指示に基づいてNotionにデータを追加します。
3. 環境変数の設定とスクリプトの実行
Notion APIキーとデータベースIDを環境変数に設定します。
一時的な環境変数の設定(コマンドライン)
# Windowsの場合
set NOTION_TOKEN=YOUR_NOTION_API_KEY
set NOTION_DATABASE_ID=YOUR_DATABASE_ID
python notion_writer.py
# macOS/Linuxの場合
export NOTION_TOKEN=YOUR_NOTION_API_KEY
export NOTION_DATABASE_ID=YOUR_DATABASE_ID
python notion_writer.py
⚠️ 注意: この設定はシェルセッション内でのみ有効です。
永続的な環境変数の設定(Windows)
- 「スタート」メニューを右クリックし、「システム」を選択
- 「システムの詳細設定」→「環境変数」をクリック
- 「ユーザー環境変数」または「システム環境変数」で、「新規」をクリック
-
NOTION_TOKEN
とNOTION_DATABASE_ID
をそれぞれの値で追加
設定後、新しいコマンドプロンプトを開くと環境変数が反映されます。
4. Gemini CLIとの連携
連携の流れ
- 作成したスクリプトがあるディレクトリでGemini CLIを起動
- あらかじめGEMINI.md を作成し、指示を与えておく
- 自然言語でタスクや進捗を伝える
- Geminiが指示を解析し、Pythonスクリプトを修正
-
notion_writer.py
を呼び出し、Notionにデータを書き込む
これで雑なメモを整理、分解してNotionに整理できます。
まとめ
「ObsidianじゃなくてNotionを使いたい」という願望だけで試しましたが、普通にObsidianの方が相性がよさそうです。