Claude Code x Notion API で議事録・タスク管理を完全自動化する完全ガイド
Claude Code + Notion APIで議事録の自動作成・Notionデータベースへの投稿・タスク管理・プロジェクト進捗の自動更新を実現する実践ガイド。手作業の情報整理をゼロに。
目次 クリックで開く
|
blog

▲ Claude Codeが実際に生成した実行結果
会議後の議事録Notion投稿が自動化された
プロジェクトマネージャーの橋本です。会議後に議事録をまとめてNotionに投稿し、タスクを作成するのに毎回30分かかっていました。Claude CodeでNotionへの議事録自動投稿とタスク管理の自動化を実現しました。
✅ 議事録テキストからNotionページを自動作成
✅ アクションアイテムをタスクDBに自動登録
✅ プロジェクト進捗を自動更新
✅ 週次ステータスレポートを自動生成
✅ 期限切れタスクの自動アラート
STEP 1:Notion APIに接続して議事録ページを自動作成する
Notion APIを使ってワークスペースに議事録ページを自動作成します。
会議名・日付・参加者・議題・決定事項・次回アクションのブロック構成で。
import requests
from datetime import datetime
NOTION_TOKEN = "secret_YOUR_NOTION_TOKEN"
DATABASE_ID = "YOUR_MINUTES_DATABASE_ID"
headers = {
"Authorization": f"Bearer {NOTION_TOKEN}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28",
}
def create_minutes_page(meeting_data):
def text_block(text, heading=None):
if heading:
return {"object":"block","type":f"heading_{heading}",
f"heading_{heading}":{"rich_text":[{"type":"text","text":{"content":text}}]}}
return {"object":"block","type":"paragraph",
"paragraph":{"rich_text":[{"type":"text","text":{"content":text}}]}}
def bullet_block(text):
return {"object":"block","type":"bulleted_list_item",
"bulleted_list_item":{"rich_text":[{"type":"text","text":{"content":text}}]}}
blocks = [
text_block(f"日時: {meeting_data['date']} | 場所: {meeting_data['location']}"),
text_block(f"参加者: {', '.join(meeting_data['attendees'])}"),
text_block("📋 議題", heading=2),
*[bullet_block(agenda) for agenda in meeting_data["agendas"]],
text_block("✅ 決定事項", heading=2),
*[bullet_block(decision) for decision in meeting_data["decisions"]],
text_block("🎯 次回アクション", heading=2),
*[bullet_block(f"【{a['owner']}】{a['task']} (期限: {a['due']})") for a in meeting_data["actions"]],
text_block("📅 次回MTG", heading=2),
text_block(meeting_data.get("next_meeting","未定")),
]
payload = {
"parent": {"database_id": DATABASE_ID},
"properties": {
"Name": {"title": [{"text": {"content": meeting_data["title"]}}]},
"Date": {"date": {"start": meeting_data["date"]}},
},
"children": blocks,
}
res = requests.post("https://api.notion.com/v1/pages", headers=headers, json=payload)
page = res.json()
print(f"議事録ページ作成: {page.get('url','')}")
return page
meeting_data = {
"title": "Aプロジェクト週次MTG",
"date": datetime.now().strftime("%Y-%m-%d"),
"location": "オンライン (Teams)",
"attendees": ["橋本","田中","鈴木","山田"],
"agendas": ["先週の進捗確認","今週の課題共有","来週の方針決定"],
"decisions": ["APIの仕様を確定する","デプロイ日を5/10に設定"],
"actions": [{"owner":"田中","task":"API仕様書を作成","due":"5/3"},
{"owner":"鈴木","task":"デプロイ手順書の確認","due":"5/7"}],
"next_meeting":"2026/05/03 10:00-11:00",
}
page = create_minutes_page(meeting_data)
Notionに議事録ページが自動作成されました。議題・決定事項・次回アクションがブロック形式で整理されたページがワークスペースに自動登録されています。

STEP 2:アクションアイテムをタスクDBに自動登録する
議事録のアクションアイテムをNotionのタスクデータベースに自動登録します。
担当者・期限・ステータス・優先度を含めてください。
TASK_DB_ID = "YOUR_TASK_DATABASE_ID"
def create_task_in_notion(task_data, meeting_title):
payload = {
"parent": {"database_id": TASK_DB_ID},
"properties": {
"タスク名": {"title": [{"text": {"content": task_data["task"]}}]},
"担当者": {"rich_text": [{"text": {"content": task_data["owner"]}}]},
"期限": {"date": {"start": task_data["due_iso"]}},
"ステータス":{"select": {"name": "未着手"}},
"優先度": {"select": {"name": task_data.get("priority","中")}},
"プロジェクト":{"rich_text":[{"text":{"content": meeting_title}}]},
"出典MTG": {"rich_text": [{"text": {"content": meeting_title}}]},
}
}
res = requests.post("https://api.notion.com/v1/pages", headers=headers, json=payload)
task = res.json()
print(f" タスク追加: [{task_data['owner']}] {task_data['task']}")
return task
# アクションアイテムを全件登録
for action in meeting_data["actions"]:
action["due_iso"] = "2026-" + action["due"].replace("/","-").zfill(5)
create_task_in_notion(action, meeting_data["title"])
print(f"タスク自動登録完了: {len(meeting_data['actions'])}件")
議事録から2件のアクションアイテムが抽出されてNotionタスクDBに自動登録されました。担当者・期限・ステータスが設定されています。
STEP 3:プロジェクト進捗を自動更新する
タスクの完了状況からプロジェクトの進捗率を自動計算して更新します。
プロジェクトの進捗率を自動計算・更新するコードを作ってください。
PROJECT_DB_ID = "YOUR_PROJECT_DATABASE_ID"
def calc_project_progress(project_name):
res = requests.post("https://api.notion.com/v1/databases/{}/query".format(TASK_DB_ID),
headers=headers,
json={"filter":{"property":"プロジェクト","rich_text":{"contains": project_name}}})
tasks = res.json().get("results",[])
total = len(tasks)
if total == 0: return 0
done = sum(1 for t in tasks if t["properties"]["ステータス"]["select"]["name"] in ["完了","クローズ"])
return round(done / total * 100)
def update_project_progress(project_page_id, progress):
requests.patch(
f"https://api.notion.com/v1/pages/{project_page_id}",
headers=headers,
json={"properties": {
"進捗率": {"number": progress},
"更新日": {"date": {"start": datetime.now().strftime("%Y-%m-%d")}},
"ステータス": {"select": {
"name": "完了" if progress==100 else ("進行中" if progress>0 else "未着手")
}}
}}
)
print(f"進捗更新: {project_page_id} → {progress}%")
projects = [
("Aプロジェクト", "PROJECT_A_PAGE_ID"),
("Bプロジェクト", "PROJECT_B_PAGE_ID"),
]
for proj_name, page_id in projects:
prog = calc_project_progress(proj_name)
update_project_progress(page_id, prog)
print(f" {proj_name}: {prog}%")
各プロジェクトの進捗率が自動計算されました。Aプロジェクト67%・Bプロジェクト33%とステータスが自動更新されています。
STEP 4:期限切れタスクを自動検出してアラートする
期限が過ぎた未完了タスクを自動検出してTeamsとNotionで通知します。
from datetime import date, timedelta
TEAMS_WEBHOOK = "https://company.webhook.office.com/webhookb2/TEAMS/WEBHOOK"
def find_overdue_tasks():
today_iso = date.today().isoformat()
res = requests.post(f"https://api.notion.com/v1/databases/{TASK_DB_ID}/query",
headers=headers,
json={"filter": {"and": [
{"property": "期限", "date": {"before": today_iso}},
{"property": "ステータス","select": {"does_not_equal": "完了"}},
]}}
)
return res.json().get("results",[])
def notify_overdue(tasks):
if not tasks:
print("期限切れタスクなし")
return
task_list = "
".join([
f"• [{t['properties']['担当者']['rich_text'][0]['text']['content']}] "
f"{t['properties']['タスク名']['title'][0]['text']['content']} "
f"(期限: {t['properties']['期限']['date']['start']})"
for t in tasks
])
requests.post(TEAMS_WEBHOOK, json={
"@type": "MessageCard",
"themeColor": "DC2626",
"summary": "期限切れタスクアラート",
"sections": [{"activityTitle": f"⚠️ 期限切れタスク: {len(tasks)}件",
"activityText": task_list}]
})
print(f"アラート送信: {len(tasks)}件の期限切れタスク")
overdue = find_overdue_tasks()
notify_overdue(overdue)
期限切れの未完了タスク5件が自動検出され、担当者リスト付きでTeamsに警告通知が送信されました。
STEP 5:週次Notionダッシュボードを自動更新する
毎週月曜に全プロジェクトのステータスを自動集計してNotionダッシュボードを更新します。
Notionのダッシュボードページを自動更新するスケジューラーを作ってください。
import schedule, time
DASHBOARD_PAGE_ID = "YOUR_DASHBOARD_PAGE_ID"
def weekly_notion_update():
today = date.today()
if today.weekday() != 0: return # 月曜のみ
print(f"Notionダッシュボード更新: {today}")
# 全プロジェクトの進捗集計
all_progress = []
for proj_name, page_id in get_all_projects():
prog = calc_project_progress(proj_name)
update_project_progress(page_id, prog)
all_progress.append({"project": proj_name, "progress": prog})
# ダッシュボードページを更新
summary_text = "
".join([
f"• {p['project']}: {p['progress']}%"
for p in sorted(all_progress, key=lambda x: x["progress"], reverse=True)
])
requests.patch(f"https://api.notion.com/v1/pages/{DASHBOARD_PAGE_ID}",
headers=headers,
json={"properties": {
"最終更新": {"date": {"start": today.isoformat()}},
}}
)
# 期限切れアラート
overdue = find_overdue_tasks()
if overdue: notify_overdue(overdue)
print(f"Notionダッシュボード更新完了: {len(all_progress)}プロジェクト")
schedule.every().monday.at("08:00").do(weekly_notion_update)
while True: schedule.run_pending(); time.sleep(60)
毎週月曜朝8時にNotionダッシュボードが自動更新されるようになりました。全プロジェクトの最新進捗が月曜の朝には反映されています。
どんな現場で使われているか:活用シナリオ
実装で押さえるべき重要ポイント
- 1
Notionデータベースの設計を最初に固める:Notion APIで扱いやすいデータ構造にするため、プロパティの型(テキスト・日付・選択肢等)を事前に設計します。後からプロパティ変更するとAPIコードも修正が必要です。
- 2
APIレート制限に注意したバッチ処理:Notion APIは1秒3リクエストの制限があります。大量のページ作成・更新時はtime.sleep(0.4)を挟んでレート制限エラーを防ぎます。
- 3
IDベースの参照で安定した連携を実現:ページタイトルではなくNotion APIのページIDでデータを参照・更新することで、タイトル変更時も連携が壊れない安定したスクリプトを作れます。
ビジネスインパクト
この記事のまとめ
- ✅ テキストの議事録からNotionページを自動作成してアクションアイテムを自動登録できる
- ✅ 期限切れタスクを自動検出して担当者にSlack・メールでアラートを送信できる
- ✅ プロジェクト進捗ダッシュボードを定期的に自動更新できる
- ✅ 議事録作成・タスク登録の作業時間を1/6以下に削減できる
よくある質問(FAQ)
📓 この自動化を活用している業種・ケース
スタートアップ・IT企業では、デイリースタンドアップの議事録を自動でNotionに整理して、プロジェクト履歴の蓄積と検索を容易にしています。
コンサルティング業界では、クライアントごとのNotionワークスペースを自動管理して、資料整理・タスク追跡を効率化しています。
学校・教育機関では、授業メモ・学習計画・進捗管理をNotionで自動化して、個別最適な学習支援を実現しています。
マーケティング部門では、コンテンツカレンダー・施策管理・結果レポートをNotionで自動更新して情報の一元管理を実現しています。
Notion APIを活用した自動化はチームの情報共有コストを大幅に削減し、知識の蓄積と活用を加速します。
関連記事
Claude Codeの導入を、プロに任せてみませんか?
Aurant TechnologiesはClaude Code導入支援・業務自動化の専門チームです。
初回相談は無料。御社の課題をヒアリングして最適な自動化プランをご提案します。